{"version":"1.0","protocolVersion":"2025-11-25","serverInfo":{"name":"animation-machine","title":"Animation Machine","version":"a69b90b6defb","websiteUrl":"https://animation-machine.com/mcp-server"},"description":"Render AI-written HTML animations to MP4/GIF with music, voiceover and captions, in 16:9, 9:16 and 1:1.","iconUrl":"https://animation-machine.com/icon-512.png","documentationUrl":"https://animation-machine.com/docs/mcp","transport":{"type":"streamable-http","endpoint":"https://animation-machine.com/mcp"},"remotes":[{"type":"streamable-http","url":"https://animation-machine.com/mcp"}],"authentication":{"required":true,"schemes":["oauth2","bearer"],"oauthProtectedResource":"https://animation-machine.com/.well-known/oauth-protected-resource"},"capabilities":{"tools":{"listChanged":false}},"tools":[{"name":"get_account","title":"Account and limits","description":"Your Animation Machine plan, renders used this month, any job in progress, and the limits that apply to agents. Call this first if unsure.","annotations":{"title":"Account and limits","readOnlyHint":true,"openWorldHint":false}},{"name":"render","title":"Render an animation or finish a video","description":"Turn an HTML animation (GSAP, CSS, Web Animations, Lottie, Three.js, canvas, Claude Design exports…) into an MP4 or GIF, or finish an existing video (add music, voiceover, captions, title cards, logo). Pass ONE source: html, files, or upload_id. Returns job_ids immediately; poll get_job until status is \"done\" to get the download link. One job at a time per account; if you get \"busy\", wait retry_after_sec and try again. Tip: call preview_frame first to check the animation looks right.","annotations":{"title":"Render an animation or finish a video","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"render_template","title":"Render a ready-made template","description":"Render a polished motion-graphics template from a few fields — no HTML needed. Templates: \"title_card\": Big title with an optional subtitle and accent line. Good for intros, chapter cards, announcements. Fields: title (required, ≤60 chars), subtitle (optional, ≤100 chars), accent_color (hex, default #7c5cff), background (hex, default #0b0b14), duration (seconds 2–15, default 5). \"lower_third\": Name + role bar that slides in at the lower left, like a TV interview caption. Good for speaker intros. Fields: name (required, ≤40 chars), role (optional, ≤60 chars), accent_color (hex, default #00c2a8), background (hex, default #101820), duration (seconds 2–15, default 5). \"quote\": A quote revealed line by line with the author underneath. Good for testimonials and social posts. Fields: quote (required, ≤220 chars), author (optional, ≤60 chars), accent_color (hex, default #ffb020), background (hex, default #14110f), duration (seconds 2–15, default 7). \"stat\": A big number that counts up, with a label. Good for milestones, metrics, results (\"10,000 users\"). Fields: value (required number, e.g. 10000), prefix (optional, e.g. $), suffix (optional, e.g. % or +), label (optional, ≤80 chars), accent_color (hex, default #3fd17a), background (hex, default #0c1410), duration (seconds 2–15, default 5). Accepts the same output options as render (aspects, music_url, voiceover_text…). Returns job_ids; poll get_job.","annotations":{"title":"Render a ready-made template","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"preview_frame","title":"Preview one frame","description":"Render a single still frame of an HTML animation at a given time and return it as an image, plus the detected animation length. Use it to check layout, fonts and timing before a full render. Takes ~10–30s. Counts as your one job while it runs.","annotations":{"title":"Preview one frame","readOnlyHint":true,"openWorldHint":false}},{"name":"get_job","title":"Check a job","description":"Status of a render or preview: queued / rendering (with progress_pct) / done / error. When done, returns download_url (works without login for 24h), watch_url (a shareable page) and studio_url (open in the Animation Machine editor). Respect retry_after_sec between polls.","annotations":{"title":"Check a job","readOnlyHint":true,"openWorldHint":false}},{"name":"cancel_job","title":"Cancel a job","description":"Cancel a queued or running render (and any later versions in the same batch).","annotations":{"title":"Cancel a job","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"create_upload","title":"Get an upload link","description":"For files you have on disk: a .zip animation project, an .html file, a video to finish (.mp4/.mov/.m4v/.webm, ≤95 MB, ≤3 min) or a logo (.png/.jpg). Returns an upload_url — PUT the raw file bytes to it (e.g. `curl -T file.mp4 \"<upload_url>\"`), then pass upload_id to render. Links expire in 1 hour. Not needed for HTML you generated: pass it inline as \"html\".","annotations":{"title":"Get an upload link","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"search_music","title":"Find background music","description":"Search royalty-free (CC0) music by mood or genre, e.g. \"upbeat corporate\", \"lofi chill\", \"cinematic trailer\". Pass a result's url as music_url to render.","annotations":{"title":"Find background music","readOnlyHint":true,"openWorldHint":true}},{"name":"list_voices","title":"List voiceover voices","description":"Voices for voiceover_text in render. Premium voices sound most natural; standard voices are always available.","annotations":{"title":"List voiceover voices","readOnlyHint":true,"openWorldHint":false}},{"name":"post_kit","title":"Write social post copy","description":"AI looks at a finished render and writes ready-to-paste social copy: caption, 3 hook lines, hashtags and a longer description. Optional context = topic or script. Max 20 per day.","annotations":{"title":"Write social post copy","readOnlyHint":true,"openWorldHint":false}},{"name":"list_renders","title":"Recent renders","description":"Your 10 most recent renders (from the web app or agents), newest first, with job_ids you can pass to get_job or post_kit.","annotations":{"title":"Recent renders","readOnlyHint":true,"openWorldHint":false}}],"registry":{"name":"com.animation-machine/animation-machine","url":"https://registry.modelcontextprotocol.io"},"repository":"https://github.com/dssdave/animation-machine-mcp","contact":"support@getcashflow.co"}