glaxnimate-mcp-server
A local MCP server that creates, edits, animates, inspects, and exports SVG artwork through agent tools, using SVG primitives and local rendering backends (it does not control the native Glaxnimate app or guarantee Glaxnimate imports).
Discover capabilities, limits, and supported formats (
glaxnimate_capabilities)Create SVG shapes, groups, text, gradients, masks, clipping, filters, and embedded raster images
Edit, insert, update, remove, move, duplicate, or resize artwork while preserving IDs
Inspect artwork IDs and document structure
Edit normalized paths: move points, split segments, remove nodes, smooth with symmetric/aligned mirroring (arcs and quadratics become cubics)
Animate with SMIL keyframes, easing, motion paths, repeat counts, fill modes, additive transforms, and reduced-motion fallback SVG
Build ordered chains of eleven filter types
Create, edit, and validate versioned project JSON with artwork, tracks, keyframes, timing, and playback (clients handle snapshots/undo-redo)
Convert supplied font data into text outline paths
Combine sibling shapes via union, subtract, intersect, or exclude
Export a standalone JavaScript SVG player, static/base-frame SVG, CSS keyframes, vector Lottie JSON, React Native/Flutter components, and rendered media (PNG, GIF, APNG, WebP, MP4, WebM, MOV, AVI, MKV, or PNG ZIP)
Run offline with no SVGator account; tools return data rather than saving files
Requires Python 3.11+, optional render/fonts/geometry extras, Chromium, and FFmpeg for animated media
Provides tools for inspecting SVG artwork and adding SMIL animations (translation, rotation, scale, opacity, path morphs, and stroke-dashoffset) to SVG elements with stable IDs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@glaxnimate-mcp-serverAdd a rotation animation to the gear icon and return both versions."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Glaxnimate-compatible SVG animation MCP
This local MCP server creates, edits, animates, and exports SVG artwork through agent tools. It uses SVG primitives and local rendering backends. It does not control the native Glaxnimate application or guarantee that Glaxnimate imports every exported animation.
The SVGator comparison is ongoing. PARITY.md records implemented features, restrictions, and remaining work. glaxnimate_capabilities reports svgator_parity: false until the required comparisons pass.
Tools
Tool | Purpose |
| Discover properties, limits, and formats |
| Create shapes, groups, text, gradients, masks, clipping, filters, and embedded raster images |
| Insert, update, remove, move, duplicate, or resize artwork |
| List artwork IDs and structure |
| Inspect normalized path commands, move points, split segments, and remove nodes |
| Add SMIL keyframes, easing, and motion paths |
| Create an ordered chain of eleven filter types |
| Create portable artwork and timeline data |
| Edit artwork, tracks, keyframes, timing, and playback in one transaction |
| Validate saved project data and inspect its timeline |
| Shape supplied font data and return text outlines |
| Union, subtract, intersect, or exclude static sibling shapes |
| Export a standalone JavaScript SVG player |
| Export base artwork or one sampled frame, with responsive sizing and optional short IDs |
| Export supported channels as CSS keyframes |
| Export supported artwork as vector Lottie JSON |
| Generate a React Native component or Flutter widget using a Lottie player |
| Render PNG, GIF, APNG, WebP, MP4, WebM, MOV, AVI, MKV, or a ZIP of PNG frames |
Tools return data; they do not save deliverable files or contact SVGator. Project tools return versioned JSON. Clients can store snapshots for save/load and undo/redo. Existing inspect and animation tools retain their dry_run option.
SVG edits preserve IDs. Duplicate prefixes subtree IDs and rewrites local references. Removing artwork that an animation track uses makes a project transaction fail unless the same transaction removes or retargets that track.
Path editing returns absolute commands in the element's coordinate system. Arcs and quadratic curves become cubic curves. set_point changes a command endpoint or control point by index; IDs, transforms, and paint stay intact. Pass mirror: "symmetric" or mirror: "aligned" with a curve handle to keep the node smooth: symmetric mirrors the opposite handle exactly, and aligned keeps its length but makes it collinear. split_segment inserts a node at parameter t without changing the shape. remove_command deletes a line or curve along with its end node. Operations run in order, so each index refers to the commands left by earlier operations. This tool currently requires artwork without stylesheets, scripts, or native animation elements.
Project edits include set_keyframe, remove_keyframe, and set_interval_easing. Keyframe time is normalized from 0 to 1 within its track. Setting an existing time changes its value; other times insert a keyframe. Removal preserves the endpoints. Insertion and removal require linear or discrete tracks without global easing. For eased tracks, replace the complete timeline through update_track. Existing keyframe values can still be updated individually.
Animations accept calc_mode (linear, discrete, or spline). Spline interpolation requires one key_splines entry per interval: [x1, y1, x2, y2], with all coordinates between 0 and 1. SMIL splines cannot express overshoot curves with coordinates outside that range.
Set repeat_count to "indefinite" for a continuous SMIL loop. Set fill_mode to "remove" to restore the base value after playback, or use the default "freeze". Transform animations accept additive: "sum" to compose with the underlying transform. The default remains "replace".
Numeric channels can use easing: {"type":"preset","name":"back-out"} or a cubic curve with overshoot. Continuous easing is a piecewise linear approximation with 60 samples per interval by default, capped at 512 keyframes per channel. easing: {"type":"steps","steps":4,"jump":"end"} produces discrete keyframes. Jump modes are start, end, none, and both. These easing options currently require numeric values without units; they do not interpolate colors or path coordinates.
JavaScript playback supports load, hover, click, scroll into view, and programmatic triggers. Options include direction, alternation, iterations, speed, hover exit, and second-click behavior. Access the player as document.getElementById(root_id).glaxnimatePlayer. Its API includes play, pause, restart, reverse, reset, seek in milliseconds, setSpeed, and destroy. Inline copies need distinct root IDs. The API is not a drop-in SVGator Player API replacement.
CSS export supports load or hover with freeze/reset behavior. It requires channels to start at zero, freeze at completion, and repeat once; global playback settings handle iterations. It rejects unsupported channels or triggers. JavaScript and CSS exports honor reduced motion. Native mobile components leave interactions and reduced motion to their host application.
Lottie and mobile exports support shapes, groups, transforms, opacity, strokes, compatible path morphs, and static or animated rotation pivots. Rotation values accept an angle or angle x y. Fills and strokes can be solid colors or static linear and radial gradients, including stop opacity and radial focal points. Embedded PNG, JPEG, GIF, and WebP images become image layers; transforms on an image become parent null layers. clip-path and luminance mask become track mattes. Images, clips, and masks have to be direct children of the root <svg>, because each one needs its own layer. The exporter rejects fonts, filters, patterns, gradient transforms, animated gradient stops, and unsupported attributes rather than dropping them. Text outlines can be inserted as paths before export. Mobile output uses lottie-react-native or Flutter's lottie package; it is not SVGator's generated runtime.
Static SVG export returns base artwork by default. Pass animations and time_ms to export a single frame instead: each channel is evaluated with SMIL timing (begin, repeats, fill mode, discrete, linear, and spline interpolation, additive transforms, and motion paths) and written into plain attributes. It removes native animation elements and scripts and rejects stylesheets and inline styles. Responsive output retains a viewBox and removes fixed dimensions. Optional short IDs update local href, URL, and accessibility references. This export is not an embedding sanitizer.
All local exports work without a SVGator account or subscription. SVGator access is only used for authorized reference research and comparisons.
glaxnimate_animate_svg returns both an animated SVG and the original SVG for reduced-motion handling. Use the static version when the host page detects prefers-reduced-motion: reduce.
Supplied SVG is not sanitized for embedding in an untrusted page. Local raster/video rendering disables scripts and network requests, uses a temporary directory, and returns base64 bytes. A render is limited to 500 million sampled pixels and 20 MB of encoded output. Optional playback settings apply direction, speed, iteration, and alternation to sampled frames. Interactive triggers do not affect offline sampling.
Related MCP server: text2animate
Install
This project requires Python 3.11 or newer. From a checkout of the repository, create a virtual environment and install the package:
python -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install .Optional backends:
python -m pip install '.[render,fonts,geometry]'
python -m playwright install chromiumAnimated media needs FFmpeg on PATH. PNG and ZIP sequences only need Chromium. GLAXNIMATE_CHROMIUM_PATH selects an existing Chromium executable. Font outlines need the fonts extra and caller-supplied base64 TTF/OTF bytes. Boolean geometry needs the geometry extra.
Configure your MCP client to launch glaxnimate-mcp over stdio. For clients that accept a JSON configuration, the command is:
{
"command": "glaxnimate-mcp"
}Verification
Run the unit tests from the repository root:
python -m pip install '.[test]'
pytest -W errorThe test suite requires 100% line and branch coverage. Additional checks are tests/transport_smoke.py, tests/browser_smoke.py, tests/media_smoke.py, tests/lottie_smoke.py, and tests/mobile_smoke.py. Browser checks require an explicit Chromium executable. Lottie rendering also requires an upstream lottie-web player script. Mobile fixture generation requires an explicit Linux scratch directory and refuses to overwrite existing fixtures.
License
Available Tools
2 toolsglaxnimate_animate_svgA
Add standards-based SMIL keyframes to a custom SVG.
Each animation needs target_id, property, and values. Property is translate, rotate, scale, opacity, path, or stroke-dashoffset. Use values such as ["0 0", "120 0"] for translate, ["0", "1"] for opacity, or compatible SVG path data for path. duration_ms, begin_ms, repeat_count, and key_times are optional.
The response contains animated_svg for the normal experience and the unchanged reduced_motion_svg for consumers that honor prefers-reduced-motion.
| Name | Required | Description | Default |
|---|---|---|---|
| svg | Yes | ||
| animations | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the output shape (animated_svg plus unchanged reduced_motion_svg), the required animation fields, allowed property types, and optional timing parameters. It does not discuss error behavior, but the main behavioral surface is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense: one sentence states purpose, one lists required and optional animation keys, one gives value examples, and one states the response fields. Every sentence earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the minimal input schema, the description is unusually complete: an agent knows how to construct the animations array and what to expect in the response. The only minor gap is the absence of explicit value formatting for rotate and scale, but the stated examples and property list are sufficient for a competent call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the animations array items are completely open objects (additionalProperties: true). The description compensates by defining exactly what each animation needs: target_id, property, values, plus optional duration_ms, begin_ms, repeat_count, and key_times. It also gives concrete value examples for translate, opacity, and path, without which the tool would be nearly uninvokable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Add standards-based SMIL keyframes to a custom SVG.' This clearly distinguishes it from the sibling glaxnimate_inspect_svg, which is for inspection rather than animation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool is clearly scoped to modifying/annotating an SVG with SMIL keyframes. It does not explicitly say 'use inspect_svg when you only need to inspect,' but the sibling name and the action verb make the divide obvious enough that an agent can choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
glaxnimate_inspect_svgA
Inspect an SVG and list the element IDs that can receive animation keyframes.
Give generated artwork stable, semantic IDs such as character, arm-left, eye-right, or background before calling this tool. The result confirms which IDs are available.
| Name | Required | Description | Default |
|---|---|---|---|
| svg | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior disclosure. It describes a read-only inspection and the outcome, but does not explicitly state that the SVG is not modified, nor does it mention edge cases like missing IDs or invalid SVG input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core purpose, and adds one actionable pre-call instruction. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter inspection tool with an output schema, the description provides enough context: what the tool does, what input it expects conceptually, and how to prepare artwork for useful results. It does not need to detail return values because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented 'svg' parameter. It only says 'Inspect an SVG' and references generated artwork, but does not clarify expected SVG format, source, or how the parameter should be provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Inspect an SVG') and a concrete result ('list the element IDs that can receive animation keyframes'). This distinguishes it from the sibling glaxnimate_animate_svg, which presumably performs animations rather than inspecting them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit pre-call guidance: assign stable semantic IDs before invoking the tool. It implies the tool is used to confirm available animation targets, though it does not explicitly name alternatives or describe when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
glaxnimate_animate_svg - First observed
glaxnimate_inspect_svg
TDQS
Scored across 2 tools
The two tools have completely distinct purposes: one inspects the SVG to list available element IDs, and the other adds animations to those elements. There is no overlap or ambiguity.
Both tools follow the same glaxnimate_ verb_noun pattern (inspect_svg, animate_svg), making the naming predictable and consistent.
Two tools feels thin for a full animation server, but the narrow workflow of inspect-then-animate is sufficiently focused for a minimal purpose. It sits at the borderline end of the scale.
The core workflow (identify targets, add keyframes) is covered, but there are no tools for removing or updating existing animations, or for managing animation timelines. This leaves notable gaps for iterative editing.
Maintenance
Related MCP Connectors
Hosted motion engine for agents. Builds layers and keyframes, exports MP4, WebM or Lottie.
One sentence to a finished animation: your AI writes motion graphics as code and checks real frames.
Split images into editable layers (PSD/PNG), outpaint images, and generate clean vector SVGs.
Render AI-written HTML animations to MP4/GIF with music, voiceover and captions.
Related MCP Servers
- AlicenseBqualityCmaintenanceAI-powered animation generator that transforms static images into animated SVG components using the Model Context Protocol, allowing users to create animations through natural language prompts.114 npm8Apache 2.0
- AlicenseAqualityDmaintenanceTurns plain-language descriptions into animated SVGs with a live preview and conversational editing.8MIT
- AlicenseAqualityAmaintenanceDeterministic motion compiler + validator for AI-generated web apps: validated MotionSpec JSON compiles to reduced-motion-safe GSAP/CSS. Reports WCAG 2.2.2 pause-path candidates; missing reduced-motion guards flagged as 2.3.3/AAA best practice. Keyless read-only MCP tools: motion_catalog + motion_validate; compile/audit/stats need a key (full toolset free locally: npx motionspec). MIT core on npm.5165 npm1MIT

SVGator MCP Serverofficial
FlicenseNot gradedqualityCmaintenanceEnables AI assistants to browse, inspect, edit, create, and export SVGator projects, handling everything from simple color edits to complex animated exports.5-