Categories › Media & Design › Video creation & editing
AI editor to build, animate & export layered short-form video projects via one tool catalog.
Remote server: your requests and data go to morphareels.ai. Claude Code: claude mcp add --transport http morphareels https://morphareels.ai/mcp · Claude app: Settings → Connectors → Add custom connector.
The tools this server listed when we connected to it, in its own words.
list_projects — List projects as { id, name, editorUrl } entries. The id is what every other tool's `projectId` argument takes. `name` is the human-readablelist_workspaces — List the workspaces (shared team spaces) the account belongs to, as { id, name, role, memberCount } entries. `role` is the caller's role in create_workspace — Create a new workspace (a shared team space) owned by the caller, and return it as { id, name, role, memberCount }. Use this when the user wrename_workspace — Rename an existing workspace. Requires an owner or admin role in it (the same roles that may change its membership); an editor or viewer is open_project — Get a link that opens a project directly in the editor (the editor loads exactly this project from the URL), where the person can see the woshow_project — Show the project in the chat as a live preview that plays and follows every edit; a multi-page project turns its pages in the preview. Call create_project — Create a new project and return its server-minted id. The id is an opaque v4 UUID assigned automatically, not chosen by the caller; people smove_project_to_workspace — Move a project into a workspace, or back to the caller's personal space. Pass `workspaceId` (from list_workspaces) to place the project in tlist_collection — List the user's reusable Collection — layers they added with add_to_collection (lower-thirds, logo stings, brand intros, or any single layeradd_from_collection — Add an item from the user's Collection into a project as a self-contained COPY. Pass the destination `projectId`, plus the `sourceProjectId`duplicate_project — Duplicate an existing project into a brand-new one — a full copy of its layers, animations, styles, uploaded assets, and clips. Pass the SOUrename_project — Update a project's human-readable name (shown in the editor's project picker). Pass an empty string to clear the name and fall back to the ireid_project — Change a project's id LOSSLESSLY — re-keys its JSON, every saved version, and all assets + clips, then deletes the old id. Unlike create_prodelete_project — Move a project to Recently deleted. It leaves every project list at once and can be restored for 30 days, with restore_project or from the plist_trash — List the projects in Recently deleted as { id, name, trashedAt, purgeAt, deletedBy, canEdit } entries. Each can be restored with restore_prorestore_project — Bring a project back from Recently deleted, with its versions, files, workspace and sharing as they were. Returns { projectId, name }. Schedsave_version — Save a version of the current project state. The person flicks between versions in the editor to compare or roll back, so one version per lolist_versions — List every saved version of a project, newest-first. Returns summaries (id, name, timestamp, source, kind, version_number, cp) — not the innrestore_version — Load a saved version over the live project. Accepts either the version's UUID `id` or the `v<N>` shorthand (e.g. `"v6"` finds the bookmark wrename_version — Rename a saved version's human-readable label (what the user sees in the picker). The `v<N>` partner-facing identifier is unaffected — only delete_version — Permanently delete one saved version (bookmark or auto-snapshot). Accepts the version's UUID `id` or the `v<N>` shorthand. The bookmark v<N>upload_image — Upload an image into a project from a public http(s) URL or a file attached in the chat, fetched server-side. Pass `url` for a public http(supload_audio — Upload an audio track into a project from a public http(s) URL or a file attached in the chat, fetched server-side — the ONLY way to get an detect_text_regions — Return the OCR text regions detected in a clip's video frames OR a still image asset. Pass either `clip` (a video.<id>.clip filename) or `imsafe_zones — Return horizontal 'safe band' y-ranges of the canvas where a clip's burned-in video text (subtitles, lower thirds, titles) does NOT appear, transcribe_clip — Return the cached transcript of a clip's audio. Generated client-side in the Morpha editor (transformers.js Whisper) and cached in R2 next tclip_processing_status — Report whether a clip — or every video clip in the project, if `clip` is omitted — has been through the browser-side video-processing pipelirender_video — Render the project to an MP4 on Morpha's servers, for an agent that has no browser to drive (a chat app, a Linux box). Returns { renderId, srender_status — Check a server render started by render_video, and get its download link. Returns { ok: true, status: 'not-ready' } while it is still renderreport_issue — Report a defect in Morpha itself to the Morpha team: a tool that errors when it should not, a result that contradicts the documentation, or describe_video — Structural OVERVIEW of the composition (the table of contents) — canvas size, duration, platform_safe_area (the part of the canvas TikTok / inspect_layers — Full per-element drill-in — the 'open this layer' half of the browser. Returns each named element's COMPLETE record: all of its own fields pmove_layer — Set a layer's static base transform. Writes x/y/w/h/rotation directly on image.<id>, video.<id>, and shapes.<id>; for group.<id> sets pivotXmove_layers — move_layer for MANY layers in ONE call: each entry sets one layer's static base (x/y/width/height/rotation/scale/opacity, same fields and ruset_pivot — Set the rotation / scale pivot anchor for an image, video, shape, or text leaf. Picks one of the 9 standard bbox anchors — corners, edge midadd_keyframe — Add or overwrite a keyframe on a layer's animation track. For leaves (image/video/shape), x/y/rotation keyframes are ABSOLUTE canvas-space vset_keyframes_batch — Add or overwrite MANY keyframes across MANY layers in ONE call — functionally equivalent to N add_keyframe calls but with one HTTP/MCP roundadd_keyframes — Add many keyframes to ONE element's ONE property in a single call, with an optional loop mode applied in the same call. The idiomatic form wremove_keyframe — Remove the keyframe at frame N on a layer's track. Removing the last keyframe from a track restores the layer's static base value across theshift_track — Bulk-shift every keyframe's VALUE on one property of one layer by `delta`. Mirrors the 'select all keyframes + nudge layer' gesture in AfterNot tested by KitScout yet. When our harness runs it, pros, cons and the tasks we tried appear here, with the date and evidence.