Skip to main content
Glama

cavalry-mcp

Node TypeScript MCP

Drive Cavalry from an LLM. An MCP server that exposes Cavalry's 2D motion-graphics engine as 28 structured tools — create layers, wire procedural graphs, set keyframes, apply easing, and render frames, all from natural language.

Point Claude at a composition and say "build me a looping loader animation with eight dots on a circle" — it introspects the scene, builds the duplicator graph, keyframes the rotation, and renders a PNG to check its own work.


Contents


Related MCP server: After Effects MCP Custom

Why

Cavalry ships a rich JavaScript API, but it lives behind an in-app editor — there is no out-of-process entry point. cavalry-mcp adds one, and wraps it in a typed, validated dispatcher rather than handing the model a raw eval.

That distinction is the whole design:

Raw script execution

cavalry-mcp

Input validation

none

Zod schema per tool

Injection surface

full

closed — args are JSON, never interpolated into source

Failure mode

silent console error

typed error taxonomy

Blast radius

filesystem + subprocess

scene graph only

The model gets exactly the verbs it needs, and every one of them is checked before it reaches Cavalry.


Architecture

graph LR
    A[MCP Client<br/>Claude Code / Desktop] -->|stdio<br/>JSON-RPC| B[cavalry-mcp<br/>Node + TypeScript]
    B -->|HTTP 127.0.0.1:8080| C[cavalry-bridge.js<br/>in-app WebServer]
    C -->|api.*| D[Cavalry<br/>scene graph]

Three processes, two hops:

  1. MCP server (dist/src/index.js) — speaks JSON-RPC over stdio, validates tool arguments with Zod, and serialises each call into a versioned dispatch payload.

  2. Bridge (cavalry-bridge.js) — runs inside Cavalry via api.WebServer, listening on loopback. It routes ops to api.* calls and returns results.

  3. Cavalry — the host application.

Request lifecycle

The bridge processes POSTs on Cavalry's realtime callback (~60 fps) and stashes the result for retrieval, so the transport is POST-then-poll rather than request/response:

POST /post  { payloadVersion: 1, op: "keyframe", args: {...}, _rid: <uuid> }
GET  /get   → poll every 30 ms until the body contains our _rid

Every request carries a UUID _rid. The client only accepts a response containing its own id, so concurrent calls can never read each other's results.

Results come back inside a sentinel envelope, because api.log() may write to the same buffer:

<CAVALRY_MCP_RESULT>{"ok":true,...}<CAVALRY_MCP_RESULT>

The parser scans for the last matching tag pair, making it resilient to log noise that happens to contain tag-like text.

Error taxonomy

Failures are classified rather than collapsed into a string, so an agent can tell "Cavalry isn't running" from "you passed a bad attribute path":

Kind

Meaning

validation

Bad input, rejected before dispatch

transport

Connection refused or timed out

http

Non-200 from the bridge

envelope

Response body unparseable

remote

Cavalry returned { ok: false }


Installation

Prerequisites

  • Node.js ≥ 18 (the transport uses global fetch)

  • Cavalry 2.7+

  • An MCP client — Claude Code, Claude Desktop, or any MCP-compatible host

1. Build the server

git clone https://github.com/nxnai/cavalry-mcp.git
cd cavalry-mcp
npm install
npm run build

Verify the build with the offline test suite (no running Cavalry required):

npm test

2. Install the bridge

Copy cavalry-bridge.js into Cavalry's user scripts folder:

OS

Path

Windows

%APPDATA%\Cavalry\Scripts\

macOS

~/Library/Application Support/Cavalry/Scripts/

Scripts in that folder appear under Window > Scripts immediately — no Cavalry restart needed. Run cavalry-bridge from that menu to start the listener.

IMPORTANT

The bridge issession-scoped. Re-run it from the Scripts menu each time you restart Cavalry. The MCP server does not need restarting.

WARNING

Cavalry must stay frontmost while tools run. Cavalry pauses script callbacks when the app is in the background, which stalls the bridge until you refocus it. Requests are queued rather than lost, and the client fails fast with a frozen error instead of hanging. See Troubleshooting.

Alternatively, paste the script into Window > JavaScript Editor and run it there.

3. Register the MCP server

Add to your MCP client config — .mcp.json in your project root for Claude Code, or claude_desktop_config.json for Claude Desktop:

{
  "mcpServers": {
    "cavalry": {
      "command": "node",
      "args": ["/absolute/path/to/cavalry-mcp/dist/src/index.js"],
      "env": {
        "CAVALRY_MCP_HOST": "127.0.0.1",
        "CAVALRY_MCP_PORT": "8080",
        "CAVALRY_MCP_TIMEOUT_MS": "15000"
      }
    }
  }
}
NOTE

On Windows, escape backslashes in JSON (C:\\Users\\...) or use forward slashes.

Restart your MCP client, then confirm the round-trip:

cavalry_ping  →  { "ok": true, "platform": "Windows" }

Configuration

All configuration is via environment variables, parsed and validated once at startup. Invalid values fail fast with a descriptive error rather than silently falling back.

Variable

Default

Description

CAVALRY_MCP_HOST

127.0.0.1

Bridge host

CAVALRY_MCP_PORT

8080

Bridge port — must match PORT in cavalry-bridge.js

CAVALRY_MCP_TIMEOUT_MS

15000

Per-request timeout

CAVALRY_MCP_ENABLE_RUN_SCRIPT

(unset)

Set to 1 to expose cavalry_run_script. See Security.

Changing the port requires editing both sides — the env var and PORT at the top of cavalry-bridge.js.


Tool Reference

28 tools by default; 29 with cavalry_run_script enabled.

Introspection

Tool

Arguments

Returns

cavalry_ping

{ ok, platform }

cavalry_list_layers

{ layers: [{ id, type, name }] }

cavalry_get_selection

{ selection: string[] }

cavalry_composition_info

{ compId, width, height, startFrame, endFrame, fps, frame }

cavalry_get_attribute

layerId, attrPath

attribute value

cavalry_bounding_box

layerId, worldSpace?

{ x, y, width, height, centre, left, right, top, bottom }

cavalry_list_attributes

layerId, includeValues?

{ layerType, count, attributes: [{ id, type, niceName, animated, children? }] }

cavalry_list_layer_types

includeExperimental?

{ count, layerTypes: string[] }

cavalry_inspect_connections

layerId

{ incoming, outgoing, animated }

TIP

Never guess an attribute path — call cavalry_list_attributes first. Cavalry's docs list attributes by their UI label, not their scripting id, and the two do not reliably match: the documented "Grouping" and "Custom String" on a Shuffle String Manipulator simply do not exist as scripting paths. A wrong path fails silently on write, so guessing produces changes that report success and do nothing.

Likewise, cavalry_create_layer takes a scripting type id, not a display name — "Shuffle String Manipulator" is shuffleString. Use cavalry_list_layer_types rather than inferring it.

Creation

Tool

Arguments

cavalry_create_layer

layerType, name?

cavalry_create_primitive

generator, name?

generatorellipse · rectangle · star · polygon · ring · arrow · superEllipse · line

layerTypetextShape · null · duplicator · stagger · basicShape

TIP

Prefercavalry_create_primitive over create_layer + set_generator — one round-trip instead of two.

Mutation

Tool

Arguments

cavalry_set_attribute

layerId, attributes (map of path → value)

cavalry_set_generator

layerId, generator, attrId? (default "generator")

cavalry_select

layerIds

cavalry_delete_layers

layerIds

cavalry_duplicate

layerIds — restores prior selection afterward

cavalry_parent

childIds, parentId

cavalry_add_dynamic_attribute

layerId, attrName, attrType

cavalry_connect

fromLayerId, fromAttrId, toLayerId, toAttrId, force?

Animation

Tool

Arguments

cavalry_keyframe

layerId, frame, attributes

cavalry_magic_easing

layerId, attrPath, frame, easingType

cavalry_delete_keyframe

layerId, attrPath, frame

cavalry_set_frame

frame

cavalry_play

easingTypeSlowIn · SlowOut · SlowInSlowOut · VerySlowIn · VerySlowOut · SpringIn · SpringOut · BounceIn · BounceOut · Custom · None

WARNING

Magic Easing has noLinear, EaseIn, EaseOut, BackIn, or ElasticIn. The enum is enforced at the schema layer, so invalid names are rejected before reaching Cavalry.

I/O

Tool

Arguments

cavalry_save_scene

filePath? — omit to save in place

cavalry_load_scene

filePath

cavalry_render_png

filePath, frame?, scale? (default 100)

Batch

Tool

Arguments

cavalry_batch

ops: [{ op, args? }]


Attribute Reference

Cavalry's attribute paths are not always guessable, and a wrong path fails silently — the call succeeds, nothing changes. These are the verified ones.

Transform

Path

Type

Notes

position.x / position.y

number

scale.x / scale.y

number

1.0 = 100%. This is how you resize a shape.

rotation.z

number

Degrees. rotation is a 3D vector — always use .z in 2D.

opacity

number

0–100

Appearance

Path

Type

Notes

material.materialColor

string

Hex, "#rrggbb"

generator.dimensions

object

GET only. Returns {x, y}; setting it throws a console error.

Duplicator

Path

Type

Notes

generator.count

number

Distribution point count

generator.radius

number

Circle distribution radius

generator.startAngle / generator.angle

number

Arc control

shapeScale.x / shapeScale.y

number

Per-copy scale

shapeRotation

number

Per-copy rotation

shapeOpacity

number

Per-copy opacity

Text

Path

Type

Notes

text

string

Plain string

fontSize

number

autoWidth

boolean

false by default, which causes wrapping

horizontalAlignment

number

0 left · 1 centre · 2 right

Composition

Path

Type

Notes

resolution.x / resolution.y

number

Read-only

startFrame / endFrame / fps

number

Common pitfalls

Instead of

Use

width, height, size

scale.x / scale.y

fill.color, color, material.color

material.materialColor

rotation

rotation.z

setting generator.dimensions

scale.x / scale.y

Layer IDs

IDs follow typeName#numberbasicShape#1, duplicator#2, textShape#3. Counters increment globally per type and never reset, even after deletion. Always discover them with cavalry_list_layers; never assume.

Sizing worked example

Primitives are created at 200×200. For a 1920×1080 background:

cavalry_create_primitive(generator: "rectangle", name: "BG")
cavalry_set_attribute("basicShape#1", {
  "scale.x": 9.6,          // 1920 / 200
  "scale.y": 5.4,          // 1080 / 200
  "material.materialColor": "#101014"
})

Duplicator worked example

Shapes are connected to a duplicator, not parented to it:

cavalry_create_primitive(generator: "ellipse", name: "Dot")
cavalry_create_layer(layerType: "duplicator", name: "Ring")
cavalry_set_generator("duplicator#1", generator: "circleDistribution")
cavalry_set_attribute("duplicator#1", { "generator.count": 8, "generator.radius": 200 })
cavalry_connect(
  fromLayerId: "basicShape#1", fromAttrId: "id",
  toLayerId:   "duplicator#1", toAttrId:   "shapes"
)
IMPORTANT

The source shape's ownscale does not affect the duplicated copies. Use shapeScale.x / shapeScale.y on the duplicator.


Batching

cavalry_batch collapses a sequence of operations into a single HTTP round-trip. On a multi-step build this is the difference between 20 polls and one.

{
  "ops": [
    { "op": "createPrimitive", "args": { "generator": "ellipse", "name": "Dot" } },
    { "op": "set", "args": { "layerId": "basicShape#1",
                             "attributes": { "scale.x": 0.25, "scale.y": 0.25 } } },
    { "op": "keyframe", "args": { "layerId": "basicShape#1", "frame": 0,
                                  "attributes": { "rotation.z": 0 } } },
    { "op": "keyframe", "args": { "layerId": "basicShape#1", "frame": 250,
                                  "attributes": { "rotation.z": 360 } } }
  ]
}

Supported ops: create · createPrimitive · set · setGenerator · select · delete · duplicate · parent · addDynamic · keyframe · magicEasing · deleteKeyframe · setFrame · play · saveScene · loadScene · renderPng

Two constraints worth internalising:

WARNING

Fail-fast, not atomic. If op 4 fails, ops 1–3 have already been applied. There is no rollback.

WARNING

No ID substitution. IDs created earlier in a batch are not interpolated into later ops. Either predict the sequential IDs, or split the batch and call cavalry_list_layers in between.


Security

Argument injection is closed by construction

Tool arguments are transmitted as JSON data and dispatched by an op string inside Cavalry. They are never concatenated into JavaScript source, so there is no string-escaping boundary to get wrong.

The test suite treats this as a first-class invariant, with dedicated cases for:

  • backtick / template-literal injection

  • double-quote escape and chained calls

  • </script> tag injection

  • U+2028 / U+2029 line-separator injection

cavalry_run_script is opt-in

Setting CAVALRY_MCP_ENABLE_RUN_SCRIPT=1 registers a tool that executes arbitrary JavaScript in Cavalry, bypassing the dispatcher entirely. Cavalry's api namespace includes filesystem and subprocess access, so this grants the model both.

It is off by default, and the server prints a warning to stderr when it is on. Leave it disabled unless you are debugging the bridge itself.

Network exposure

The bridge binds to 127.0.0.1 and performs no authentication — any local process can drive it while it is running. Do not bind it to a routable interface, and stop it when you are not using it.


Troubleshooting

[transport] Cannot reach cavalry-mcp bridge at http://127.0.0.1:8080

The bridge isn't running. Cavalry being open is not sufficient — run Window > Scripts > cavalry-bridge. Confirm the port is live:

# Windows
netstat -ano | findstr :8080
# macOS
lsof -i :8080

Remember the bridge dies with the Cavalry session.

[frozen] Cavalry accepted the request but never processed it

Cavalry pauses script callbacks whenever it is not the active application, so the bridge stops draining its queue the moment you switch to another window. Bring Cavalry to the front — the backlog runs on refocus and nothing is lost.

This is a Cavalry-level gate, not a tuning problem. Measured: 15/15 requests fail over 81s while backgrounded, 15/15 succeed focused. setRealtime() (60/s), setHighFrequency() (1/s) and the default (3/s) are the same poll driver at three intervals, and all three are equally paused — so changing the rate does nothing. Keep Cavalry frontmost for the duration of an agent-driven session.

Tools don't appear in the client

Restart the MCP client after editing its config. Check that args points at dist/src/index.js — note the src segment, which follows from rootDir: "." in tsconfig.json. Run npm run build if dist/ is missing.

An attribute set reports success but nothing changes

The path is almost certainly wrong — Cavalry does not error on unknown paths. Read it back with cavalry_get_attribute, cross-check the Attribute Reference, and verify visually with cavalry_bounding_box or cavalry_render_png.

[envelope] No envelope tags found in response

The bridge returned output without a complete sentinel pair — usually a stale or partially-pasted bridge script. Re-copy cavalry-bridge.js and re-run it.

Requests time out under load

Heavy renders can exceed the default 15 s. Raise CAVALRY_MCP_TIMEOUT_MS.


Development

npm install       # install dependencies
npm run build     # tsc → dist/
npm test          # 18 unit tests, no live Cavalry needed
npm start         # run the server standalone

Layout

src/
├── index.ts              # server entry — tool registration
├── config.ts             # env parsing, validated at import
├── errors.ts             # CavalryError taxonomy
├── helpers.ts            # dispatch + MCP result shaping
├── bridge/
│   ├── dispatch.ts       # payload construction
│   ├── dispatcher-source.ts
│   └── envelope.ts       # sentinel-tag parser
├── transport/
│   └── bridge.ts         # POST-then-poll HTTP client
└── tools/
    ├── introspection.ts  creation.ts  mutation.ts
    ├── animation.ts      io.ts        batch.ts
    └── run-script.ts     # gated behind env flag

cavalry-bridge.js         # runs inside Cavalry
test/test.ts              # dispatcher, envelope, injection, protocol

Adding a tool

  1. Add the op branch to dispatch() in cavalry-bridge.js.

  2. Register the tool with a Zod schema in the matching src/tools/*.ts.

  3. If it should be batchable, add the op name to the enum in src/tools/batch.ts.

  4. Cover the routing in test/test.ts.

The build output must stay in sync with the bridge — after editing cavalry-bridge.js, re-copy it to the Scripts folder and re-run it in Cavalry.

Available Tools

28 tools
cavalry_add_dynamic_attributeC

Add a dynamic attribute to a layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYesLayer ID
attrNameYesAttribute name
attrTypeYesAttribute type

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must fully disclose behavior. Only states the action but omits effects (e.g., does it overwrite existing attribute? is it reversible?), no return value, and no details on what 'dynamic attribute' means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no redundancy. Could include more detail without sacrificing conciseness, but current state is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, no behavioral details, and many sibling tools. The description is too minimal for an agent to use effectively without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and describes each parameter. Description adds no extra meaning beyond schema, which is adequate for a simple tool. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Add' and resource 'dynamic attribute to a layer'. It distinguishes from sibling tools like 'set_attribute' which likely modifies existing attributes, but 'dynamic' is not explained.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Does not mention prerequisites (e.g., layer must exist) or limitations. With many sibling tools, explicit usage context is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_batchA

Run a sequence of operations in one HTTP round-trip (fail-fast, not atomic). Layer IDs from earlier creates are NOT auto-substituted — predict sequential IDs or split into multiple batches.

ParametersJSON Schema
NameRequiredDescriptionDefault
opsYesOrdered list of operations

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility. It discloses fail-fast (non-atomic) execution and warns about ID substitution, which are critical behavioral traits. It doesn't detail error handling or rollback, but the 'fail-fast' implies no rollback.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the key purpose and critical behavioral constraints (fail-fast, no auto-substitution). Every word is purposeful; no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with high schema coverage and no output schema, the description provides essential behavioral context. It doesn't need to explain return values per guidelines. A minor gap is lack of mention of maximum batch size or performance implications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully defines the 'ops' parameter structure. The description adds value by explaining how IDs are not auto-substituted, but this is about behavior, not parameter meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs a sequence of operations in one round-trip, with fail-fast (non-atomic) behavior, and distinctively warns about layer ID substitution. This differentiates it from sibling tools that perform single operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells when to use (batching multiple operations) and when not (if need atomicity or auto-substitution), and suggests splitting into multiple batches if needed. No alternative tool is named, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_bounding_boxA

Get bounding box of a layer. Returns {x, y, width, height, centre, left, right, top, bottom}.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYesLayer ID
worldSpaceNoUse world space coordinates

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It correctly describes the read-only, non-destructive nature of the operation, but does not add any additional behavioral context such as coordinate system details or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, no unnecessary words, and the key action is front-loaded. Every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple getter tool, the description covers the essential behavior and return structure. It lacks mention of error cases or coordinate system details, but overall it is adequate given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add parameter-specific meaning beyond what the schema already provides, but no additional clarification is necessary given the simplicity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'bounding box of a layer', distinguishing it from sibling tools that perform different operations. It also lists the returned fields, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., other inspection tools like cavalry_get_attribute). There is no context on prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_composition_infoB

Get composition resolution, frame range, and FPS.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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 only states 'Get', implying a read-only operation, but does not disclose any behavioral traits like side effects, required permissions, or rate limits. Minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and no output schema, the description covers the key return values (resolution, frame range, FPS). It is adequate for a simple info tool, though specifying return format would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (schema coverage 100% with an empty schema). The description does not need to add parameter info. Baseline 4 for zero parameters is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves composition resolution, frame range, and FPS. The verb 'Get' is specific. However, it does not differentiate from siblings like cavalry_list_layers or cavalry_get_attribute, though the scope is distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as when to prefer cavalry_list_layers or cavalry_get_attribute. No when-to-use or when-not-to-use information is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_connectA

Connect one layer's attribute output to another layer's attribute input. Used for procedural/data-driven workflows (e.g. connecting a shape to a duplicator's 'shapes' input, or a noise layer's output to a position attribute).

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce the connection even if types don't match
toAttrIdYesTarget attribute ID (e.g. 'shapes' on a duplicator)
toLayerIdYesTarget layer ID
fromAttrIdYesSource attribute ID (e.g. 'id' for shape output)
fromLayerIdYesSource layer ID

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavioral traits. It mentions connecting and the `force` parameter but does not state whether connections are destructive, whether permissions are needed, or what happens to existing connections. This is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences efficiently convey the purpose and examples with no unnecessary words. The information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters, no output schema, and no annotations, the description covers the basic purpose but omits details like return value, side effects, or prerequisites. It is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description adds value by providing concrete examples for `fromAttrId` and `toAttrId` ('id' and 'shapes'), giving semantic context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Connect one layer's attribute output to another layer's attribute input') and provides specific examples (shape to duplicator, noise to position), distinguishing it from sibling tools like cavalry_set_attribute or cavalry_parent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it's for procedural/data-driven workflows and gives concrete examples, but does not mention when not to use it or what alternatives exist (e.g., cavalry_inspect_connections for inspecting connections).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_create_layerB

Create a layer by type ID (textShape, null, colorPlane, subMesh, stagger, duplicator, …).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name for the new layer
layerTypeYesCavalry layer type ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist. Description mentions 'Create' implying mutation but lacks details on side effects, required permissions, or behavior after creation (e.g., selection changes).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with ellipsis, no unnecessary words. Could be slightly improved by front-loading the main action, but effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with 2 params and no output schema, the description is sufficient but minimal. Lacks information on the result of creation, selection state, or error conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides 100% coverage with descriptions. Description adds example type IDs ('textShape, null, colorPlane, ...'), adding value beyond schema. However, no constraints or valid values for 'layerType' beyond examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Create' and the resource 'layer by type ID', with example types. It distinguishes from sibling creation tools by specifying 'by type ID', but not fully differentiating from 'cavalry_create_primitive'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like 'cavalry_create_primitive' or 'cavalry_duplicate'. No prerequisites or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_create_primitiveA

Create a basicShape with a generator pre-attached. Prefer this over create_layer + set_generator for primitives.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name for the new shape
generatorYesPrimitive generator type

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It correctly indicates a creation/mutation action but does not disclose side effects (e.g., whether the shape is selected, returned, or if permissions are needed). The description is adequate but lacks details about return behavior, which is expected for a creation tool without output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long with no filler. The first sentence states the core action, the second provides crucial guidance. Every word earns its place, and the structure makes it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description covers the essential context: what it creates and why to prefer it over the alternative. It does not mention the return value (e.g., shape ID) or selection state, which would improve completeness. However, for a relatively simple tool with well-described parameters, it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (both 'name' and 'generator' have descriptions). The description adds no additional detail beyond the schema, meeting the baseline. It does not enhance or contradict the schema, so a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a basicShape with a pre-attached generator, using specific verb ('create') and resource ('basicShape'). It also distinguishes from the alternative two-step process (create_layer + set_generator), which directly differentiates from siblings like 'cavalry_create_layer' and 'cavalry_set_generator'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides a preference directive: 'Prefer this over create_layer + set_generator for primitives.' This tells the agent exactly when to use this tool versus the alternative, offering clear usage guidance without ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_delete_keyframeB

Delete a keyframe at a specific frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameYesFrame number
layerIdYesLayer ID
attrPathYesAttribute path

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description does not disclose behavioral traits such as destructiveness, error behavior if keyframe doesn't exist, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no waste. It is appropriately sized and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deletion tool with no output schema and no annotations, the description is too minimal. It lacks information about result/confirmation, error cases, or behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description adds no extra meaning beyond parameter names and basic descriptions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'delete', resource 'keyframe', and context 'at a specific frame'. It distinguishes from sibling tools like cavalry_keyframe and cavalry_set_attribute.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. No mention of prerequisites, context, or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_delete_layersC

Delete layers by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdsYesLayer IDs to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; the description only says 'Delete' without disclosing irreversibility, error handling, or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no extraneous words, perfectly concise for the simple operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing critical context for a delete operation, such as whether deletion is permanent, undo capabilities, or behavior with invalid IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the only parameter 'layerIds', so the description adds no extra value; baseline is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Delete layers by ID' clearly states the verb and resource, but does not explicitly distinguish from sibling tools like cavalry_delete_keyframe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives or any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_duplicateB

Duplicate layers. Restores the prior selection afterward.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdsYesLayer IDs to duplicate

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Only one behavioral trait is disclosed: selection restoration after duplication. With no annotations present, the description should cover more details like error conditions, permissions, or placement of duplicates, which are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short sentences. No unnecessary words, and the behavioral note is added efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and no output schema, the description is adequate but could improve by stating what the tool returns (e.g., duplicated layer IDs) or any side effects beyond selection restoration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with parameter documentation, so baseline is 3. The description adds no extra meaning beyond the schema; 'Layer IDs to duplicate' is already stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Duplicate layers' uses a specific verb and resource, clearly indicating the action. It is easily distinguished from sibling tools like cavalry_delete_layers or cavalry_create_layer. The additional note about restoring selection further clarifies behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., cavalry_create_layer for new layers). There is no mention of prerequisites or 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.

cavalry_get_attributeB

Read an attribute value from a layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYesLayer ID (e.g. 'textShape#1')
attrPathYesAttribute path (e.g. 'position.x', 'fontSize')

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavioral traits. It implies read-only access, but does not mention error conditions (e.g., missing attribute), return format, or whether it returns a single value or an object. This leaves ambiguity for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single succinct sentence that front-loads the core action. It is efficient, though it could include a slight bit more context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description should clarify what is returned. It does not mention return type, structure, or handling of edge cases (e.g., missing attribute). This leaves significant information gaps for a simple read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both layerId and attrPath providing examples. The description does not add additional meaning beyond the schema, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Describes the action as 'Read an attribute value from a layer,' clearly indicating the verb (read) and the resource (attribute value from a layer). This distinguishes it from sibling tools like cavalry_set_attribute (write) and cavalry_list_attributes (list all).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as cavalry_list_attributes or cavalry_set_attribute. The description only states the action without any contextual usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_get_selectionA

Get the current layer selection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It only states the action without disclosing side effects, authentication needs, or what 'selection' means. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and a straightforward purpose, the description is adequate. It could hint at the return format, but the tool's simplicity makes this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the description does not need to add meaning beyond the schema. The schema coverage is 100% (empty). Baseline for 0 parameters is 4, and the description meets this.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get the current layer selection' clearly states the action (Get) and the resource (layer selection). It distinguishes itself from sibling tools like cavalry_select which likely sets the selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or alternatives is provided. However, for a simple getter, the usage is implicitly clear; no exclusions or context are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_inspect_connectionsA

List a layer's incoming and outgoing attribute connections, plus its animated attributes. Use this to confirm a cavalry_connect actually landed and to discover which input a node type expects.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYesLayer ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It describes a read-only operation with no mention of side effects or permissions. Adequate for a simple inspection tool, but not detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one param, no output schema), the description covers purpose and usage. Lacks return value details but adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (layerId) with 100% schema coverage. The description adds no extra meaning beyond the schema's 'Layer ID'. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resources ('incoming and outgoing attribute connections, plus animated attributes'). It distinguishes from siblings like cavalry_connect (creates connections) and cavalry_list_attributes (lists all attributes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides use cases: 'confirm a cavalry_connect actually landed' and 'discover which input a node type expects'. No explicit exclusion of when not to use, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_keyframeB

Set keyframes on one or more attributes at a given frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameYesFrame number
layerIdYesLayer ID
attributesYesMap of attribute paths to values (e.g. {"position.y": -500})

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior fully. It does not mention whether keyframes are added to existing ones, overwritten, or if the layer must exist. Important side effects and prerequisites are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence that is front-loaded. It is concise but lacks necessary detail for behavior and usage, so the conciseness comes at a cost of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should provide more context about what happens when keyframes are set (e.g., overwrite vs. additive). It is too minimal for an agent to use correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add meaning beyond the schema. The schema already describes frame, layerId, and attributes with an example. The description says 'one or more attributes' which aligns with the map type, but adds no extra semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sets keyframes on one or more attributes at a given frame. It uses a specific verb+resource structure and distinguishes from siblings like set_attribute (which sets values without keyframing) and delete_keyframe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives, such as set_attribute for non-keyframed changes or delete_keyframe for removal. The description provides no context for usage conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_list_attributesA

List every attribute on a layer with its type, nice name, children and animated flag. Use this INSTEAD of guessing attribute paths — attribute names are not derivable from the UI labels in Cavalry's docs, and a wrong path fails silently on write.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYesLayer ID (e.g. 'textShape#1')
includeValuesNoAlso read each attribute's current value (slower)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavioral traits. It implies read-only behavior but does not explicitly state it. The warning about silent failures on write is useful but relates to other tools, not this tool's own behavior. An explicit 'read-only' statement would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first states the tool's core function, the second provides essential usage advice. No wasted words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description provides a reasonable summary of return values (attribute properties). It also explains the includeValues parameter's effect. Could optionally mention whether the result is a flat list or nested, but not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters with descriptions (100% coverage). The description adds semantic context by explaining what attributes are returned (type, nice name, children, animated flag), which is not in the schema. This helps the agent understand the output meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it lists attributes on a layer with specific properties (type, nice name, children, animated flag). While it distinguishes from guessing paths, it doesn't explicitly contrast with sibling tools like cavalry_get_attribute, though the verb 'list' vs 'get' is implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this tool instead of guessing attribute paths, with a concrete justification (attribute names not derivable from UI labels, silent failure on write). Provides clear when-to-use guidance but lacks when-not-to-use or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_list_layersA

List every layer as {id, type, name}.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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 accurately describes a non-destructive read operation but lacks details on scope (e.g., whether hidden layers are included) or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no fluff, perfectly sized for the tool's simplicity. Every word is necessary and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and zero parameters, the description fully captures the tool's behavior. It specifies what is returned (id, type, name) and that it includes all layers, leaving no gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist (0 params, schema coverage 100%), so the description needs no parameter-specific information. Baseline score of 4 is appropriate as it adds no more value than what the schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and resource 'every layer' with explicit output format '{id, type, name}', clearly distinguishing it from siblings like 'cavalry_list_attributes' or 'cavalry_list_layer_types'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or avoid this tool. The context implies it's the standard way to list all layers, but no alternatives or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_list_layer_typesA

List every creatable layer type ID. These are the scripting IDs accepted by cavalry_create_layer, which differ from the display names in Cavalry's UI and docs (e.g. 'Shuffle String Manipulator' is created as 'shuffleString').

ParametersJSON Schema
NameRequiredDescriptionDefault
includeExperimentalNoInclude experimental types

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains that IDs differ from display names, but lacks details on output format or behavior of the includeExperimental parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose, followed by clarifying context. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and one parameter, the description adequately covers the key nuance (scripting IDs vs. display names). Could optionally mention output format but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add additional meaning beyond the schema for 'includeExperimental'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists creatable layer type IDs, specifically for use with cavalry_create_layer, and distinguishes the scripting IDs from display names with an example.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that these IDs are for cavalry_create_layer, with an example, but does not explicitly state when to use this tool vs. alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_load_sceneC

Load a scene from disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to the .cv file to load

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It states only 'Load a scene from disk' without disclosing that loading typically overwrites the current scene, whether it is destructive, or any error handling. The behavioral implications are left implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a single sentence. However, it could be slightly expanded to include key details (like file extension or destructive nature) without losing conciseness. Still, it is not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description is minimally complete. However, it fails to mention that loading a scene replaces the current one, which is a key context for an AI agent deciding to use this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter filePath is well-described in the schema. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (load) and resource (scene from disk). The purpose is immediately understood, though it does not distinguish from potential sibling tools that might also load (none directly, but it is clear enough). Not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like cavalry_save_scene or other loading-related operations. There is no mention of prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_magic_easingA

Apply a Magic Easing preset to a keyframe. Linear is NOT a valid Magic Easing preset.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameYesFrame number of the keyframe
layerIdYesLayer ID
attrPathYesAttribute path
easingTypeYesMagic Easing preset name

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. Only states the action; no disclosure of side effects (e.g., overwriting existing easing) or behavior on missing keyframe. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no redundancy. The core action and a key constraint are front-loaded. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple tool with 4 required parameters and no output schema. However, lacks explanation of what Magic Easing presets are or prerequisites (e.g., keyframe existence). Could be more complete for a user unfamiliar with the domain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explicitly warning that Linear is not a valid preset, which complements the enum list. This clarification compensates for the otherwise redundant schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('Apply a Magic Easing preset') and target ('keyframe'). The name is specific and distinct from sibling tools like cavalry_keyframe. Includes a critical exclusion ('Linear is NOT valid'), enhancing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The negative statement about Linear is helpful but does not provide usage context or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_parentC

Parent one or more layers to a target parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
childIdsYesLayer IDs to re-parent
parentIdYesTarget parent layer ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full burden. It states the action but omits behavioral details like whether existing parents are replaced, error cases (e.g., child cyclic reference), or ordering of operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no wasteful words. While efficient, it may be too brief to provide context, but it earns a 4 for lack of fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters and no output schema, the description is minimally complete. It doesn't explain return values or side effects, leaving gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters (childIds, parentId) with descriptions. The description adds no further meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'parent' and the resource 'layers', indicating the action changes layer hierarchy. It distinguishes from siblings like cavalry_connect or cavalry_set_generator by specifying a unique action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, no prerequisites, and no mention of when not to use it (e.g., if child already has a parent).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_pingA

Verify the Cavalry bridge and dispatcher are reachable. Returns the host platform.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries the full burden. It accurately describes the tool as a check that returns host platform info, implying no side effects. This is sufficient for a simple ping tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no unnecessary words. Every sentence adds value: states the action and the return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description fully covers the tool's purpose and output. It is complete for a simple connectivity check.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. The description adds no extra parameter info, but none is needed. Baseline 4 for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool verifies connectivity ('Verify the Cavalry bridge and dispatcher are reachable') and returns the host platform. It distinguishes itself from siblings like cavalry_set_generator or cavalry_select, which perform other operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use before other Cavalry operations to check connectivity. No explicit when-not or alternatives are provided, but the tool's name and description make its purpose obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_playC

Start playback.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It only says 'Start playback.' with no details on what happens (e.g., does it reset to start? Is it reversible? What state changes occur?). This is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While extremely concise (two words), the description is under-specified. It sacrifices necessary context for brevity, failing to earn its place by providing complete information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should explain the tool's effect more thoroughly. It is incomplete for an agent to understand what 'playback' means or what outcome to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters in the schema, so the description does not need to add parameter details. The baseline for zero parameters is 4, and the description does not contradict or mislead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Start playback.' uses a specific verb and resource, clearly distinguishing it from sibling tools like cavalry_set_generator or cavalry_create_layer. However, it is minimal and could specify what exactly starts playing (e.g., current composition).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives, such as prerequisites (e.g., scene must be loaded) or context (e.g., after setting keyframes). The agent is left guessing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_render_pngB

Render the current frame (or a specific frame) to a PNG file.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameNoFrame to render (defaults to current frame)
scaleNoScale percentage (default 100)
filePathYesOutput PNG file path

TDQS

B3.4/5.0
Behavior2/5

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 only states that it renders to PNG, but does not disclose potential side effects like file overwriting, required permissions, blocking behavior, or performance impact. This is insufficient for a file-writing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no redundancy. It is well front-loaded but could benefit from a brief additional context without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple render tool with well-documented parameters and no output schema, the description covers the basic purpose. However, missing behavioral details (e.g., file overwrite policy, absolute vs relative paths) reduce completeness for practical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema; it merely paraphrases the frame parameter behavior. It does not provide format details, constraints, or usage tips for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool renders a frame (current or specific) to a PNG file. It uses a specific verb-resource pair and distinguishes from sibling tools, which lack alternative render functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or when not to use this tool. Usage is implied by its name and description, but there are no mentions of prerequisites, alternatives, or context where it is inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_save_sceneA

Save the current scene. Pass filePath for Save As.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathNoFile path for Save As (omit to save in place)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavior. It states the core function but omits details like overwriting behavior or required permissions, which are typical for save operations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no wasted words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple save tool with one optional parameter and no output schema, the description is nearly complete. It could mention overwriting behavior, but overall it suffices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds minimal extra meaning beyond the schema's description. The phrase 'Pass filePath for Save As' clarifies usage but is essentially redundant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool saves the current scene, with optional Save As functionality via filePath. It distinguishes itself from sibling tools like cavalry_load_scene.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use filePath (Save As) but does not explicitly state when not to use it or provide alternatives. Context is clear for a save operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_selectB

Set the current selection to the given layer IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdsYesLayer IDs to select

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description does not disclose behavioral traits like whether selection is replaced or appended, error handling, or side effects. Full burden on description but insufficient detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, clear and front-loaded. No wasted words, but slightly too brief for full clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema. Description fails to explain replacement behavior, handling of invalid IDs, or relationship with other selection methods. Incomplete for a selection tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%. Description adds no extra meaning beyond the schema's 'Layer IDs to select'. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Set' and the resource 'current selection to given layer IDs'. It differentiates from siblings like cavalry_get_selection and cavalry_list_layers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives (e.g., should it be called after listing layers?). Missing context about prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_set_attributeC

Set one or more attributes on a layer in a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYesLayer ID
attributesYesMap of attribute paths to values (e.g. {"fontSize": 120, "position.x": 100})

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries full burden. It does not disclose whether the operation overwrites or merges attributes, error handling for invalid layer IDs, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that communicates the core purpose with no superfluous words. However, it could be slightly more informative while remaining concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should hint at return value or success indicators. It does not address completeness for a mutation tool with many sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters described adequately. The description adds no extra meaning beyond stating it sets attributes, which is already clear from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool sets attributes on a layer, with a single call. It distinguishes from siblings like cavalry_set_generator and cavalry_add_dynamic_attribute, though it does not explicitly contrast them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like cavalry_set_generator or cavalry_add_dynamic_attribute. No prerequisites or usage context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_set_frameB

Set the playhead to a specific frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameYesFrame number

TDQS

B3.4/5.0
Behavior2/5

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 only states the action without disclosing side effects, state changes, or safety implications. For a simple positioning action, this is minimal but still insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys the core action without any extraneous information. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description is mostly complete. However, it lacks details on valid frame range or behavior when the frame is out of bounds, which could be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the parameter 'frame' described as 'Frame number'. The description adds no additional meaning beyond the schema, earning the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Set' and the resource 'playhead', explicitly indicating the action of moving to a specific frame. It distinguishes this tool from siblings like cavalry_play (playback) and cavalry_keyframe (adding keyframes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. For example, there is no mention of prerequisites like having a scene loaded, or comparison with similar tools such as cavalry_play for sequential navigation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cavalry_set_generatorC

Set the generator on a layer.

ParametersJSON Schema
NameRequiredDescriptionDefault
attrIdNoGenerator attribute ID (defaults to 'generator')generator
layerIdYesLayer ID
generatorYesGenerator type name (e.g. 'ellipse', 'rectangle')

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It only states 'set' which implies mutation, but does not disclose side effects, permissions, or what happens on success/failure. No information about attribute default or non-required parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence. It is front-loaded with the core action. However, it omits important context that could be conveyed without adding much length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no output schema), the description is insufficient. It does not explain what the generator type means, what happens after setting, or return behavior. The sibling tools suggest this is part of a larger creative tool, and more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 3 parameters. The description adds no additional meaning beyond what the schema already provides, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Set the generator on a layer' clearly identifies the action (set) and target (generator on a layer). However, it lacks specificity about what a generator is in this context and does not distinguish from sibling tool cavalry_set_attribute, which could be used for similar purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like cavalry_set_attribute or cavalry_create_primitive. No exclusions or prerequisites are mentioned, leaving the agent without contextual cues for selection.

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.

  1. 28 tool updatesv2.0.0
    • First observedcavalry_add_dynamic_attribute
    • First observedcavalry_batch
    • First observedcavalry_bounding_box
    • First observedcavalry_composition_info
    • First observedcavalry_connect
    • First observedcavalry_create_layer
    • First observedcavalry_create_primitive
    • First observedcavalry_delete_keyframe
    • First observedcavalry_delete_layers
    • First observedcavalry_duplicate
    • First observedcavalry_get_attribute
    • First observedcavalry_get_selection
    • First observedcavalry_inspect_connections
    • First observedcavalry_keyframe
    • First observedcavalry_list_attributes
    • First observedcavalry_list_layer_types
    • First observedcavalry_list_layers
    • First observedcavalry_load_scene
    • First observedcavalry_magic_easing
    • First observedcavalry_parent
    • First observedcavalry_ping
    • First observedcavalry_play
    • First observedcavalry_render_png
    • First observedcavalry_save_scene
    • First observedcavalry_select
    • First observedcavalry_set_attribute
    • First observedcavalry_set_frame
    • First observedcavalry_set_generator

TDQS

B3.4/5.0

Scored across 28 tools

Disambiguation5/5

The tools cover distinct operations such as layer manipulation, attribute management, keyframing, and rendering. Each tool has a clear, unique purpose with no overlapping functions, and descriptions further clarify any potential confusion.

Naming Consistency5/5

All tools follow a consistent 'cavalry_verb_noun' naming convention using snake_case. This pattern is uniform across the entire set, making it easy to predict tool names and understand their roles.

Tool Count4/5

With 28 tools, the server covers a broad range of functionality for an animation tool. While slightly on the higher side, each tool serves a specific purpose and the count is justified by the complexity of the domain.

Completeness4/5

The server includes tools for creation, deletion, duplication, parenting, attributes, keyframing, animation control, rendering, and inspection. Minor gaps like a stop playback tool are present, but overall coverage is robust and supports most workflows.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers