The connected account’s web-app and API chats are available through `list_chats`, `get_chat`, and `list_chat_messages`. Chat tools accept a chat ID or Motion chat URL; `get_chat` returns the latest export. Use `list_chat_exports` to retrieve all saved video exports and `get_chat_export` to renew an exact export’s download link. Links expire after one hour; saved videos remain available, and reading them does not spend credits. `get_session_status` also accepts web-app chat IDs and URLs.
Use Motion to create or edit videos, including animations, promos, ads, explainers, demos, and social clips. Motion handles research, production, and rendering.
`create_video` takes a brief: goal, source URL or text, audience, tone, and key points. Motion chooses the shots. Omit engine to use GVA 1.0 when the account has access, or Motion otherwise. GVA effort is standard (default) or extended; Motion effort is light, medium (default), or high. Choose engine, effort, and template independently; discover choices with list_engines and list_templates. Optional inputs: design_system_id, YouTube style_reference_url, aspect_ratio, duration, and attachments. Jobs are async; the widget updates progress and shows the finished video without polling. `create_followup` retains the project engine and effort.
Credits: `show_plans_and_credits` shows balance, plans, and credit packs. `purchase_credits` creates hosted checkout; the user must complete it in their browser, even with a saved card. `subscribe_to_plan` and `set_auto_topup` return Motion billing for the user to review and save changes. These links do not add credits or change settings. If structuredContent.recovery_tool is set, show that tool and wait for the user to complete payment before retrying.
Protocol
Pass100/10016 / 16 pts
Connection, authentication, and protocol compatibility.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List your Motion chats from the web app and API, including archived chats. Returns chats with IDs, titles, summaries, status and timestamps, plus has_more and next_cursor. Search titles and summaries, and pass next_cursor to read more.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Number of items to return per page. Omit to use 25.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Opaque next_cursor from the preceding page. Omit for the first page; do not construct or modify it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
search
Match chat titles and context summaries. Omit to list all your chats.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chats",
"has_more",
"next_cursor"
],
"properties": {
"chats": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"status",
"context_summary",
"created_at",
"updated_at",
"chat_url"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable title, or null when it has not been set."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"type": "string",
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"type": "string",
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"context_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Saved chat summary, or null when no summary is available."
}
},
"additionalProperties": false
},
"description": "Chats owned by the authenticated account, ordered by most recent update."
},
"has_more": {
"type": "boolean",
"description": "True when another page is available."
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Opaque cursor for the next page, or null at the end. Pass it unchanged as cursor."
}
},
"description": "A chats array with saved titles, summaries, lifecycle states and timestamps, plus has_more and next_cursor for pagination.",
"additionalProperties": false
}
Original tool metadata
{
"name": "list_chats",
"title": "List Motion chats",
"description": "List your Motion chats from the web app and API, including archived chats. Returns chats with IDs, titles, summaries, status and timestamps, plus has_more and next_cursor. Search titles and summaries, and pass next_cursor to read more.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of items to return per page. Omit to use 25."
},
"cursor": {
"type": "string",
"maxLength": 1024,
"description": "Opaque next_cursor from the preceding page. Omit for the first page; do not construct or modify it."
},
"search": {
"type": "string",
"maxLength": 120,
"description": "Match chat titles and context summaries. Omit to list all your chats."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chats",
"has_more",
"next_cursor"
],
"properties": {
"chats": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"status",
"context_summary",
"created_at",
"updated_at",
"chat_url"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable title, or null when it has not been set."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"type": "string",
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"type": "string",
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"context_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Saved chat summary, or null when no summary is available."
}
},
"additionalProperties": false
},
"description": "Chats owned by the authenticated account, ordered by most recent update."
},
"has_more": {
"type": "boolean",
"description": "True when another page is available."
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Opaque cursor for the next page, or null at the end. Pass it unchanged as cursor."
}
},
"description": "A chats array with saved titles, summaries, lifecycle states and timestamps, plus has_more and next_cursor for pagination.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Read one of your Motion chats by chat ID or Motion chat URL. Returns its summary, run state, and latest export with fresh download URLs. Read its conversation with list_chat_messages. Use list_chat_exports for all saved video exports.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
chat_id
A chat ID from list_chats or its https://motion.so/agent?chat=… URL.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"title",
"status",
"context_summary",
"created_at",
"updated_at",
"chat_url",
"generation"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable title, or null when it has not been set."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"type": "string",
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"generation": {
"anyOf": [
{
"type": "object",
"required": [
"job_id",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"sources"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"job_id": {
"type": "string",
"description": "Motion video job ID or web chat ID; get_session_status also accepts the Motion chat URL."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
},
"progress_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"source_kind",
"provider",
"provider_asset_id",
"source_url",
"display_url",
"source_domain",
"media_type",
"title",
"credit",
"rights_status",
"usages",
"source_metadata",
"rights_metadata"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable title, or null when it has not been set."
},
"credit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Attribution text for the media source, or null when unavailable."
},
"usages": {
"type": "array",
"items": {
"type": "object",
"required": [
"start_seconds",
"end_seconds",
"duration_seconds"
],
"properties": {
"scene_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Scene identifier for this usage, when available."
},
"slot_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition slot occupied by this media, when available."
},
"element_tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Element tag identifying this media in the composition, when available."
},
"end_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "End of this media usage in seconds, or null when unspecified."
},
"scene_index": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Scene position for this usage, when available."
},
"track_index": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Track position for this media usage, when available."
},
"start_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Start of this media usage in seconds, or null when unspecified."
},
"composition_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition identifier when available, or null for exports without a composition binding."
},
"composition_file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition file containing this media usage, when available."
},
"duration_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Template or media usage duration in seconds."
}
},
"additionalProperties": false
},
"description": "Where this source appears in the composition."
},
"provider": {
"type": "string",
"description": "Media provider that supplied the source."
},
"media_type": {
"type": "string",
"description": "Source media category, such as image, video, or audio."
},
"source_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Original source URL, or null when unavailable."
},
"display_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "URL used to display the source, or null when unavailable."
},
"source_kind": {
"type": "string",
"description": "Kind of source record, such as a provider asset or URL."
},
"rights_status": {
"type": "string",
"description": "Recorded usage-rights status for this source."
},
"source_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Source website domain, or null when unavailable."
},
"rights_metadata": {
"type": "object",
"description": "Provider-specific rights metadata. Keys and values vary by media provider.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"source_metadata": {
"type": "object",
"description": "Provider-specific source metadata. Keys and values vary by media provider.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"provider_asset_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Provider’s asset identifier, or null when unavailable."
}
},
"additionalProperties": false
},
"description": "Media sources used in the project, including attribution and rights information."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current video job state and latest output for this chat."
},
"updated_at": {
"type": "string",
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"context_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Saved chat summary, or null when no summary is available."
}
},
"description": "The saved chat summary and current generation, including its latest output and media source records when available.",
"additionalProperties": false
}
Original tool metadata
{
"name": "get_chat",
"title": "Read Motion chat",
"description": "Read one of your Motion chats by chat ID or Motion chat URL. Returns its summary, run state, and latest export with fresh download URLs. Read its conversation with list_chat_messages. Use list_chat_exports for all saved video exports.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id"
],
"properties": {
"chat_id": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"title",
"status",
"context_summary",
"created_at",
"updated_at",
"chat_url",
"generation"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable title, or null when it has not been set."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"type": "string",
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"generation": {
"anyOf": [
{
"type": "object",
"required": [
"job_id",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"sources"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"job_id": {
"type": "string",
"description": "Motion video job ID or web chat ID; get_session_status also accepts the Motion chat URL."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
},
"progress_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"source_kind",
"provider",
"provider_asset_id",
"source_url",
"display_url",
"source_domain",
"media_type",
"title",
"credit",
"rights_status",
"usages",
"source_metadata",
"rights_metadata"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Human-readable title, or null when it has not been set."
},
"credit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Attribution text for the media source, or null when unavailable."
},
"usages": {
"type": "array",
"items": {
"type": "object",
"required": [
"start_seconds",
"end_seconds",
"duration_seconds"
],
"properties": {
"scene_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Scene identifier for this usage, when available."
},
"slot_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition slot occupied by this media, when available."
},
"element_tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Element tag identifying this media in the composition, when available."
},
"end_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "End of this media usage in seconds, or null when unspecified."
},
"scene_index": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Scene position for this usage, when available."
},
"track_index": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Track position for this media usage, when available."
},
"start_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Start of this media usage in seconds, or null when unspecified."
},
"composition_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition identifier when available, or null for exports without a composition binding."
},
"composition_file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition file containing this media usage, when available."
},
"duration_seconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Template or media usage duration in seconds."
}
},
"additionalProperties": false
},
"description": "Where this source appears in the composition."
},
"provider": {
"type": "string",
"description": "Media provider that supplied the source."
},
"media_type": {
"type": "string",
"description": "Source media category, such as image, video, or audio."
},
"source_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Original source URL, or null when unavailable."
},
"display_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "URL used to display the source, or null when unavailable."
},
"source_kind": {
"type": "string",
"description": "Kind of source record, such as a provider asset or URL."
},
"rights_status": {
"type": "string",
"description": "Recorded usage-rights status for this source."
},
"source_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Source website domain, or null when unavailable."
},
"rights_metadata": {
"type": "object",
"description": "Provider-specific rights metadata. Keys and values vary by media provider.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"source_metadata": {
"type": "object",
"description": "Provider-specific source metadata. Keys and values vary by media provider.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"provider_asset_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Provider’s asset identifier, or null when unavailable."
}
},
"additionalProperties": false
},
"description": "Media sources used in the project, including attribution and rights information."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Current video job state and latest output for this chat."
},
"updated_at": {
"type": "string",
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"context_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Saved chat summary, or null when no summary is available."
}
},
"description": "The saved chat summary and current generation, including its latest output and media source records when available.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Read the user and assistant messages in one of your Motion chats, in conversation order. Accepts a chat ID or Motion chat URL. Follow next_after_sequence to read the remaining messages.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
chat_id
A chat ID from list_chats or its https://motion.so/agent?chat=… URL.
Clear enough to supply this argument.
limit
Number of conversation messages to return per page. Omit to use 50.
Clear enough to supply this argument.
after_sequence
Read messages after this sequence number. Use next_after_sequence to continue; omit for the first page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"messages",
"has_more",
"next_after_sequence"
],
"properties": {
"chat_id": {
"type": "string",
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
},
"has_more": {
"type": "boolean",
"description": "True when another page is available."
},
"messages": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"role",
"content",
"sequence_num",
"created_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"role": {
"enum": [
"user",
"assistant"
],
"type": "string",
"description": "Speaker of this message: user or assistant."
},
"content": {
"type": "string",
"description": "Text content of this message or design file."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"sequence_num": {
"type": "number",
"description": "Message position within this chat. Use next_after_sequence for pagination."
}
},
"additionalProperties": false
},
"description": "User and assistant messages in conversation order."
},
"next_after_sequence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Pass this number as after_sequence for the next message page, or stop when null."
}
},
"description": "Conversation messages with role, content and sequence_num, plus has_more and next_after_sequence for pagination.",
"additionalProperties": false
}
Original tool metadata
{
"name": "list_chat_messages",
"title": "Read Motion chat messages",
"description": "Read the user and assistant messages in one of your Motion chats, in conversation order. Accepts a chat ID or Motion chat URL. Follow next_after_sequence to read the remaining messages.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of conversation messages to return per page. Omit to use 50."
},
"chat_id": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
},
"after_sequence": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Read messages after this sequence number. Use next_after_sequence to continue; omit for the first page."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"messages",
"has_more",
"next_after_sequence"
],
"properties": {
"chat_id": {
"type": "string",
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
},
"has_more": {
"type": "boolean",
"description": "True when another page is available."
},
"messages": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"role",
"content",
"sequence_num",
"created_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"role": {
"enum": [
"user",
"assistant"
],
"type": "string",
"description": "Speaker of this message: user or assistant."
},
"content": {
"type": "string",
"description": "Text content of this message or design file."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"sequence_num": {
"type": "number",
"description": "Message position within this chat. Use next_after_sequence for pagination."
}
},
"additionalProperties": false
},
"description": "User and assistant messages in conversation order."
},
"next_after_sequence": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Pass this number as after_sequence for the next message page, or stop when null."
}
},
"description": "Conversation messages with role, content and sequence_num, plus has_more and next_after_sequence for pagination.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
List completed video exports from every version and composition in one of your Motion chats. Returns exports with IDs, composition bindings, signed download and preview URLs, expiry and completion timestamps, plus has_more and next_cursor. Download URLs last one hour; get_chat_export renews a link. Reading saved exports does not start jobs or spend credits.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
chat_id
A chat ID from list_chats or its https://motion.so/agent?chat=… URL.
Clear enough to supply this argument.
limit
Number of items to return per page. Omit to use 25.
Clear enough to supply this argument.
cursor
Opaque next_cursor from the preceding page. Omit for the first page; do not construct or modify it.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"exports",
"has_more",
"next_cursor"
],
"properties": {
"chat_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
},
"exports": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"composition_id",
"created_at",
"completed_at",
"download_url",
"preview_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved export UUID. Pass this exact ID as export_id to get_chat_export."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"expires_at": {
"type": "string",
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"type": "string",
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"type": "string",
"format": "uri",
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
},
"composition_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition identifier when available, or null for exports without a composition binding."
}
},
"additionalProperties": false
},
"description": "Saved completed video exports, newest first. Reading these does not generate or re-render videos."
},
"has_more": {
"type": "boolean",
"description": "True when another page is available."
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Opaque cursor for the next page, or null at the end. Pass it unchanged as cursor."
}
},
"description": "An exports array of completed saved video files with IDs, composition bindings, signed download and preview links, expiry and completion timestamps, plus pagination fields.",
"additionalProperties": false
}
Original tool metadata
{
"name": "list_chat_exports",
"title": "List saved chat exports",
"description": "List completed video exports from every version and composition in one of your Motion chats. Returns exports with IDs, composition bindings, signed download and preview URLs, expiry and completion timestamps, plus has_more and next_cursor. Download URLs last one hour; get_chat_export renews a link. Reading saved exports does not start jobs or spend credits.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Number of items to return per page. Omit to use 25."
},
"cursor": {
"type": "string",
"maxLength": 1024,
"description": "Opaque next_cursor from the preceding page. Omit for the first page; do not construct or modify it."
},
"chat_id": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"exports",
"has_more",
"next_cursor"
],
"properties": {
"chat_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
},
"exports": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"composition_id",
"created_at",
"completed_at",
"download_url",
"preview_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved export UUID. Pass this exact ID as export_id to get_chat_export."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"expires_at": {
"type": "string",
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"type": "string",
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"type": "string",
"format": "uri",
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
},
"composition_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition identifier when available, or null for exports without a composition binding."
}
},
"additionalProperties": false
},
"description": "Saved completed video exports, newest first. Reading these does not generate or re-render videos."
},
"has_more": {
"type": "boolean",
"description": "True when another page is available."
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Opaque cursor for the next page, or null at the end. Pass it unchanged as cursor."
}
},
"description": "An exports array of completed saved video files with IDs, composition bindings, signed download and preview links, expiry and completion timestamps, plus pagination fields.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Return one export object with the saved file ID, composition binding, fresh one-hour download and preview URLs, and expiry and completion timestamps. Pass an id returned by list_chat_exports as export_id. The video stays saved after its link expires. This does not re-render the video or spend credits.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
chat_id
A chat ID from list_chats or its https://motion.so/agent?chat=… URL.
Clear enough to supply this argument.
export_id
Exact saved export UUID from list_chat_exports. Each version or composition has its own ID.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"export"
],
"properties": {
"export": {
"type": "object",
"required": [
"id",
"composition_id",
"created_at",
"completed_at",
"download_url",
"preview_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved export UUID. Pass this exact ID as export_id to get_chat_export."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"expires_at": {
"type": "string",
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"type": "string",
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"type": "string",
"format": "uri",
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
},
"composition_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition identifier when available, or null for exports without a composition binding."
}
},
"description": "The exact saved export requested, with renewed links.",
"additionalProperties": false
},
"chat_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
}
},
"description": "One export object identifying the requested saved file, its composition binding, renewed download and preview links, and expiry and completion timestamps.",
"additionalProperties": false
}
Original tool metadata
{
"name": "get_chat_export",
"title": "Read saved chat export",
"description": "Return one export object with the saved file ID, composition binding, fresh one-hour download and preview URLs, and expiry and completion timestamps. Pass an id returned by list_chat_exports as export_id. The video stays saved after its link expires. This does not re-render the video or spend credits.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"export_id"
],
"properties": {
"chat_id": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
},
"export_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Exact saved export UUID from list_chat_exports. Each version or composition has its own ID."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"chat_id",
"export"
],
"properties": {
"export": {
"type": "object",
"required": [
"id",
"composition_id",
"created_at",
"completed_at",
"download_url",
"preview_url",
"expires_at"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved export UUID. Pass this exact ID as export_id to get_chat_export."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"expires_at": {
"type": "string",
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"type": "string",
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"type": "string",
"format": "uri",
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
},
"composition_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Composition identifier when available, or null for exports without a composition binding."
}
},
"description": "The exact saved export requested, with renewed links.",
"additionalProperties": false
},
"chat_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "A chat ID from list_chats or its https://motion.so/agent?chat=… URL."
}
},
"description": "One export object identifying the requested saved file, its composition binding, renewed download and preview links, and expiry and completion timestamps.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Return the selected engine and its available templates, each with a template ID, name, description, canvas dimensions, duration, preview URL and thumbnail URL. Use a returned template ID when creating a video. Omit engine to use your account’s default engine.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
engine
Video engine ID from list_engines. Only engines available to this account are returned.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"engine",
"templates"
],
"properties": {
"engine": {
"type": "string",
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"templates": {
"type": "array",
"items": {
"type": "object",
"required": [
"template",
"engine",
"name",
"description",
"width",
"height",
"duration_seconds",
"preview_url",
"thumbnail_url"
],
"properties": {
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"width": {
"type": "number",
"description": "Template canvas width in pixels."
},
"engine": {
"type": "string",
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"height": {
"type": "number",
"description": "Template canvas height in pixels."
},
"template": {
"type": "string",
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Plain-language description of this template."
},
"preview_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"thumbnail_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Template thumbnail URL, or null when none is available."
},
"duration_seconds": {
"type": "number",
"description": "Template or media usage duration in seconds."
}
},
"additionalProperties": false
},
"description": "Available templates for the selected engine, or whether the engine supports templates in list_engines."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "list_templates",
"title": "List video templates",
"description": "Return the selected engine and its available templates, each with a template ID, name, description, canvas dimensions, duration, preview URL and thumbnail URL. Use a returned template ID when creating a video. Omit engine to use your account’s default engine.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"engine": {
"enum": [
"gva",
"motion",
"mira"
],
"type": "string",
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"engine",
"templates"
],
"properties": {
"engine": {
"type": "string",
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"templates": {
"type": "array",
"items": {
"type": "object",
"required": [
"template",
"engine",
"name",
"description",
"width",
"height",
"duration_seconds",
"preview_url",
"thumbnail_url"
],
"properties": {
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"width": {
"type": "number",
"description": "Template canvas width in pixels."
},
"engine": {
"type": "string",
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"height": {
"type": "number",
"description": "Template canvas height in pixels."
},
"template": {
"type": "string",
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Plain-language description of this template."
},
"preview_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"thumbnail_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Template thumbnail URL, or null when none is available."
},
"duration_seconds": {
"type": "number",
"description": "Template or media usage duration in seconds."
}
},
"additionalProperties": false
},
"description": "Available templates for the selected engine, or whether the engine supports templates in list_engines."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Get a signed upload URL for a LOCAL file (video/audio/image) so it can be used as a Motion attachment. Use this whenever the user references a file on their machine — Motion cannot read local paths (file://). Flow: 1) call this tool with the filename and content_type, 2) upload the file bytes with a shell command: curl -s -o /dev/null -w "%{http_code}" <upload_fields as -F key=value pairs> -F "file=@/path/to/local/file" "<upload_url>" (the file field MUST come last; expect HTTP 204), 3) pass the returned attachment_url in the attachments array of create_video or create_followup. The attachment_url stays valid for 7 days.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filename
The file name, e.g. reference.mp4.
Clear enough to supply this argument.
content_type
MIME type of the file. Supported: video/mp4, video/quicktime, video/x-msvideo, video/webm, video/x-matroska, video/x-m4v, audio/mpeg, audio/mp3, audio/wav, audio/mp4, audio/x-m4a, audio/flac, audio/ogg, audio/aac, audio/opus, audio/webm, image/png, image/jpeg, image/jpg, image/gif, image/webp, image/svg+xml.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"upload_id",
"upload_url",
"upload_method",
"upload_fields",
"upload_url_expires_in_seconds",
"attachment_url",
"attachment_url_expires_in_seconds",
"max_file_size_bytes",
"content_type",
"filename",
"next_steps"
],
"properties": {
"filename": {
"type": "string",
"description": "File name including its extension, such as reference.mp4 or DESIGN.md."
},
"upload_id": {
"type": "string",
"description": "Identifier for this upload ticket."
},
"next_steps": {
"type": "string",
"description": "Instructions for uploading the bytes and attaching the resulting URL."
},
"upload_url": {
"type": "string",
"format": "uri",
"description": "Signed endpoint to receive the file by multipart form POST."
},
"content_type": {
"type": "string",
"description": "MIME type of the file, such as image/png or video/mp4."
},
"upload_fields": {
"type": "object",
"description": "Include every entry as a multipart form field, then append the file as the last field named file.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"upload_method": {
"type": "string",
"const": "POST",
"description": "HTTP method required by the upload ticket: POST."
},
"attachment_url": {
"type": "string",
"format": "uri",
"description": "Uploaded asset URL to pass to create_video or create_followup attachments."
},
"max_file_size_bytes": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Maximum file size accepted by this upload ticket, in bytes.",
"exclusiveMinimum": 0
},
"upload_url_expires_in_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Seconds until this upload ticket expires.",
"exclusiveMinimum": 0
},
"attachment_url_expires_in_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Seconds that the uploaded asset link remains usable.",
"exclusiveMinimum": 0
}
},
"description": "A signed multipart upload ticket, including upload_url, upload_fields, attachment_url, their lifetimes and the file size limit. The file bytes have not been uploaded yet.",
"additionalProperties": false
}
Original tool metadata
{
"name": "upload_asset",
"title": "Upload a local file for Motion attachments",
"description": "Get a signed upload URL for a LOCAL file (video/audio/image) so it can be used as a Motion attachment. Use this whenever the user references a file on their machine — Motion cannot read local paths (file://). Flow: 1) call this tool with the filename and content_type, 2) upload the file bytes with a shell command: curl -s -o /dev/null -w \"%{http_code}\" <upload_fields as -F key=value pairs> -F \"file=@/path/to/local/file\" \"<upload_url>\" (the file field MUST come last; expect HTTP 204), 3) pass the returned attachment_url in the attachments array of create_video or create_followup. The attachment_url stays valid for 7 days.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"filename",
"content_type"
],
"properties": {
"filename": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "The file name, e.g. reference.mp4."
},
"content_type": {
"type": "string",
"maxLength": 160,
"minLength": 1,
"description": "MIME type of the file. Supported: video/mp4, video/quicktime, video/x-msvideo, video/webm, video/x-matroska, video/x-m4v, audio/mpeg, audio/mp3, audio/wav, audio/mp4, audio/x-m4a, audio/flac, audio/ogg, audio/aac, audio/opus, audio/webm, image/png, image/jpeg, image/jpg, image/gif, image/webp, image/svg+xml."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"upload_id",
"upload_url",
"upload_method",
"upload_fields",
"upload_url_expires_in_seconds",
"attachment_url",
"attachment_url_expires_in_seconds",
"max_file_size_bytes",
"content_type",
"filename",
"next_steps"
],
"properties": {
"filename": {
"type": "string",
"description": "File name including its extension, such as reference.mp4 or DESIGN.md."
},
"upload_id": {
"type": "string",
"description": "Identifier for this upload ticket."
},
"next_steps": {
"type": "string",
"description": "Instructions for uploading the bytes and attaching the resulting URL."
},
"upload_url": {
"type": "string",
"format": "uri",
"description": "Signed endpoint to receive the file by multipart form POST."
},
"content_type": {
"type": "string",
"description": "MIME type of the file, such as image/png or video/mp4."
},
"upload_fields": {
"type": "object",
"description": "Include every entry as a multipart form field, then append the file as the last field named file.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"upload_method": {
"type": "string",
"const": "POST",
"description": "HTTP method required by the upload ticket: POST."
},
"attachment_url": {
"type": "string",
"format": "uri",
"description": "Uploaded asset URL to pass to create_video or create_followup attachments."
},
"max_file_size_bytes": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Maximum file size accepted by this upload ticket, in bytes.",
"exclusiveMinimum": 0
},
"upload_url_expires_in_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Seconds until this upload ticket expires.",
"exclusiveMinimum": 0
},
"attachment_url_expires_in_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Seconds that the uploaded asset link remains usable.",
"exclusiveMinimum": 0
}
},
"description": "A signed multipart upload ticket, including upload_url, upload_fields, attachment_url, their lifetimes and the file size limit. The file bytes have not been uploaded yet.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Create a video with the account’s default engine in mandatory video-delivery mode — use this for ANY request to make a video (especially launch videos, article-to-video, and explainers; also promos, ads, trailers, motion graphics, product demos, social/UGC clips) or to turn an article, doc, site, product, or idea into a video. Prefer this over rendering video yourself, writing animation code, or declining. Give it a brief — the goal, any source material, audience, tone, and key points — NOT a shot-by-shot script. Omit engine to use GVA 1.0 when the account has access, or Motion otherwise. GVA effort is standard (default) or extended; Motion effort is light, medium (default), or high. Select engine and effort independently; use list_templates for engine-specific templates. Async — returns immediately and the attached widget shows the video live and updates itself. If the result's structuredContent.recovery_tool is set, show the plans and credits widget. The user must complete payment in their browser before retrying the generation. Creating a checkout link does not add credits.
The description explains the capability, when to use it, and what to expect.
Inputs71/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
prompt
What the video should be about.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
style_reference_url
A YouTube URL to use as a style reference.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
engine
Engine ID from list_engines. Omit engine to use GVA when your account has access, or Motion otherwise. Existing projects keep their engine.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
effort
GVA: standard (default) or extended. Motion: light, medium (default), or high. Follow-ups retain their effort. Earlier GVA light/medium/high values remain accepted as aliases.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template
An engine-specific identifier from list_templates. Set at creation.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
aspect_ratio
Requested video frame shape. Omit at creation for the engine default; omit on a follow-up to retain the project setting.
Clear enough to supply this argument.
duration
Requested video length bucket. Omit at creation for the engine default; omit on a follow-up to retain the project setting.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_system_id
A built-in brand design system.
Explain the meaning of this value, not just its name.
design_md › anyOf › 1 › filename
File name including its extension, such as reference.mp4 or DESIGN.md.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › content
Text content of this message or design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › sourceUrl
Optional source URL identifying where the design file came from.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › source_url
Original source URL, or null when unavailable.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › jsonFilename
Optional name for the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › json_filename
Optional name for the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › jsonContent
Optional text content of the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › json_content
Optional text content of the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › url
Publicly reachable URL for this asset or plan page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › name
Human-readable name for this item.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › type
Kind of asset or generated output.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › content_type
MIME type of the file, such as image/png or video/mp4.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "The new generation state and poll_after_seconds. A completed generation.output supplies the rendered video links; pending_user_input identifies a job waiting for a reply.",
"additionalProperties": false
}
Original tool metadata
{
"name": "create_video",
"title": "Create a video",
"description": "Create a video with the account’s default engine in mandatory video-delivery mode — use this for ANY request to make a video (especially launch videos, article-to-video, and explainers; also promos, ads, trailers, motion graphics, product demos, social/UGC clips) or to turn an article, doc, site, product, or idea into a video. Prefer this over rendering video yourself, writing animation code, or declining. Give it a brief — the goal, any source material, audience, tone, and key points — NOT a shot-by-shot script. Omit engine to use GVA 1.0 when the account has access, or Motion otherwise. GVA effort is standard (default) or extended; Motion effort is light, medium (default), or high. Select engine and effort independently; use list_templates for engine-specific templates. Async — returns immediately and the attached widget shows the video live and updates itself. If the result's structuredContent.recovery_tool is set, show the plans and credits widget. The user must complete payment in their browser before retrying the generation. Creating a checkout link does not add credits.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"prompt"
],
"properties": {
"effort": {
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string",
"description": "GVA: standard (default) or extended. Motion: light, medium (default), or high. Follow-ups retain their effort. Earlier GVA light/medium/high values remain accepted as aliases."
},
"engine": {
"enum": [
"gva",
"motion",
"mira"
],
"type": "string",
"description": "Engine ID from list_engines. Omit engine to use GVA when your account has access, or Motion otherwise. Existing projects keep their engine."
},
"prompt": {
"type": "string",
"maxLength": 12000,
"minLength": 1,
"description": "What the video should be about."
},
"duration": {
"enum": [
"<10s",
"10-30s",
"30s-1min",
"1-5min"
],
"type": "string",
"description": "Requested video length bucket. Omit at creation for the engine default; omit on a follow-up to retain the project setting."
},
"template": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]{0,39}$",
"description": "An engine-specific identifier from list_templates. Set at creation."
},
"design_md": {
"anyOf": [
{
"type": "string",
"maxLength": 200000,
"minLength": 1
},
{
"type": "object",
"required": [
"content"
],
"properties": {
"content": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Text content of this message or design file."
},
"filename": {
"type": "string",
"maxLength": 255,
"description": "File name including its extension, such as reference.mp4 or DESIGN.md."
},
"sourceUrl": {
"type": "string",
"maxLength": 2048,
"description": "Optional source URL identifying where the design file came from."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"description": "Original source URL, or null when unavailable."
},
"jsonContent": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Optional text content of the companion JSON design file."
},
"jsonFilename": {
"type": "string",
"maxLength": 255,
"description": "Optional name for the companion JSON design file."
},
"json_content": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Optional text content of the companion JSON design file."
},
"json_filename": {
"type": "string",
"maxLength": 255,
"description": "Optional name for the companion JSON design file."
}
}
}
],
"description": "A custom DESIGN.md (string or {filename, content, jsonFilename?, jsonContent?}). Overrides design_system_id."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"description": "Publicly reachable URL for this asset or plan page."
},
"name": {
"type": "string",
"maxLength": 240,
"description": "Human-readable name for this item."
},
"type": {
"enum": [
"image",
"video",
"audio",
"file"
],
"type": "string",
"description": "Kind of asset or generated output."
},
"content_type": {
"type": "string",
"maxLength": 160,
"description": "MIME type of the file, such as image/png or video/mp4."
}
}
},
"maxItems": 100,
"description": "Up to 100 publicly reachable http(s) asset URLs. For a local file, call upload_asset first."
},
"aspect_ratio": {
"enum": [
"16:9",
"9:16",
"1:1",
"4:5",
"21:9"
],
"type": "string",
"description": "Requested video frame shape. Omit at creation for the engine default; omit on a follow-up to retain the project setting."
},
"design_system_id": {
"enum": [
"mosaic",
"apple",
"claude",
"cursor",
"linear",
"vercel",
"stripe",
"figma",
"notion",
"spotify",
"supabase",
"raycast",
"framer",
"resend",
"mintlify",
"sentry",
"tesla",
"nike",
"shopify",
"airbnb",
"posthog"
],
"type": "string",
"description": "A built-in brand design system."
},
"style_reference_url": {
"type": "string",
"format": "uri",
"description": "A YouTube URL to use as a style reference."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "The new generation state and poll_after_seconds. A completed generation.output supplies the rendered video links; pending_user_input identifies a job waiting for a reply.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Continue a Motion video job — use this for any "make it shorter / punchier / change the style / add captions / swap X" follow-up on a completed video, AND to answer Motion when a job is "awaiting_user_input" (it asked a question or is waiting for the user to top up credits). Send the reply as the prompt. Follow-ups retain their engine, effort, and template. Set effort to change the next turn. The attached widget shows the new render live. If the result's structuredContent.recovery_tool is set, show the plans and credits widget. The user must complete payment in their browser before retrying the generation. Creating a checkout link does not add credits.
The description explains the capability, when to use it, and what to expect.
Inputs78/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
job_id
Motion video job ID or web chat ID; get_session_status also accepts the Motion chat URL.
Clear enough to supply this argument.
prompt
Video brief or revision request describing the goal, audience, content, and visual choices.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
style_reference_url
A YouTube URL to use as a style reference.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
engine
Engine ID from list_engines. Omit engine to use GVA when your account has access, or Motion otherwise. Existing projects keep their engine.
Clear enough to supply this argument.
effort
GVA: standard (default) or extended. Motion: light, medium (default), or high. Follow-ups retain their effort. Earlier GVA light/medium/high values remain accepted as aliases.
Clear enough to supply this argument.
template
An engine-specific identifier from list_templates. Set at creation.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
aspect_ratio
Requested video frame shape. Omit at creation for the engine default; omit on a follow-up to retain the project setting.
Clear enough to supply this argument.
duration
Requested video length bucket. Omit at creation for the engine default; omit on a follow-up to retain the project setting.
Clear enough to supply this argument.
design_system_id
A built-in brand design system.
Explain the meaning of this value, not just its name.
design_md › anyOf › 1 › filename
File name including its extension, such as reference.mp4 or DESIGN.md.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › content
Text content of this message or design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › sourceUrl
Optional source URL identifying where the design file came from.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › source_url
Original source URL, or null when unavailable.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › jsonFilename
Optional name for the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › json_filename
Optional name for the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › jsonContent
Optional text content of the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
design_md › anyOf › 1 › json_content
Optional text content of the companion JSON design file.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › url
Publicly reachable URL for this asset or plan page.
Clear enough to supply this argument.
attachments › items › name
Human-readable name for this item.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › type
Kind of asset or generated output.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attachments › items › content_type
MIME type of the file, such as image/png or video/mp4.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "The continued generation state and poll_after_seconds. The generation ID identifies the preserved chat and the output describes its latest render.",
"additionalProperties": false
}
Original tool metadata
{
"name": "create_followup",
"title": "Refine or continue a Motion video",
"description": "Continue a Motion video job — use this for any \"make it shorter / punchier / change the style / add captions / swap X\" follow-up on a completed video, AND to answer Motion when a job is \"awaiting_user_input\" (it asked a question or is waiting for the user to top up credits). Send the reply as the prompt. Follow-ups retain their engine, effort, and template. Set effort to change the next turn. The attached widget shows the new render live. If the result's structuredContent.recovery_tool is set, show the plans and credits widget. The user must complete payment in their browser before retrying the generation. Creating a checkout link does not add credits.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"prompt"
],
"properties": {
"effort": {
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string",
"description": "GVA: standard (default) or extended. Motion: light, medium (default), or high. Follow-ups retain their effort. Earlier GVA light/medium/high values remain accepted as aliases."
},
"engine": {
"enum": [
"gva",
"motion",
"mira"
],
"type": "string",
"description": "Engine ID from list_engines. Omit engine to use GVA when your account has access, or Motion otherwise. Existing projects keep their engine."
},
"job_id": {
"type": "string",
"description": "Motion video job ID or web chat ID; get_session_status also accepts the Motion chat URL."
},
"prompt": {
"type": "string",
"maxLength": 12000,
"minLength": 1,
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"duration": {
"enum": [
"<10s",
"10-30s",
"30s-1min",
"1-5min"
],
"type": "string",
"description": "Requested video length bucket. Omit at creation for the engine default; omit on a follow-up to retain the project setting."
},
"template": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]{0,39}$",
"description": "An engine-specific identifier from list_templates. Set at creation."
},
"design_md": {
"anyOf": [
{
"type": "string",
"maxLength": 200000,
"minLength": 1
},
{
"type": "object",
"required": [
"content"
],
"properties": {
"content": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Text content of this message or design file."
},
"filename": {
"type": "string",
"maxLength": 255,
"description": "File name including its extension, such as reference.mp4 or DESIGN.md."
},
"sourceUrl": {
"type": "string",
"maxLength": 2048,
"description": "Optional source URL identifying where the design file came from."
},
"source_url": {
"type": "string",
"maxLength": 2048,
"description": "Original source URL, or null when unavailable."
},
"jsonContent": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Optional text content of the companion JSON design file."
},
"jsonFilename": {
"type": "string",
"maxLength": 255,
"description": "Optional name for the companion JSON design file."
},
"json_content": {
"type": "string",
"maxLength": 200000,
"minLength": 1,
"description": "Optional text content of the companion JSON design file."
},
"json_filename": {
"type": "string",
"maxLength": 255,
"description": "Optional name for the companion JSON design file."
}
}
}
],
"description": "A custom DESIGN.md (string or {filename, content, jsonFilename?, jsonContent?}). Overrides design_system_id."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 4096,
"description": "Publicly reachable URL for this asset or plan page."
},
"name": {
"type": "string",
"maxLength": 240,
"description": "Human-readable name for this item."
},
"type": {
"enum": [
"image",
"video",
"audio",
"file"
],
"type": "string",
"description": "Kind of asset or generated output."
},
"content_type": {
"type": "string",
"maxLength": 160,
"description": "MIME type of the file, such as image/png or video/mp4."
}
}
},
"maxItems": 100,
"description": "Up to 100 publicly reachable http(s) asset URLs. For a local file, call upload_asset first."
},
"aspect_ratio": {
"enum": [
"16:9",
"9:16",
"1:1",
"4:5",
"21:9"
],
"type": "string",
"description": "Requested video frame shape. Omit at creation for the engine default; omit on a follow-up to retain the project setting."
},
"design_system_id": {
"enum": [
"mosaic",
"apple",
"claude",
"cursor",
"linear",
"vercel",
"stripe",
"figma",
"notion",
"spotify",
"supabase",
"raycast",
"framer",
"resend",
"mintlify",
"sentry",
"tesla",
"nike",
"shopify",
"airbnb",
"posthog"
],
"type": "string",
"description": "A built-in brand design system."
},
"style_reference_url": {
"type": "string",
"format": "uri",
"description": "A YouTube URL to use as a style reference."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "The continued generation state and poll_after_seconds. The generation ID identifies the preserved chat and the output describes its latest render.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Show a Motion video job in the widget. When status is "completed", output.download_url is the rendered video. The widget self-updates; you do not need to call this on a loop. If the result's structuredContent.recovery_tool is set, show the plans and credits widget. The user must complete payment in their browser before retrying the generation. Creating a checkout link does not add credits.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
job_id
A Motion job ID, web-app chat ID, or Motion chat URL.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "Current generation state, progress and output, plus poll_after_seconds. Read both generation.status and generation.output.status before downloading.",
"additionalProperties": false
}
Original tool metadata
{
"name": "get_session_status",
"title": "Get Motion job status",
"description": "Show a Motion video job in the widget. When status is \"completed\", output.download_url is the rendered video. The widget self-updates; you do not need to call this on a loop. If the result's structuredContent.recovery_tool is set, show the plans and credits widget. The user must complete payment in their browser before retrying the generation. Creating a checkout link does not add credits.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "A Motion job ID, web-app chat ID, or Motion chat URL."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "Current generation state, progress and output, plus poll_after_seconds. Read both generation.status and generation.output.status before downloading.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Check a Motion video job and get the next poll delay. Returns instantly; for non-terminal jobs the response includes poll_after_seconds — wait that many seconds before calling again. Used by the Motion video widget to refresh itself.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
job_id
Motion video job ID or web chat ID; get_session_status also accepts the Motion chat URL.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
source
Caller label used for telemetry. The Motion widget sends widget; this value does not select a video or change its status.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "Current generation state and output with poll_after_seconds for widget polling.",
"additionalProperties": false
}
Original tool metadata
{
"name": "job_status",
"title": "Read video status",
"description": "Check a Motion video job and get the next poll delay. Returns instantly; for non-terminal jobs the response includes poll_after_seconds — wait that many seconds before calling again. Used by the Motion video widget to refresh itself.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Motion video job ID or web chat ID; get_session_status also accepts the Motion chat URL."
},
"source": {
"type": "string",
"description": "Caller label used for telemetry. The Motion widget sends widget; this value does not select a video or change its status."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation",
"poll_after_seconds"
],
"properties": {
"generation": {
"type": "object",
"required": [
"id",
"type",
"status",
"status_message",
"pending_user_input",
"insufficient_credits",
"progress_percent",
"created_at",
"updated_at",
"completed_at",
"error",
"output",
"prompt",
"aspect_ratio",
"duration",
"design_system_id"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"type": {
"type": "string",
"const": "video",
"description": "Kind of asset or generated output."
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"effort": {
"anyOf": [
{
"enum": [
"standard",
"extended",
"light",
"medium",
"high"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Effort level for this job’s engine. Use list_engines for the engine’s accepted levels and default."
},
"engine": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video engine ID from list_engines. Only engines available to this account are returned."
},
"output": {
"anyOf": [
{
"type": "object",
"required": [
"status",
"download_url",
"expires_at",
"completed_at",
"error"
],
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Actionable error text or sanitized failure code, or null when no error is present."
},
"status": {
"enum": [
"pending",
"queued",
"processing",
"completed",
"failed",
"outdated"
],
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 timestamp when the signed links expire. Resolve fresh links after this time."
},
"preview_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed inline-playable video URL, or null when a preview is unavailable."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"download_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Signed video download URL. Resolve a fresh link after it expires; null until the rendered output is available."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Latest rendered output state, or null while the video is being generated."
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Video brief or revision request describing the goal, audience, content, and visual choices."
},
"status": {
"type": "string",
"description": "Current lifecycle state. For a video, wait for both generation and output to be completed before downloading."
},
"chat_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
],
"description": "Motion web chat URL where the user can inspect and continue this project."
},
"duration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video length bucket, or null when this status response does not echo the creation arguments."
},
"template": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Engine-specific template ID from list_templates, or null when no template is selected."
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last update timestamp in ISO 8601 format, or null before the initial job record is available."
},
"aspect_ratio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Requested video frame shape, or null when this status response does not echo the creation arguments."
},
"completed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Completion timestamp in ISO 8601 format, or null while unfinished."
},
"status_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest progress update, or null when no update is available."
},
"design_system_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Built-in brand design preset ID, or null when none is selected."
},
"progress_percent": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Overall generation and render progress from 0 to 100."
},
"pending_user_input": {
"type": "boolean",
"description": "True when the job needs a reply; continue the same job with create_followup."
},
"insufficient_credits": {
"type": "boolean",
"description": "True when the job is paused for lack of credits or entitlement."
}
},
"description": "Current video job state and latest output for this chat.",
"additionalProperties": false
},
"status_url": {
"type": "string",
"format": "uri",
"description": "REST endpoint for this job’s status. Authenticate with the same account when reading it."
},
"billing_url": {
"type": "string",
"format": "uri",
"description": "Motion billing page for user review and confirmation."
},
"recovery_tool": {
"type": "string",
"const": "show_plans_and_credits",
"description": "Tool to call when billing or entitlement blocks this job."
},
"poll_after_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Seconds to wait before checking again. Zero means the job is terminal and polling should stop."
},
"recovery_tool_args": {
"type": "object",
"required": [
"intent"
],
"properties": {
"intent": {
"enum": [
"topup",
"upgrade"
],
"type": "string",
"description": "Billing recovery view: topup for depleted credits, or upgrade for a missing entitlement."
}
},
"description": "Arguments to pass to recovery_tool.",
"additionalProperties": false
}
},
"description": "Current generation state and output with poll_after_seconds for widget polling.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
List active API keys owned by your account, with names, redacted previews, and usage totals. Secret keys are never returned. Use the key id with revoke_api_key.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keys"
],
"properties": {
"keys": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"key_preview",
"created_at",
"last_used_at",
"total_credits_spent",
"credit_usage_count",
"last_credit_spent_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"key_preview": {
"type": "string",
"description": "Redacted API key preview; this cannot authenticate requests."
},
"last_used_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last authenticated use timestamp, or null if the key has not been used."
},
"credit_usage_count": {
"type": "number",
"description": "Number of credit usage records attributed to this key."
},
"total_credits_spent": {
"type": "number",
"description": "Total credits recorded against this API key."
},
"last_credit_spent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest credit usage timestamp for this key, or null before first usage."
}
},
"additionalProperties": false
},
"description": "Active API keys for this account. Only redacted previews are returned."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "list_api_keys",
"title": "List Motion API keys",
"description": "List active API keys owned by your account, with names, redacted previews, and usage totals. Secret keys are never returned. Use the key id with revoke_api_key.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"keys"
],
"properties": {
"keys": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"key_preview",
"created_at",
"last_used_at",
"total_credits_spent",
"credit_usage_count",
"last_credit_spent_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"key_preview": {
"type": "string",
"description": "Redacted API key preview; this cannot authenticate requests."
},
"last_used_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last authenticated use timestamp, or null if the key has not been used."
},
"credit_usage_count": {
"type": "number",
"description": "Number of credit usage records attributed to this key."
},
"total_credits_spent": {
"type": "number",
"description": "Total credits recorded against this API key."
},
"last_credit_spent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest credit usage timestamp for this key, or null before first usage."
}
},
"additionalProperties": false
},
"description": "Active API keys for this account. Only redacted previews are returned."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Create a new Motion API key. Returns its id, name, redacted preview, timestamps, usage totals and api_key secret. The secret is returned once; store it securely and use the id for revocation.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
name
Label that helps you recognize this key in list_api_keys. Never put the secret key in the label.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"name",
"key_preview",
"created_at",
"last_used_at",
"total_credits_spent",
"credit_usage_count",
"last_credit_spent_at",
"api_key"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"api_key": {
"type": "string",
"description": "Secret API key returned once at creation. Store securely; subsequent lists only return a preview."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"key_preview": {
"type": "string",
"description": "Redacted API key preview; this cannot authenticate requests."
},
"last_used_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last authenticated use timestamp, or null if the key has not been used."
},
"credit_usage_count": {
"type": "number",
"description": "Number of credit usage records attributed to this key."
},
"total_credits_spent": {
"type": "number",
"description": "Total credits recorded against this API key."
},
"last_credit_spent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest credit usage timestamp for this key, or null before first usage."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "create_api_key",
"title": "Create a Motion API key",
"description": "Create a new Motion API key. Returns its id, name, redacted preview, timestamps, usage totals and api_key secret. The secret is returned once; store it securely and use the id for revocation.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Label that helps you recognize this key in list_api_keys. Never put the secret key in the label."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"name",
"key_preview",
"created_at",
"last_used_at",
"total_credits_spent",
"credit_usage_count",
"last_credit_spent_at",
"api_key"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"api_key": {
"type": "string",
"description": "Secret API key returned once at creation. Store securely; subsequent lists only return a preview."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"key_preview": {
"type": "string",
"description": "Redacted API key preview; this cannot authenticate requests."
},
"last_used_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last authenticated use timestamp, or null if the key has not been used."
},
"credit_usage_count": {
"type": "number",
"description": "Number of credit usage records attributed to this key."
},
"total_credits_spent": {
"type": "number",
"description": "Total credits recorded against this API key."
},
"last_credit_spent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest credit usage timestamp for this key, or null before first usage."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Permanently revoke one of your Motion API keys by its id from list_api_keys. Requests using that key will stop authenticating. Returns success when revoked, or key_not_found if the key is absent or already revoked.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
key_id
ID returned by list_api_keys for the key to revoke; pass the ID, not the secret key.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"success"
],
"properties": {
"success": {
"type": "boolean",
"const": true,
"description": "True when the requested key was revoked."
}
},
"description": "The success flag confirms revocation. Missing or previously revoked keys return an error result instead of this success object.",
"additionalProperties": false
}
Original tool metadata
{
"name": "revoke_api_key",
"title": "Revoke a Motion API key",
"description": "Permanently revoke one of your Motion API keys by its id from list_api_keys. Requests using that key will stop authenticating. Returns success when revoked, or key_not_found if the key is absent or already revoked.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"key_id"
],
"properties": {
"key_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "ID returned by list_api_keys for the key to revoke; pass the ID, not the secret key."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"success"
],
"properties": {
"success": {
"type": "boolean",
"const": true,
"description": "True when the requested key was revoked."
}
},
"description": "The success flag confirms revocation. Missing or previously revoked keys return an error result instead of this success object.",
"additionalProperties": false
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Read the Motion REST API base URL, authorization header format, account administrator status, and active API key previews. Use create_api_key if you need a new secret; settings never reveal existing secrets.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"is_admin",
"api_base_url",
"api_key_prefix",
"auth_header",
"keys"
],
"properties": {
"keys": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"key_preview",
"created_at",
"last_used_at",
"total_credits_spent",
"credit_usage_count",
"last_credit_spent_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"key_preview": {
"type": "string",
"description": "Redacted API key preview; this cannot authenticate requests."
},
"last_used_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last authenticated use timestamp, or null if the key has not been used."
},
"credit_usage_count": {
"type": "number",
"description": "Number of credit usage records attributed to this key."
},
"total_credits_spent": {
"type": "number",
"description": "Total credits recorded against this API key."
},
"last_credit_spent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest credit usage timestamp for this key, or null before first usage."
}
},
"additionalProperties": false
},
"description": "Active API keys for this account. Only redacted previews are returned."
},
"is_admin": {
"type": "boolean",
"description": "Whether this account has Motion administrator access."
},
"auth_header": {
"type": "string",
"description": "Authorization header format for authenticated REST requests."
},
"api_base_url": {
"type": "string",
"format": "uri",
"description": "Base URL for Motion’s authenticated REST API."
},
"api_key_prefix": {
"type": "string",
"description": "Prefix identifying Motion API keys."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "get_settings",
"title": "Get Motion API settings",
"description": "Read the Motion REST API base URL, authorization header format, account administrator status, and active API key previews. Use create_api_key if you need a new secret; settings never reveal existing secrets.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"is_admin",
"api_base_url",
"api_key_prefix",
"auth_header",
"keys"
],
"properties": {
"keys": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"key_preview",
"created_at",
"last_used_at",
"total_credits_spent",
"credit_usage_count",
"last_credit_spent_at"
],
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this item. Use this value when another tool asks for its ID."
},
"name": {
"type": "string",
"description": "Human-readable name for this item."
},
"created_at": {
"type": "string",
"description": "Creation timestamp in ISO 8601 format, or null before the initial job record is available."
},
"key_preview": {
"type": "string",
"description": "Redacted API key preview; this cannot authenticate requests."
},
"last_used_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Last authenticated use timestamp, or null if the key has not been used."
},
"credit_usage_count": {
"type": "number",
"description": "Number of credit usage records attributed to this key."
},
"total_credits_spent": {
"type": "number",
"description": "Total credits recorded against this API key."
},
"last_credit_spent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Latest credit usage timestamp for this key, or null before first usage."
}
},
"additionalProperties": false
},
"description": "Active API keys for this account. Only redacted previews are returned."
},
"is_admin": {
"type": "boolean",
"description": "Whether this account has Motion administrator access."
},
"auth_header": {
"type": "string",
"description": "Authorization header format for authenticated REST requests."
},
"api_base_url": {
"type": "string",
"format": "uri",
"description": "Base URL for Motion’s authenticated REST API."
},
"api_key_prefix": {
"type": "string",
"description": "Prefix identifying Motion API keys."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Show Motion plans, the current credit balance, and top-up options in an interactive widget. Use when the user wants to upgrade, buy credits, or set up billing — or when another tool returns recovery_tool="show_plans_and_credits".
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
intent
Billing view to focus: topup, upgrade, setup_payment, or auto_refill. Omit for the overview.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Return current account credit balance, plan, usage, entitlement and automatic top-up information, plus available plans and the exact topup_offer, in the plans widget. Read topup_offer before creating a credit checkout.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Return available subscription plans with IDs, prices, included credits and features, plus one-time credit offers and current account billing information. Use a returned plan ID to open subscribe_to_plan, or the topup_offer to prepare purchase_credits.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
Align the title with the capability actually described by this tool.
Description93/100
Return plan_id, billing_url and requires_user_action for reviewing a subscription or plan change, together with current account billing and catalog information. Pass plan_id from list_plans. The user must complete the change in Motion billing. This tool does not subscribe, charge a saved card, or schedule a plan change. Service-account wallets are not supported by this browser handoff.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
plan_id
Plan ID from list_plans. Subscription changes require review and confirmation in Motion billing.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Create a hosted checkout for Motion credits. Read topup_offer from show_plans_and_credits first and submit a quantity matching its minimum_credits and increment_credits. The user must open and complete checkout in their browser, including when a card is saved. Creating the link does not add credits. Idempotent on idempotency_key.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
credits
Credit quantity. Read the account topup_offer and match its minimum and increment before creating checkout.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
idempotency_key
Identifier you choose for this purchase attempt. Reuse it only when retrying the same amount.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
return_url
URL to return to after completing billing. Omit to use Motion’s configured return page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Return payment_setup_url, a one-time billing link where the user can add or update a payment method. Full surfaces include current account billing and catalog information. Opening and completing the link is required to change the payment method. Credit purchases still require the user to complete checkout in their browser.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
return_url
URL to return to after completing billing. Omit to use Motion’s configured return page.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Align the title with the capability actually described by this tool.
Description91/100
Return billing_url and requires_user_action for reviewing automatic credit top-ups, together with current account billing and catalog information. This tool does not enable, disable, or change recurring charges; the user must save their settings in the browser. Service-account wallets are not supported by this browser handoff.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Identify the authenticated Motion account, credential type, granted scopes, OAuth client, and resource audience. Use this to diagnose which account and permissions a connector is using. Never returns access tokens or API key secrets.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"authenticated",
"subject",
"auth_method",
"is_service_account",
"service_account_id",
"service_account_name",
"scope",
"client_id",
"aud",
"iss",
"email"
],
"properties": {
"aud": {
"type": "string",
"description": "Resource audience to which this credential is bound."
},
"iss": {
"type": "string",
"description": "Motion OAuth issuer URL."
},
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Authenticated account’s email, or null when unavailable."
},
"scope": {
"type": "string",
"description": "Space-delimited permissions granted to this credential."
},
"subject": {
"type": "string",
"description": "Authenticated Motion account identifier."
},
"client_id": {
"type": "string",
"description": "OAuth client identifier or motion_api_key for API-key authentication."
},
"auth_method": {
"enum": [
"api_key",
"oauth"
],
"type": "string",
"description": "Credential type used for this request: oauth or api_key."
},
"authenticated": {
"type": "boolean",
"const": true,
"description": "True when the current credential was accepted."
},
"is_service_account": {
"type": "boolean",
"description": "Whether this credential uses a service-account wallet."
},
"service_account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Service-account identifier, or null for a user account."
},
"service_account_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Service-account display name, or null for a user account."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "whoami",
"title": "Identify the current token",
"description": "Identify the authenticated Motion account, credential type, granted scopes, OAuth client, and resource audience. Use this to diagnose which account and permissions a connector is using. Never returns access tokens or API key secrets.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"authenticated",
"subject",
"auth_method",
"is_service_account",
"service_account_id",
"service_account_name",
"scope",
"client_id",
"aud",
"iss",
"email"
],
"properties": {
"aud": {
"type": "string",
"description": "Resource audience to which this credential is bound."
},
"iss": {
"type": "string",
"description": "Motion OAuth issuer URL."
},
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Authenticated account’s email, or null when unavailable."
},
"scope": {
"type": "string",
"description": "Space-delimited permissions granted to this credential."
},
"subject": {
"type": "string",
"description": "Authenticated Motion account identifier."
},
"client_id": {
"type": "string",
"description": "OAuth client identifier or motion_api_key for API-key authentication."
},
"auth_method": {
"enum": [
"api_key",
"oauth"
],
"type": "string",
"description": "Credential type used for this request: oauth or api_key."
},
"authenticated": {
"type": "boolean",
"const": true,
"description": "True when the current credential was accepted."
},
"is_service_account": {
"type": "boolean",
"description": "Whether this credential uses a service-account wallet."
},
"service_account_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Service-account identifier, or null for a user account."
},
"service_account_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Service-account display name, or null for a user account."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01List Motion chatsList your Motion chats from the web app and API, including archived chats.
02List video enginesList engines available to your account, effort levels, and defaults.
03List Motion plansReturn available subscription plans with IDs, prices, included credits and features, plus one-time credit offers and current account billing information.
04Get credit balanceReturn current account credit balance, plan, usage, entitlement and automatic top-up information, plus available plans and the exact topup_offer, in the plan…
05Show plans & creditsShow Motion plans, the current credit balance, and top-up options in an interactive widget.
Want to run these tasks against your MCP server with us?
mcp.motion.so setup, tools, quality score, publishing readiness, and alternatives.
How do I add mcp.motion.so to Claude, ChatGPT, or Cursor?
Add mcp.motion.so to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.motion.so/mcp.
Is mcp.motion.so MCP ready for ChatGPT and Claude?
As of October 14, 2026, mcp.motion.so scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is mcp.motion.so's MCP tool documentation?
As of October 14, 2026, mcp.motion.so scores 92/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 24 of 24 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to mcp.motion.so?
As of October 14, 2026, alternatives to mcp.motion.so in design-creative on the Manufact MCP catalog include Image Generation, PosterMyWall, SlidesGPT, Mermaid Chart, and tldraw.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.