16 tools that write animation, and look at what they wrote.
Motion is a free MCP server that makes video. Your agent writes React compositions as code, renders real frames and looks at them before handing anything over, and you export the result as MP4 or WebM from your own browser — no API key, no account, and your media never leaves the tab. This is the whole of what it can do.
- Endpoint
- https://motion.frapea.com/mcp
- Transport
- Streamable HTTP
- Auth
- None — no API key, no OAuth, no account
- Claude Code
- claude mcp add -s user --transport http motion https://motion.frapea.com/mcp
- stdio clients
- npx -y mcp-remote https://motion.frapea.com/mcp
01
Does it pick a template, or write one?
It writes. A composition is TSX source that the agent authors from scratch — timing, easing, type, layout — and hands over as files. There is no template library to pick from, which is why two people asking for the same thing get two different pieces, and why asking for a change means changing the code rather than finding a setting that happens to exist.create_compositionWrites a new piece as source files and opens it in front of you.
update_compositionEdits one that exists. Only the changed files are sent.
set_propsChanges a value without touching the code — the same controls you have.
get_compositionReads back the whole thing, so an edit starts from what is actually there.
list_compositionsWhat is open, and which one you are looking at.
02
Can it see what it rendered?
Yes, and it is the part almost nobody expects.inspect_composition renders real frames and returns them as one labelled contact sheet, so the agent can look at its own output and fix it — text that overflows its box, a beat that lands late, a colour that vanishes on the background it ended up on. None of that is knowable by reading your own source, which is exactly why so much generated motion looks generated.inspect_compositionRenders up to twelve frames as one labelled contact sheet, for the agent to look at.
03
What happens to my photos and video?
They live in your browser and the render happens there, so nothing is stored on a server — the file's home is your tab's own storage. Two paths do cross the wire and it is worth being exact about them: uploading a file from your disk POSTs it through the bridge, which relays it straight to your tab and keeps nothing, andget_media can hand the agent up to 600 KB of raw bytes when something genuinely needs them. The design is that it almost never needs them: inspect_media answers what is in this clip with one contact sheet instead.put_mediaAdds a file from a URL — your browser fetches it, so the host has to send CORS headers. A file already on your disk is POSTed through the bridge instead, up to 10 MB.
inspect_mediaLooks inside a clip — up to twelve moments as one contact sheet.
list_mediaWhat is in your library, and whether a file is linked or copied.
get_mediaRaw bytes of a small file, base64, capped around 600 KB. The escape hatch, not the route.
organize_mediaFolders: move, create, delete. Deleting a folder moves its files up a level rather than losing them.
04
How does it know what good looks like?
It reads first.read_skill serves the authoring guides — the API contract, and then the craft guide on anticipation, overshoot, stagger and follow-through that it is told to read before writing a line. The guides exist because a composition that obeys only the API renders correctly and looks generated, and that difference is most of what this server is for.read_skillSix guides: the API, craft, type, effects, transitions, workflow.
05
How do I get the file?
You press Export. There is deliberately no export tool in this list — rendering a file is your decision to take at the moment you want it, and an agent that can start downloads on your machine is a worse tool than one that says it is ready, press Export. MP4, WebM or a PNG sequence, no watermark on any of them, and the whole render happens in the tab rather than in a queue somewhere.06
How does it reach my browser?
One endpoint and a code that works once. Either you have Motion open and carry an eight-character code to your agent, or you have nothing open and the agent starts a session on its own and hands you back a link — it can compose before a browser is involved at all. There is no key and no account either way.connectPairs with a tab you already have open, using the code on screen.
create_sessionStarts one without you. Returns a link to open when you want to watch.
wait_for_tabWaits for you to open it, instead of asking you to report back.
tell_userPuts a sentence on your screen as it works, so a busy agent does not look like a hung one.
One piece, end to end
What the calls actually look like
>Animate this quote so each line lands on the beat.
read_skillthe API contract — what compiles, what resolvesread_skilland the craft guide, before writing a linecreate_compositionthe piece, as TSX source filesinspect_compositiontwelve frames back, as one contact sheetupdate_compositionthe last line overflowed at 1080 — narrowed the measureinspect_compositionlooked againtell_user“fixed the wrap on the last line — take a look”
The fifth call is the one worth stopping on. It had already written the piece — then it rendered frames, saw the last line overflow, and went back. That loop is most of the difference between output that reads as made and output that reads as generated.
Point your agent at it.
Setup is one file or one command — written out for 8 clients.











