Skip to content

ChatGPT App

Create a ChatGPT app for Motion by connecting ChatGPT to the public Motion MCP server:

FieldValue
App nameMotion
DescriptionCreate and refine videos with Motion. Use this app for launch videos, explainers, promos, ads, trailers, motion graphics, product demos, social clips, article-to-video, and turning docs, sites, products, or ideas into videos.
MCP URLhttps://mcp.motion.so/mcp
AuthenticationOAuth 2.1 with PKCE via Dynamic Client Registration or Client ID Metadata Documents

Motion is a streaming HTTP MCP server. It serves ChatGPT Apps widgets as ui://motion/*.html resources with text/html;profile=mcp-app, and links video and billing tools to those widgets through _meta.ui.resourceUri plus the ChatGPT compatibility alias _meta["openai/outputTemplate"].

Connect in ChatGPT Developer Mode

  1. Open Settings -> Apps -> Advanced settings and enable Developer mode.
  2. Return to Settings -> Apps and choose Create app.
  3. Enter the app name, description, and MCP URL above.
  4. Choose OAuth. ChatGPT can use CIMD when the authorization server advertises client_id_metadata_document_supported: true, or DCR through https://mcp.motion.so/oauth/register.
  5. Authorize Motion in the browser and approve the requested scopes.
  6. In a conversation, choose Developer mode from the composer and enable Motion.

Production Settings

The backend environment should include:

dotenv
MOTION_APP_DOMAIN=https://motion.so
MCP_PUBLIC_URL=https://mcp.motion.so
MCP_RESOURCE_URL=https://mcp.motion.so/mcp
MCP_WIDGET_DOMAIN=https://motion.so
OAUTH_DCR_ENABLED=true
OAUTH_CIMD_ENABLED=true

MCP_WIDGET_DOMAIN is the dedicated widget origin advertised to ChatGPT through _meta["openai/widgetDomain"]. The standard _meta.ui.domain field is host-specific and intentionally omitted so Claude can choose its own *.claudemcpcontent.com sandbox origin.

Widgets

ToolWidgetBehavior
create_videoui://motion/generation.htmlStarts an async render and shows a live video card that polls job_status from the iframe.
create_followupui://motion/generation.htmlRefines an existing completed Motion job and reuses the live video card.
get_session_statusui://motion/generation.htmlReopens a job in the video widget and exposes output.download_url when complete.
show_plans_and_creditsui://motion/plans.htmlShows plan cards, credit balance, top-ups, and payment setup.

The widget CSP allows rendered videos and downloads from Google Cloud Storage and S3, and allowlists Motion, Stripe, and storage URLs as ChatGPT openExternal destinations.

Review Checklist

  • /.well-known/oauth-protected-resource declares https://mcp.motion.so/mcp as the MCP resource.
  • /.well-known/oauth-authorization-server advertises authorization_endpoint, token_endpoint, registration_endpoint, client_id_metadata_document_supported: true, and S256.
  • Every tool has accurate annotations:
    • read-only tools use readOnlyHint: true.
    • write tools use readOnlyHint: false.
    • payment, auto-top-up, subscription, and revoke actions use destructiveHint: true.
    • private Motion-only mutations use openWorldHint: false.
  • Widget resources include _meta.ui.csp, _meta["openai/widgetCSP"], and _meta["openai/widgetDomain"]; they do not set _meta.ui.domain.
  • Run test cases on ChatGPT web and mobile:
    • "Create a 30 second launch video for a new AI video editor."
    • "Show my Motion credit balance and plans."
    • "Check the status of job <job_id>."
    • "Buy 200 Motion credits" with a test account, verifying checkout or saved-card behavior.

See the OpenAI Apps SDK docs for the current ChatGPT setup and review flow:

Mosaic Motion documentation.