MCP server for Adobe After Effects — drive premium showreel motion programmatically
OpenShowreel has 17 well-named tools with clear descriptions and mostly complete schemas. Tool names follow verb_noun convention (ae_create_shape, ae_animate_transform). Descriptions are detailed and contextual (avg ~150 chars, within 10-1024 baseline). However, critical gaps exist: (1) NO output schemas documented for any tool, LLMs cannot predict return structure; (2) parameter descriptions lack validation constraints (e.g., ae_create_shape color accepts [0-1] but no min/max in schema); (3) error handling is absent, no recovery guidance or categorization; (4) ae_eval is a dangerous escape hatch with minimal safeguards. Most tools are READ_ONLY or WRITE but lack explicit idempotency/destructiveness annotations in the schema.
Apply a physics 'bounce' (overshoot) expression to a property (scale, position, or rotation) instead of hand-keying springiness. Once applied, any keyframe you set on that property will overshoot and settle naturally. Based on the well-worn Dan Ebberts overshoot — robust against overflow.
Add a tactile 'button press' animation: scale down then back up at a given time, with a subtle ease. Useful for interactive UI elements.
Add a fade-in or fade-out animation to a layer's opacity.
Add a camera to the composition and optionally tilt it for a 3D perspective effect.
Animate text character-by-character or word-by-word reveal using opacity keyframes.
The 'organic motion' trick: make a nested element trail its parent/leader by a fraction of a second using `.valueAtTime(time - delay)`, so things don't move in stiff unison (e.g. an arrow inside a button arrives just after the button).
No output schemas documented. LLMs cannot predict return structure, field names, or types. Every tool must document what it returns (e.g., 'Returns: {comp_name: string, width: number, height: number, fps: number}').
Parameter schemas lack validation constraints. Color params accept [0-1] but schema has no min/max. Size params accept [width, height] but no bounds. Add explicit constraints: z.number().min(0).max(1) for colors, z.number().positive() for dimensions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Keyframe a transform property (position, scale, rotation, or opacity) between two values over a time range with optional easing.
Create a null layer and animate it along a path (sequence of points), useful for moving objects along a curve.
Add a shape layer (rounded rectangle or ellipse) with a solid fill — e.g. a UI button or a background frame. Position is the layer's transform position; the shape geometry is drawn around it.
Create a solid-color layer (useful for backgrounds or overlays).
Create a text layer with specified content, font size, color, and position.
Escape hatch: run arbitrary ExtendScript inside After Effects. The code may `return` a value. Helpers under `OSR` are available (OSR.comp, OSR.layer, OSR.tprop, ...). Prefer the specific tools when one fits.
Animate a shape's Size on one axis independently (the 'constrain proportions OFF' trick) — so a moving button can look like it physically stretches a background frame. Keyframes the layer's first rectangle/ellipse Size between two times.
Set a layer's parent, making it follow the parent's transform.
Render a single frame from a composition to a PNG or other image file.
Inspect the After Effects project: lists every composition with its size, frame rate, duration, motion-blur state, and layers (with parents). Use this first to see what exists.
Create a composition configured for premium motion: 60 fps and motion blur ON by default — the baseline 'buttery smooth' look. Returns the comp name.
ae_eval is an unrestricted code execution tool. No input validation, no permission gates, no audit trail. Agents can run arbitrary ExtendScript, including destructive operations. Add a dry-run mode, restrict to read-only by default, and log all invocations.
No error handling or recovery guidance. Tools return raw ExtendScript errors or success strings. Add structured error responses with actionable next steps: 'Composition not found. Available comps: [list]. Try ae_scene_info() first.'
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Schema declares Risk: READ_ONLY or WRITE but MCP SDK does not expose these. Add explicit annotations to help agents reason about side effects and retry safety.