Cavalry MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CAVALRY_MCP_HOST | No | Host the bridge listens on. Keep it on loopback. | 127.0.0.1 |
| CAVALRY_MCP_PORT | No | Must match CONFIG.port in the bridge script. | 37650 |
| CAVALRY_MCP_FROZEN_MS | No | Fail fast with BridgeFrozenError when Cavalry processes nothing for this long (0 disables). Rendering, saving, opening and batches are exempt. | 5000 |
| CAVALRY_MCP_TIMEOUT_MS | No | Max wait for a single operation (raise it for heavy renders). | 15000 |
| CAVALRY_MCP_ALLOW_SCRIPT | No | Registers cavalry_run_script. The bridge must also allow it. | false |
| CAVALRY_MCP_POLL_INTERVAL_MS | No | How often the server polls the bridge for results. | 40 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| cavalry_pingA | Check that Cavalry is running and the bridge is reachable. Returns bridge and Cavalry versions. |
| cavalry_scene_infoA | Describe the open scene: file path, unsaved state, current frame, compositions, and the active composition's resolution / frame range / fps when available. Call this first to orient yourself. |
| cavalry_set_frameA | Move the playhead of the active composition to a frame. |
| cavalry_playbackB | Start or stop playback in the viewport. |
| cavalry_list_layersA | List layers in the active composition with their id, name, type and parent. |
| cavalry_get_selectionB | Return the layers currently selected in Cavalry, in hierarchy order. |
| cavalry_selectB | Replace the current selection with the given layers. |
| cavalry_create_primitiveA | Create a primitive shape layer (e.g. "rectangle", "ellipse", "star", "polygon") and optionally set attributes in the same call, e.g. {"generator.dimensions": [400, 200], "position": [0, 0], "material.materialColor": "#00c2ff"}. |
| cavalry_create_layerA | Create a layer of any Cavalry type (e.g. "null", "group", "textShape", "duplicator", "colorMaterial", "javaScript") and optionally set attributes in the same call. |
| cavalry_duplicate_layerB | Duplicate a layer. Returns the ids of the newly created layers. |
| cavalry_rename_layerB | Change a layer's display name. |
| cavalry_set_parentA | Parent a layer under another layer (e.g. a group), or pass parentId null to un-parent it. |
| cavalry_delete_layersA | Delete one or more layers. Ids that do not exist are reported back instead of failing. |
| cavalry_list_attributesB | List every attribute path available on a layer, optionally with data types. |
| cavalry_get_attributesA | Read the current values of one or more attributes on a layer. |
| cavalry_set_attributesA | Set one or more attribute values on a layer at the current frame (does not create keyframes). Every path is checked first, because Cavalry silently ignores writes to unknown paths. In 2D, rotate with "rotation.z". |
| cavalry_get_bounding_boxA | Return a layer's bounding box (x, y, width, height, centre, left/right/top/bottom). Use it to lay out, align and check that layers fit inside the composition. |
| cavalry_inspect_connectionsA | List a layer's incoming and outgoing attribute connections, to understand an existing node graph. |
| cavalry_add_dynamic_attributeA | Add a dynamic attribute to layers that support them (e.g. JavaScript layers). Returns the new array count; use cavalry_list_attributes to find the new attribute path. |
| cavalry_set_generatorB | Swap the generator on a layer, e.g. set a Duplicator's "generator" to "circleDistribution" or a Basic Shape's to "ellipse". |
| cavalry_set_expressionB | Set (or clear, with an empty string) a JavaScript expression on an attribute. |
| cavalry_connectA | Connect an output to an input. A layer's main output is its "id" attribute, e.g. connect shape "id" -> duplicator "shapes", or colorMaterial "id" -> shape "material" with force=true. |
| cavalry_disconnectC | Remove a connection between two attributes. |
| cavalry_set_keyframesB | Create keyframes on a layer. Each keyframe sets one or more attribute values at a frame and can apply a Magic Easing to the keyframes it creates. Example: [{"frame": 0, "values": {"position.x": -300}, "easing": "SlowOut"}, {"frame": 30, "values": {"position.x": 300}}]. |
| cavalry_delete_keyframesA | Delete keyframes on an attribute at specific frames, or all of its animation when frames is omitted. |
| cavalry_render_pngA | Render the active composition to a PNG file on the local machine (useful for checking your work visually). Use an absolute path; the .png extension is added automatically. |
| cavalry_save_sceneA | Save the scene in place, or to a new .cv path when filePath is given. |
| cavalry_open_sceneA | Open a .cv scene file. Unless force is true, Cavalry may ask the user about unsaved changes in the current scene. |
| cavalry_batchA | Run several operations in one round-trip, in order. Stops at the first failure; earlier operations are NOT rolled back. Each item is {"op": "", "args": {...}} where op is the tool name without the "cavalry_" prefix. Reference earlier results with "$" strings: "$0" is the id created by operation 0, "$2.created.0.id" walks into a result. Example: [{"op": "create_primitive", "args": {"shape": "ellipse"}}, {"op": "set_keyframes", "args": {"layerId": "$0", "keyframes": [...]}}]. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| attribute-guide | Common layer types, attribute paths, Magic Easing names and gotchas for driving Cavalry. |
TDQS
Scored across 29 tools
Each tool targets a distinct resource and action, with clear separation between attribute reads (get_attributes), path discovery (list_attributes), and writes (set_attributes vs set_keyframes). The only minor overlap is create_layer vs create_primitive, since primitives are a subset of layers, but the descriptions make the boundary reasonably clear.
Every tool uses the same cavalry_ prefix followed by a consistent verb_noun pattern (e.g. cavalry_set_attributes, cavalry_delete_layers, cavalry_create_layer). No mixed casing or verb-style deviations.
With 29 tools the surface is on the heavy side, and several could be folded together (e.g. create_primitive into create_layer). However, the domain—scene, layer, attribute, keyframe, and connection management for a motion graphics app—genuinely needs broad coverage, so it is borderline rather than excessive.
The set covers layer lifecycle (create/duplicate/rename/delete), attributes, keyframes, connections, parenting, selection, scene open/save, playback, frame control, and rendering. Minor gaps exist, such as creating a fresh scene or exporting video/image sequences, but core workflows are fully supported.