MCP server for creating Excalidraw designs and animating them with keyframes
Excalimate MCP server presents a domain-specialized animation toolkit with 18 tools. While tool naming follows verb-noun conventions and most tools have descriptions, significant quality gaps emerge: (1) Input schemas are present but many parameters lack proper type constraints and enums where applicable; (2) Descriptions vary widely in quality, some are detailed (e.g., upsert_action_sequence) while others are vague (e.g., 'get_action_sequence' lacks specifics on return structure); (3) No visible output schemas documenting what agents should expect back; (4) Error handling guidance is absent; (5) Parameter validation rules are under-documented. The codebase does show proper tool registration via the mcp-sdk, but the quality baseline for production-grade tools is not consistently met. Server lands in the 'Fair' range (C), noticeable gaps in schema completeness, inconsistent descriptions, and missing error recovery patterns.
Add a keyframe to an animation track. Auto-creates the track if it doesn't exist.
Add multiple keyframes at once. For scaleX/scaleY keyframes, include a "scaleOrigin" field per keyframe to control where scaling anchors from (auto-adds translate compensation). Origins: center, top-left, top-right, bottom-left, bottom-right, top, bottom, left, right.
Returns a timeline description of all animations an item goes through.
Apply a deterministic managed animation preset to an explicit target scope.
Check if the given items are aligned horizontally or vertically (within a tolerance).
Create a complete animated scene in one call: elements + keyframes + sequences + camera + clip range. Preferred over calling create_scene, add_keyframes_batch, create_sequence separately. Only elements is required — all other fields are optional.
Output schemas not documented. Agents cannot predict what fields will be returned or plan downstream calls. Tools like get_timeline and get_action_sequence lack response structure documentation.
No error recovery guidance. Error messages do not tell agents what to do next (retry? ask user? try alternative tool?). No error categorization (retryable vs fatal).
Enum constraints missing where applicable. Parameters like 'startMode', 'easing', 'preset', and 'property' accept constrained sets but are described as strings without explicit enum definitions in schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Create a deterministic managed camera move for the V2 camera-frame target.
Create a reveal sequence — elements appear one after another with configurable timing.
Return the V2 managed-action authoring sequence and its document/timeline revisions.
Return all animation tracks and their keyframes.
Check if the camera is centered on the scene content (horizontally, vertically, or both).
Check what percentage of items are visible in the camera frame at a given time.
List all saved checkpoints.
Load scene + animation state from a checkpoint.
Remove a keyframe by track and keyframe ID.
Save current scene + animation state to a checkpoint.
Set the export clip start and end times.
Upsert deterministic managed animation actions. Nested action objects are compiled by @excalimate/animation-core; customized and unmanaged keyframes are never silently replaced.
Vague descriptions for discovery tools. get_timeline, get_action_sequence, and list_checkpoints lack context about what structure they reveal and when to call them (prerequisite for downstream tools).
Parameter validation rules under-documented. Numeric ranges (timing values, scale values) lack min/max constraints in descriptions. add_keyframe duration minimum is mentioned but others are not. Scale values stated as 'positive' without explicit bounds.
No confirmation/dry-run pattern for destructive operations. Tools like remove_keyframe, load_checkpoint, and create_animated_scene (overwrites) lack confirmation or preview capability to prevent accidental data loss.
Parameter interdependencies not documented. In create_animated_scene, clipStart/clipEnd depend on duration; scaling parameters have scaleOrigin dependencies in add_keyframes_batch. These are mentioned but not clearly stated in both parameter descriptions.