Skip to content

Motion by Frapea

by frapea.com · remote · no sign-in to list tools · v1.0.0 · published by com.frapea

One sentence to a finished animation: your AI writes motion graphics as code and checks real frames.

Changes · 10

19 tools: 10 change things and 9 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http motion https://motion.frapea.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The description contains "every other tool", wording about other tools or servers.

    Matched text

    description: "...rns a session token; pass that token to every other tool. The code itself stops working the mome..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

19 tools

Changes things 10Claude Code: ask
  • check_playbackPLAY IT THROUGH.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    PLAY IT THROUGH. Puts the composition on the user's stage and plays it from frame 0 through the real preview — the path a person watches, which inspect_composition does not take — from the first frame to the last. Buffering is fine; any error ends it. Answers within about 20 s: {status:"running", at, total} means call again with the same id to keep waiting (it continues the same run). Then {status:"done", verdict:"ok"|"problems", problems, warnings} or {status:"incomplete", reason} — hidden (ask the user to bring the tab to the front), interrupted, edited. A piece is not finished until this says ok. It takes over the stage while it runs, so tell_user first.
  • close_compositionCloses a composition and removes it from the user's tabs.No findings

    Why it is in this group

    • The name "close_composition" says "close": a word for a change.
    Description, as the server wrote it
    Closes a composition and removes it from the user's tabs. Use it to clear up attempts you made along the way — an agent that leaves ten of them behind has handed the user the tidying. Needs an explicit id; it will never guess the active one.
  • connectPairs you with a Motion browser tab.1 finding

    Why it is in this group

    • The input takes a statement or command to run (input.code), which can change anything it can reach.

    Findings

    • Warn

      The description contains "every other tool", wording about other tools or servers.

      Matched text

      description: "...rns a session token; pass that token to every other tool. The code itself stops working the mome..."

      What this check looks for
    Description, as the server wrote it
    Pairs you with a Motion browser tab. The user has an eight-character code on screen, under the Connect MCP button — something like K7M4-P2Q9. Call this once at the start. It returns a session token; pass that token to every other tool. The code itself stops working the moment it is used, so keep the token, not the code.
  • create_compositionWrites a new composition and opens it as a tab in front of the user.No findings

    Why it is in this group

    • The name "create_composition" says "create": a word for a change.
    Description, as the server wrote it
    Writes a new composition and opens it as a tab in front of the user. `files` maps path to TSX source and must include the entry (default composition.tsx). Read read_skill {topic:'motion'} and {topic:'motion-craft'} first — this API is not guessable and the craft guide is what stops the result looking generated. Aim well beyond a slide deck. With UI-like parts, write them in their own file with a partsBoard prop (default false) and check the board before building scenes.
  • create_sessionStarts a Motion session WITHOUT the user having a tab open.No findings

    Why it is in this group

    • The name "create_session" says "create": a word for a change.
    Description, as the server wrote it
    Starts a Motion session WITHOUT the user having a tab open. Use this when they have no pairing code — you can create and edit compositions immediately, and give them the returned link when they want to watch. Anything needing to SEE the result (inspect_composition) or touching their media still requires them to open it: send them the link, then call wait_for_tab rather than asking them to report back. The scene is kept for 24 hours after the last change.
  • organize_mediaLibrary housekeeping.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Library housekeeping. action: 'move' (ids + toFolder), 'delete' (ids), 'createFolder' (name + optional parent), 'deleteFolder' (folder — the files inside move up one level, nothing is lost).
  • put_mediaAdds a file to the library from a URL — the BROWSER fetches it, so nothing travels through this connection, but it only works on https hosts that send CORS headers.No findings

    Why it is in this group

    • The name "put_media" says "put": a word for a change.
    Description, as the server wrote it
    Adds a file to the library from a URL — the BROWSER fetches it, so nothing travels through this connection, but it only works on https hosts that send CORS headers. TO UPLOAD A FILE YOU ALREADY HAVE ON DISK, DO NOT USE THIS: run `curl -X POST --data-binary @FILE 'BRIDGE/media/upload?token=TOKEN&name=NAME'` from your shell instead (up to 10 MB). Reading a file into `data` costs hundreds of thousands of tokens for something curl streams for free; `data` is for small generated assets only.
  • set_propsSets prop values on a composition — the same values the user's controls change.No findings

    Why it is in this group

    • The name "set_props" says "set": a word for a change.
    Description, as the server wrote it
    Sets prop values on a composition — the same values the user's controls change. Merged, so you can send one key.
  • tell_userPUT A SENTENCE ON THEIR SCREEN, as you work.No findings

    Why it is in this group

    • The description's first verb is "put": a word for a change.
    Description, as the server wrote it
    PUT A SENTENCE ON THEIR SCREEN, as you work. They are watching the Motion tab while you build, and between your tool calls it shows nothing — a busy agent and a hung one look identical from there. Call this at every step that takes more than a few seconds: what you are about to do, what just landed, what you had to fix. Write like a person talking to someone over their shoulder, one sentence, no jargon. kind:'done' when the whole job is finished and kind:'problem' the moment you are stuck — those are the two endings they are waiting for. Read read_skill {topic:'motion-workflow'} for how this fits the rest.
  • update_compositionEdits an existing composition.No findings

    Why it is in this group

    • The name "update_composition" says "update": a word for a change.
    Description, as the server wrote it
    Edits an existing composition. `files` is MERGED by path, so send only what changed. Changing the schema keeps any prop values that still have a home.
Only reads 9Claude Code: allow
  • get_compositionOne composition in full: manifest, every source file, and current prop values.No findings

    Why it is in this group

    • The name "get_composition" says "get": a word for reading.
    Description, as the server wrote it
    One composition in full: manifest, every source file, and current prop values. Read this before update_composition so you edit what is actually there.
  • get_mediaThe raw bytes of one file, base64.No findings

    Why it is in this group

    • The name "get_media" says "get": a word for reading.
    Description, as the server wrote it
    The raw bytes of one file, base64. Capped at about 600 KB — for anything larger, and for every video, use inspect_media instead: it answers what is IN the file for a fraction of the size.
  • get_problemsWHAT WENT WRONG in the user's tab: frames that failed to render (with the frame and the engine's own words), a preview that stopped moving (and at which frame, and why), compositio…No findings

    Why it is in this group

    • The name "get_problems" says "get": a word for reading.
    Description, as the server wrote it
    WHAT WENT WRONG in the user's tab: frames that failed to render (with the frame and the engine's own words), a preview that stopped moving (and at which frame, and why), compositions that would not load, clips that will not decode, missing footage, failed exports, a page the browser killed — plus warnings (notes about unread styles and the like). Call it FIRST when the user says something is broken or looks wrong. Works while the tab is hidden or closed: the tab sends what it saw to the session as it happens. `current` belongs to the composition as it is now; `earlier` counts problems an edit has since left behind. New problems also arrive on their own: any tool result may carry a `problems` list of what is new since you last heard. An empty list only covers what the tab has actually played — run check_playback for a full pass.
  • inspect_compositionLOOK AT WHAT YOU MADE.No findings

    Why it is in this group

    • The name "inspect_composition" says "inspect": a word for reading.
    Description, as the server wrote it
    LOOK AT WHAT YOU MADE. Renders frames of a composition and returns them as one labelled contact sheet. Pass atFrames (up to 12), or omit them: the sheet is then an even spread PLUS the joins between your scenes (labelled "end of a scene", "start of a scene", "mid transition") — where a card caught half-way or an empty gap hides. ONE frame comes back large (1560 px), two at 960 — ask for one when you need to see detail: padding, a label off centre, a fill over its border. `props` are merged over the composition's for this picture only — {partsBoard:true} draws the parts board without changing anything. Each frame reports its content share (how much is not background) — compare frames of one piece: one far below its neighbours is usually a gap between scenes. Use it after every create or update — timing, spacing and whether text fits are things you cannot verify by reading your own source.
  • inspect_mediaLooks INSIDE a file.No findings

    Why it is in this group

    • The name "inspect_media" says "inspect": a word for reading.
    Description, as the server wrote it
    Looks INSIDE a file. Returns ONE contact sheet — every requested moment as a labelled cell in a single grid image. Pass atSec (up to 12 timestamps, seconds); omit it for an even spread across the whole clip. This is how you analyse a video second by second without paying for a dozen separate images.
  • list_compositionsThe compositions open in the tab, and which one is on screen.No findings

    Why it is in this group

    • The name "list_compositions" says "list": a word for reading.
    Description, as the server wrote it
    The compositions open in the tab, and which one is on screen.
  • list_mediaThe user's media library: folders, and files with id, name, kind, size and folder.No findings

    Why it is in this group

    • The name "list_media" says "list": a word for reading.
    Description, as the server wrote it
    The user's media library: folders, and files with id, name, kind, size and folder. `storage` says whether a file is 'linked' (still on their disk) or 'copied' (held by the browser) — a linked file can need the user to re-grant access after a reload.
  • read_skillMotion's authoring guides.No findings

    Why it is in this group

    • The name "read_skill" says "read": a word for reading.
    Description, as the server wrote it
    Motion's authoring guides. Read {topic:'motion'} first — it is the API contract: what compiles, what resolves, what renders. Then {topic:'motion-craft'} ALWAYS before writing a line, because the API guide alone produces compositions that render correctly and look generated. 'motion-text' for typography, 'motion-effects' for named looks, 'motion-transitions' for sequencing scenes inside one composition. 'motion-examples' before choosing a look: two whole pieces that look nothing alike. 'motion-workflow' is about working while someone watches: showing progress, and checking your own frames for overflow — read it before a job of more than one scene. 'motion-review' is the argument that makes a piece better than its first draft: a creative director, a designer and a marketer judge your frames in rounds — read it for anything with an audience and a purpose.
  • wait_for_tabWAIT UNTIL THEY HAVE MOTION OPEN.No findings

    Why it is in this group

    • The name "wait_for_tab" says "wait": a word for reading.
    Description, as the server wrote it
    WAIT UNTIL THEY HAVE MOTION OPEN. Everything that has to SEE a composition — inspect_composition, and anything touching their media — runs in their browser, so it needs the tab. Ask them to open the session link, then call this instead of asking them to tell you when it is ready. It returns as soon as the tab connects, or after about 25 seconds with tabConnected false — in which case call it again, or give up and say so. Do not spin on it: two or three waits, then tell them you are waiting and stop.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http motion https://motion.frapea.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__motion__wait_for_tab",
      "mcp__motion__read_skill",
      "mcp__motion__list_media",
      "mcp__motion__get_media",
      "mcp__motion__inspect_media",
      "mcp__motion__list_compositions",
      "mcp__motion__get_composition",
      "mcp__motion__inspect_composition",
      "mcp__motion__get_problems"
    ],
    "ask": [
      "mcp__motion__close_composition",
      "mcp__motion__connect",
      "mcp__motion__create_session",
      "mcp__motion__tell_user",
      "mcp__motion__put_media",
      "mcp__motion__organize_media",
      "mcp__motion__create_composition",
      "mcp__motion__update_composition",
      "mcp__motion__set_props",
      "mcp__motion__check_playback"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as motion. Review it before you use it.