rive-mcp
This server provides a comprehensive suite of tools to create, edit, inspect, render, and live-preview Rive (.riv) animations without needing the Rive editor or cloud services. Key capabilities include:
File Discovery & Inspection: List .riv files, inspect metadata (artboards, animations, state machines, data binding), dump binary structure, and diff files structurally.
Creation & Editing: Build .riv files from JSON scene specs (shapes, gradients, text, bones, IK, mesh deformation, keyframe animations, state machines, physics, audio, 28 motion presets). Losslessly edit properties, text, keyframes; optimize by removing unused objects and thinning keyframes; generate design tokens (palette, motion, spacing).
Asset Import & Conversion: Import SVGs as Rive bezier shapes, search Iconify icons, import Lottie/bodymovin JSON, decompile existing .riv into editable scene specs, extract embedded assets (images, fonts, audio).
Rendering & Export: Render single frames to PNG, animations to GIF, APNG (with alpha), WebM, or sprite sheets (with JSON metadata). Batch render for CI; perform pixel-level visual diffs and side-by-side A/B comparisons.
State Machine & Code: Drive state machines interactively (set inputs, advance time, capture frames); generate integration code for React, Vue, Svelte, plain JS, and Flutter using real artboard/state machine names.
Quality & Review: Critique animations with filmstrips, onion-skin overlays, motion vectors, objective metrics, and a 7-axis scoring checklist; lint files for structural and motion-quality issues.
Character Animation: Slice character PNGs for cutout rigging; auto-rig a single PNG into a fully rigged .riv with bone-skinned head, eye blinks, idle/happy animations, and state machine.
Studio & Collaboration: Launch a local web Studio with hierarchy tree, canvas, inspector, timeline/dope sheet, bezier curve editor, state machine graph, onion skin, and one-click export. Two-way Agent chat lets humans post feedback and AI replies with changes that hot-reload. Install the design-guidelines skill for automated workflows.
Generates Flutter integration code for Rive animations, including artboard, state machine, and input names.
Generates React integration code for Rive animations, including artboard, state machine, and input names.
Allows creating, editing, inspecting, rendering, and live-previewing Rive (.riv) animations, including generating .riv from JSON, lossless editing, auto-rigging characters, and a local Studio for human-AI collaboration.
Generates Svelte integration code for Rive animations, including artboard, state machine, and input names.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rive-mcpcreate a bouncing ball .riv file"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rive-mcp
Create, edit, inspect, render and live-preview Rive (.riv) animations from Claude — no Rive editor, no cloud, no subscription.
rive-mcp is a free MCP (Model Context Protocol) server that gives Claude (or any MCP client) full control over .riv files. Unlike the official Rive MCP (which requires the editor running) or paid third-party servers, it works with nothing but a .riv file — and it can even build .riv files from scratch by serializing the binary format directly.
Rendering runs the official Rive runtime (@rive-app/canvas-advanced WASM) inside headless Chromium, so what you see is exactly what ships.

Highlights
Generate
.rivfrom JSON — shapes, gradients, embedded PNGs, text, bones + skinning, IK, mesh deformation, keyframe animation with easing, multi-layer state machines, listeners, events, physics baking, particles, embedded audio (WAV/MP3/FLAC) fired from the timeline or a state machinePro-quality by construction — 28 semantic motion presets (
pop-in, staggeredrise-in,breathing,stagger-in,parallax-drift,shimmer, …) with professionally tuned amplitudes/easings, an OKLCH design-token generator (riv_design_tokens), motion-quality lint rules (robotic linear movement, teleports, missing stagger), and a one-call critique loop (riv_critique: frames + objective metrics + scoring checklist)Real vector art pipeline — import SVG (Figma/Illustrator/Iconify, or npm SVG sets like
@twemoji/svgwhen offline) as true bezier paths (riv_import_svg,riv_asset_search), decompile existing.rivfiles into editable specs including gradients, blend modes and hand-tuned animation tracks (riv_decompile), plus trim paths (draw-on), clipping masks, blend modes (multiplyshadows,screenglows), follow-path motion, solos and detached bezier handles in the scene specLosslessly edit existing
.riv— change any property, swap text, delete subtrees (references auto-remapped); round-trip verified pixel-perfectLocal web Studio — Rive-editor-style 3-pane UI (hierarchy / canvas with click-select & drag / inspector / timeline) with hot reload; edits apply live. Also includes a bezier curve editor for hand-tuning keyframe easing (drag control points, hold/linear/cubic switching, 10 one-click presets), a state machine graph view (node graph of layers/states/transitions with lint findings and live-playback state highlighting), and an onion skin overlay (0-5 surrounding frames) for checking motion at a glance
Studio keeps growing — drag-and-drop image replacement for embedded assets (lossless swap), multi-artboard tabs, named snapshot save/restore/delete, dope-sheet marquee/Shift-click multi-select with grouped drag and Ctrl+C/V copy-paste, and a bone overlay with FK drag-to-pose that bakes straight to a keyframe
Human ⇄ AI loop — a two-way Agent chat in the Studio: you type feedback (with the current selection/artboard/animation/time attached), the AI picks it up via
riv_studio_notes, fixes the file, and replies into the same thread; your browser updates instantlyAuto-rig characters — one call turns a character PNG into a rigged
.rivwith cutout parts, bone-skinned head mesh, eye blink, idle/happy animations and a state machineData binding & pipeline tooling —
riv_inspectdecodes ViewModel definitions, instances (with resolved values), enums, converters and bind wiring — data binding inspection that few tools support yet;riv_batch_renderexports many files × formats in one glob-aware call for CI, andriv_ab_comparecomposites two files side by side into one labeled GIF/APNG for design reviewEverything verified — generated files are loaded, rendered and state-machine-driven by the official runtime in E2E tests
Related MCP server: rive-analyzer
Tools (32)
Tool | What it does |
| Recursively find |
| Full metadata: artboards, animations (duration/fps/loop), state machines and inputs, plus data-binding structure (ViewModel definitions, instances with resolved values, enums, converters, bind wiring) when the file uses it |
| Static diagnostic: broken references, oversized embedded assets, unreachable state-machine states, unconditional self-transitions (infinite-loop risk), unused inputs, easing silently discarded on a track's last keyframe, motion-quality rules (all-linear "robotic" movement, teleporting objects, missing stagger, one-sided scale) |
| Render any moment to PNG (inline image + file) |
| Turn an animation into a preview GIF |
| Animated PNG export — 24-bit color + alpha transparency (plays on GitHub) |
| Record an animation or state machine to WebM video |
| Sprite-sheet PNG + JSON metadata (for game engines) |
| Render a list of jobs — single files or globs — to png/gif/apng/webm/sprites in one call; per-job error isolation and a timing report, built for CI |
| Set/fire inputs → advance → state-transition report (+ optional frame captures) |
| Integration code with real artboard/SM/input names (React / JS / Vue / Svelte / Flutter) |
| Build a |
| Generate design tokens before designing: OKLCH-harmonized palette (+WCAG contrast), gradient pairs, Material-Motion durations & easing roles, spacing/radius/type scales — deterministic from seed color + mood |
| SVG → Rive bezier shapes (Figma/Illustrator exports, icons, illustrations): full cubic vertices, multi-contour paths, gradients, strokes, nested transforms — so the AI composes pro artwork instead of drawing with primitives. Fragments plug into riv_create via |
| Search Iconify's ~200k professionally designed icons and import one directly as Rive shapes (needs network) |
| Lottie/bodymovin JSON → Rive scene fragment — pulls in LottieFiles' huge library of free professionally-animated assets art and choreography: keyframed transforms with exact bezier easing curves (not preset-approximated), path morphing (per-vertex keyframes), shape/null/precomp layers, gradients, trim-path draw-on, visibility windows. Unsupported bits (text layers, masks, mattes, …) are counted, not silently dropped |
| .riv → editable scene spec: study or remix professional files (bezier paths, gradients, solos, trim paths, animations with named easings); unsupported types are counted, not silently dropped |
| One-call review bundle that makes motion visible to a VLM: a filmstrip (frames left→right), an onion-skin overlay (motion trails), a motion report (net displacement vector per animated object), objective metrics (bezier ratio, palette flags, easing distribution) + lint findings + a fixed 7-axis scoring checklist incl. spatial/directional coherence (does each mover travel toward its artwork's front? is the perspective consistent?) |
| Lossless editing of existing |
| Shrink a |
| Extract embedded images/fonts from a |
| Pixel diff of two |
| Render two |
| Low-level binary structure dump (typeKeys / properties / hierarchy) |
| Cut character parts out of a PNG by polygon (for cutout rigging) |
| Character PNG → fully rigged |
| Structural diff between two |
| Local web Studio: Rive-editor-style dark UI — hierarchy tree, canvas select/drag/resize, inspector, keyframe timeline editing, bezier curve editor (drag control points, hold/linear/cubic, 10 easing presets), state machine graph view (node graph, transition details, lint-highlighted states, live playback highlighting), onion skin overlay, undo/redo, playback speed, one-click export (PNG/APNG/GIF/WebM), live preview + hot reload, EN/JA |
| Read the Studio's Agent chat (with auto-attached context: selection, artboard, animation, playback time) and post replies back into it |
| Read a UI screenshot — or, with |
| Screenshot → animated |
| One-call environment setup: installs the bundled |
Screenshot → animated prototype

riv_ui_detect reads a UI screenshot into an element tree with a numbered
overlay; assign a role to each element and riv_ui_prototype writes a working
.riv. Panels come back as editable vector rectangles, pictures as image slices,
and text is cut out with a real alpha matte where the colour model holds — where
it does not, the element fades in place instead of moving, and says so. The
detector's limits are measured rather than asserted: see
docs/ui-screenshot-to-prototype.md.
If you still have the vector source, pass svgPath instead of imagePath to
the same two tools — Figma's right-click → Copy as SVG, or any Illustrator
export. Nothing is estimated then: rectangles, fills, corner radii and the
parent/child tree are read out of the file, artwork keeps its real bezier
vertices, <text> becomes editable Rive text (pass fonts for the design's own
faces; a run whose glyphs are missing is baked as a picture rather than as tofu,
always with a warning), embedded <image> data becomes an image asset, and Figma
layer names arrive as role hints. Nothing is fetched over the network — unless
you opt in by setting FIGMA_TOKEN, which enables a figmaUrl argument that
pulls one frame straight from Figma's REST API; without the variable that
argument errors and no request is made, and no other tool reads it. Rive's
editor has accepted pasted SVGs since 2023; what these two calls add is that no
editor and no person are in the loop, and that the roles bring the motion —
entrances, ambient loops and hover/press states — with them.
Showcases: professional assets in, professional motion out
Four sample scenes are built end-to-end by the pipeline, each rebuildable with node samples/<name>/build-scene.mjs:
samples/weather-widget/— the hero animation above: a UI weather card that cycles sunny → rain (with a lightning flash) → sunny on one looping timeline. Twemoji sun/cloud/bolt imported as SVG, colors fromriv_design_tokens, ambient motion from presets, everything clipped to the card.samples/cosmic-journey/— every piece of artwork is professionally designed (Twemoji rocket, ringed planet, moon, stars, comet — fetched as SVG via npm and converted withriv_import_svg); colors fromriv_design_tokens, motion from presets, composition fixed through theriv_critiqueloop.samples/night-delivery/— remixes a professional.riv: Rive's official truck (hand-drawn bezier art and its hand-tuned wheel/body animation tracks) is extracted withriv_decompileand composed into a new night scene with a Twemoji moon, scrolling road and ascreen-blended headlight beam.samples/launch-success/— hand-authored SVG + tokens + presets + TrimPath draw-on + particles + intro→idle state machine.
Twemoji artwork © Twitter/X and contributors, CC-BY 4.0; truck artwork from Rive's official example files.
Design quality guidance
riv_create output can look like flat "AI placeholder" shapes if a client just wings the scene spec. The server bakes quality in structurally — the recommended flow for any non-trivial scene is:
riv_design_tokens→ use only the returned palette/gradients/durations/easings (never invent raw hex or ad-hoc timings)riv_createwith motionpresetsinstead of hand-authored keyframes wherever one fitsriv_critique→ look at the frames, score the 6-axis checklist, fix anything below 4, re-run (at least twice)
The same workflow plus hand-authoring craft rules (bezier curves, easing semantics, rigging) is exposed as the rive-design-guidelines MCP prompt. It also carries numeric recipes (spacing/timing tokens, composition & layering rules, anti-patterns to avoid) across 6 dedicated sections. For clients without MCP prompts support, it ships as a portable skill file at skills/rive-design-guidelines/SKILL.md.
Quick start
Claude Code plugin (recommended) — one install gets the MCP server, the design-guidelines skill, and the rive-designer agent:
/plugin marketplace add ODU33104/rive-mcp
/plugin install rive-mcp@rive-toolsOr install from npm:
npm install -g rive-mcp-server
# Register with Claude Code (user scope = available in every project)
claude mcp add --scope user rive -- rive-mcpOr run from source:
git clone https://github.com/ODU33104/rive-mcp.git
cd rive-mcp
npm install
npm run build
claude mcp add --scope user rive -- node /absolute/path/to/rive-mcp/dist/index.jsA Chromium-based browser is auto-detected in this order (usually nothing to install):
RIVE_MCP_CHROMEenv var (path to Chrome/Edge executable)Playwright browser cache
Installed Chrome → Edge
Requires Node.js 20+.
The Studio: human ⇄ AI collaboration
riv_studio opens a local web page where a human can inspect, directly edit, and request changes to whatever the AI built (first-run guide included, UI in English/Japanese):
Let the AI build — "create a bouncing-ball riv and open it with riv_studio"
Touch it — click/drag objects on the canvas, tweak numbers & colors in the inspector (applies live)
Ask the AI — type bigger changes into the Agent panel, then say "check the studio notes" in chat
When the AI edits the file, the browser hot-reloads instantly — and it writes back what it changed, in the same chat
Works without a scene JSON too: any .riv can be edited property-by-property through the hierarchy + inspector.

Feature tour
Laid out like the editor you already know — the Studio follows the official Rive editor's operating model: a Design / Animate mode switch, a Hierarchy panel with Expand All / Collapse All / Deep Expand / Deep Collapse on right-click and a name filter, Data / Assets / Animations / Agent accordions along the bottom of the left panel, and a Console / Problems / Changes status bar at the very bottom (Problems is wired to the same static checks as riv_lint, and clicking a finding jumps to it in the state-machine graph).
Keys are created where you'd expect them — in Animate mode every animatable inspector row grows a diamond key button with three states: hollow (no track), outlined blue (animated but no key under the playhead), filled blue (keyed here). Click to key or unkey at the playhead. The dope sheet below is for reading and rearranging what's already there.
Multiple artboards & snapshots — switch between a file's artboards with a tab bar, and save, restore or delete named snapshots of your edits — a separate history from undo/redo.

Timeline / dope sheet — per-track keyframes with seek, zoom and playback-speed control. Marquee- or Shift-click to select across tracks, drag a whole selection of keyframes together, and copy/paste with Ctrl+C/V anchored at the playhead (curves carry over).


Bezier curve editor — pick a keyframe span, drag the control points, or apply one of 10 easing presets. Switch any span between hold / linear / cubic.

State machine graph view — layers, states and transitions as a node graph; click a transition to see its duration / exitTime / conditions. Lint-integrated: unreachable states are red, unconditional self-transitions yellow, and the active state glows during playback.

State machine playground — flip bool inputs and fire triggers from the browser to watch transitions happen.

Onion skinning — ghost the surrounding 0–5 frames with distance-based opacity to check motion arcs at a glance.

Direct editing — select in the hierarchy or on the canvas, then edit position / rotation / scale / colors / text in the inspector with undo/redo.

Bone overlay & posing — see the bone skeleton over the canvas, drag to rotate a bone (FK) while paused, and bake the current pose into a keyframe.

Agent chat — a two-way conversation, not a suggestion box. Your message ships with the current selection, artboard, animation and playhead time attached; the AI picks it up via riv_studio_notes and posts its result back into the same thread, so you can see what it changed without leaving the Studio.

One-click export
Click PNG / APNG / GIF / WebM in the Studio toolbar to render the current animation on the spot — no MCP round-trip needed for a quick preview export.

Character animation
Turn a single character PNG into a naturally moving .riv:
riv_slice_imagecuts out ears/tail/etc. by polygon,riv_rig_characterassembles the whole rig in one call: pivot groups, a seamless 2-bone head mesh for tilting, vector eyelid blink, idle/happy animations and ahappytriggerOr compose manually with
riv_create: image embedding, grid meshes with per-vertex keyframes, bone chains with distance-weighted skinning, IK constraints
Example prompts
"List the riv files in
samples/and inspect vehicles.riv""Render the
curvesanimation as a GIF""Create a riv of falling snow over a night sky and open it in the studio"
"Rig
characters/cat.png— ears and tail should move, and it should look happy on click""Check the studio notes" (after typing feedback into the Studio UI)
"Write the React integration code for this file"
Development
npm run build # vendor runtime assets + tsc
npm run test:e2e # spawns the real server, exercises all 32 tools over JSON-RPCdocs/riv-format.md documents the reverse-engineered knowledge of the .riv binary format used by the writer (typeKeys/propertyKeys resolved from the official rive-runtime type definitions vendored in vendor/rive-defs/defs.json).
Limitations
Text-run enumeration is not exposed by the runtime API (access by name works)
GIF output has no transparency (composited on a background color)
The Canvas2D preview renderer can show mesh seams that don't exist in the file (WebGL/Skia render clean)
fill.feather/stroke.feather(vector blur) writes correctly to the.rivbut isn't rendered by this server's Canvas2D preview pipeline — only a GPU Rive Renderer supports itLuau scripting and the Layout engine are not generated (runtime spec still moving)
Screenshot detection (
riv_ui_detect) is sensitive to small pixel changes: a lossless PNG re-encode is identical, but ±2 RGB noise reclassifies most vector panels and can nearly triple the element count. Every flat fill is test-rendered against the screenshot before it ships, so what survives is measured to match — the cost is that fidelity wins over editability on photo-heavy pages, where most elements come back as slices that only fade. See docs/ui-screenshot-to-prototype.md for the measured numbers and the rest of the limits
License
Free to use (personal & commercial) — but not open source. This is source-available freeware:
✅ Use the software freely; the
.rivfiles and code it generates are yours without restriction❌ No modification, no redistribution, no derivative works
❌ No reverse engineering; no AI-assisted analysis, extraction or reproduction of the code (including use as training data)
See LICENSE for the exact terms. Bundled third-party components: Inter font (OFL 1.1), Rive runtime & type definitions (MIT, © Rive, Inc.).
rive-mcp is an unofficial tool and is not affiliated with or endorsed by Rive, Inc.
Available Tools
30 toolsriv_ab_compareRender two .riv files side by side for visual A/B reviewA
Render the same artboard/animation/state-machine from two .riv files under identical conditions and composite them side by side (horizontal or vertical) into a single GIF/APNG for human review — e.g. a rig before/after an edit, or two design variants. 'A: ' / 'B: ' labels are burned into each frame by default. If the two files' animation lengths differ, the shorter one holds on its final frame once it ends. Different from riv_visual_diff: that tool computes a per-pixel numeric diff of the SAME thing rendered two ways (for regression testing); this tool is for eyeballing two DIFFERENT things playing side by side (for design review), not measuring a delta.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Default 20 | |
| out | No | Output path (default: alongside pathA) | |
| pathA | Yes | First .riv file | |
| pathB | Yes | Second .riv file | |
| width | No | Panel width (default 320); panel height is derived from file A's aspect ratio and then forced onto file B so both panels align | |
| format | No | Output format (default gif) | |
| height | No | Panel height (default: derived from file A's own aspect ratio) | |
| labels | No | Burn 'A: <file>' / 'B: <file>' labels into each frame (default true) | |
| layout | No | Panel arrangement (default horizontal) | |
| artboard | No | Artboard name, applied to both files (default: first) | |
| duration | No | Seconds to render (default: the longer of the two files' own animation lengths) | |
| animation | No | Animation name, applied to both files (default: first) | |
| background | No | CSS background per panel (default: white for gif, transparent for apng) | |
| stateMachine | No | State machine name, applied to both files (takes precedence over animation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses labels burned by default, shorter file holds final frame, panel height derived from A and forced onto B, stateMachine precedence over animation, and default background behavior. These are meaningful behavioral traits beyond parameter names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-organized paragraph that front-loads the core purpose, includes concrete examples, and differentiates from alternatives without redundancy. Every sentence contributes information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 14 parameters and no output schema, the description covers key behaviors, defaults, and the output format. It could mention what the tool returns (e.g., path to output file), but overall it provides sufficient context for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline applies. The description reinforces that artboard/animation/stateMachine are applied to both files, but this is already present in the parameter descriptions. No new semantic value is added beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders two .riv files side by side into a composite GIF/APNG, with specific verbs and resource types. It also explicitly differentiates from riv_visual_diff, making the purpose unmistakable even among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance (e.g., 'rig before/after an edit', 'design variants') and names the alternative riv_visual_diff, explaining why this tool is chosen for side-by-side review rather than pixel diff.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_asset_searchSearch/fetch professional vector icons (Iconify)A
Search Iconify's ~200k professionally designed open-source icons and convert one directly into Rive shapes. Two modes: query-only returns matching icon names; icon+outSpec downloads the SVG and imports it (same output as riv_import_svg). Requires network access to api.iconify.design.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Icon to fetch, e.g. 'solar:rocket-bold' (from a previous search) | |
| limit | No | Max results (default 24) | |
| query | No | Search terms, e.g. 'rocket launch' | |
| outSpec | No | Required with icon: output scene-fragment JSON path | |
| idPrefix | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses network access, the two operational modes, and that import mode has the same output as riv_import_svg. This covers key side effects and dependencies, though it omits details about error cases or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, then concisely explains modes and network needs. Every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 5 parameters, the description clearly explains the two main usage modes and result behavior. However, it leaves gaps around parameter combinations (e.g., both query and icon provided), idPrefix semantics, and error conditions, making it adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, but the description adds meaning by explaining the relationship between icon and outSpec, and the query-only mode. However, idPrefix remains undocumented, and required-combination behavior is only implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches Iconify's ~200k icons and converts one into Rive shapes, with specific mention of two modes. It distinguishes itself from siblings by referencing riv_import_svg's output equivalence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains two modes, network requirements, and references an alternative tool (riv_import_svg) for output. However, it doesn't explicitly state when NOT to use this tool or when to prefer riv_import_svg directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_batch_renderBatch-render many .riv files/formats in one callA
Render a list of jobs — each a single .riv (rivPath) or a glob of .riv files (glob) — to png/gif/apng/webm/sprites, sequentially reusing the same headless Chromium page (no parallel pages). Built for CI/scripts: call this tool repeatedly from your pipeline instead of expecting a live watch mode — none is provided, since MCP's request/response model doesn't fit a background file watcher. 'defaults' holds options shared across every job; each job's own fields override them. One job's failure does not stop the batch — every job (and every file a glob expands to) gets its own success/error/outPath/durationMs entry in the returned report.
| Name | Required | Description | Default |
|---|---|---|---|
| jobs | Yes | Jobs to render, in order | |
| defaults | No | Shared defaults merged under each job (job-level values win) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral transparency burden, and it exceeds expectations. It discloses sequential reuse of a single Chromium page, explains that failures are isolated, and specifies the per-job report fields (success/error/outPath/durationMs). It also preempts the expectation of a watch mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a dense but well-organized paragraph that front-loads the core purpose, then adds necessary operational details. Every sentence contributes distinct information: execution model, target use case, defaults semantics, and error handling. No filler or redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with nested objects and multiple output formats, and the description covers the key contextual gaps not present in the schema: the sequential page reuse, lack of watch mode, fault isolation, and the shape of the returned report. Given the rich schema and no output schema, this is a complete operational picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents parameter constraints and defaults. The description adds meaningful semantic value by explaining how the 'defaults' object merges with each job and how job-level fields override shared options. It also clarifies the behavior of the jobs array in terms of ordering and isolated failures.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Render a list of jobs') and names the exact resources/formats (.riv files, png/gif/apng/webm/sprites), distinguishing this batch tool from single-render siblings like riv_render_gif and riv_render_video. It clearly defines the two job input modes (rivPath and glob).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong contextual guidance: it is built for CI/scripts, should be called repeatedly from a pipeline, and no watch mode is available because MCP is request/response. It also explains defaults merging and job-level overrides. However, it does not explicitly name alternative single-render tools or state when to prefer batch over single rendering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_createCreate a .riv file from a scene specA
Create a working .riv animation file from scratch (no Rive editor needed) and validate it with the official runtime. Returns a rendered preview frame. For non-flat, non-"AI placeholder" quality (gradients, organic bezier curves, proper easing, springy motion), read the "rive-design-guidelines" prompt this server exposes before designing a non-trivial scene. Scene spec example: { "artboard": {"name":"Demo","width":400,"height":300}, "backgroundColor": "#1a1a2e", "shapes": [ {"id":"box","type":"rect","x":120,"y":150,"width":80,"height":80,"cornerRadius":12,"rotation":0,"opacity":1, "fill":{"color":"#e94560"},"stroke":{"color":"#fff","thickness":3}}, {"id":"ball","type":"ellipse","x":280,"y":150,"width":70,"height":70, "fill":{"gradient":{"type":"linear","stops":[{"color":"#00d9ff"},{"color":"#0066ff"}]}}}, {"id":"tri","type":"polygon","x":200,"y":100,"points":[{"x":0,"y":-40},{"x":35,"y":20},{"x":-35,"y":20}],"fill":{"color":"#ffd700"}} ], "animations": [ {"name":"spin","fps":60,"duration":60,"loop":"loop","tracks":[ {"target":"box","property":"rotation","keyframes":[{"frame":0,"value":0},{"frame":60,"value":360,"easing":"linear"}]}, {"target":"ball","property":"y","keyframes":[{"frame":0,"value":150},{"frame":30,"value":80,"easing":"ease-out"},{"frame":60,"value":150,"easing":"ease-in"}]} ]} ], "stateMachine": {"name":"SM","inputs":[{"name":"go","type":"bool"}], "states":[{"name":"spinning","animation":"spin"}], "transitions":[{"from":"entry","to":"spinning","condition":{"input":"go"}}]} } Character animation (images/groups/mesh): { "groups": [{"id":"rig","x":300,"y":200}], "images": [{"id":"chara","pngPath":"./cat.png","x":0,"y":0,"scale":0.25,"parent":"rig", "mesh":{"columns":6,"rows":6}}], "animations": [{"name":"idle","duration":240,"loop":"loop","tracks":[ {"target":"rig","property":"y","keyframes":[{"frame":0,"value":200},{"frame":120,"value":195,"easing":"ease-in-out"},{"frame":240,"value":200,"easing":"ease-in-out"}]}, {"target":"chara#v0_3","property":"x","keyframes":[{"frame":0,"value":0},{"frame":120,"value":40,"easing":"ease-in-out"},{"frame":240,"value":0,"easing":"ease-in-out"}]} ]}] }
images[].pngPath: PNG file embedded into the .riv. mesh enables vertex deformation; vertices addressed as "#v_" (row 0 = top), coordinates in the image's natural pixel space centered at origin. Mesh vertex tracks support x/y only.
groups are Nodes usable as parents (parent) of shapes/images for rig hierarchies and pivots; animatable like shapes.
transitions support exitTimeMs (play source animation this long before transitioning). Motion presets — PREFER these over hand-authored keyframes (professionally tuned amplitudes/easings, ~10x fewer tokens): "animations":[{"name":"intro","duration":90,"presets":[ {"preset":"pop-in","target":"logo"}, {"preset":"rise-in","targets":["c1","c2","c3"],"at":12,"stagger":4}, {"preset":"float","target":"logo"} ],"tracks":[]}] Available: fade-in rise-in drop-in slide-in pop-in bounce-in | fade-out sink-out slide-out pop-out | pulse heartbeat tada shake wobble | breathing float sway spin glow-pulse blink(for eyelid overlays). Options: at(start frame), stagger(frames between targets), intensity(0.25-3), direction(left|right|up|down), cycleSeconds. Ambient presets (breathing..blink) span the whole animation seamlessly. A preset and a manual track must not drive the same target+property. Pro features: stroke.trim {start,end,mode} + trimStart/trimEnd tracks (draw-on effect), shapes[].clipBy (mask via an invisible shape), groups[].solo+active + soloActive track with keyframes[].ref (pose/mouth switching), constraints [{type:"followPath",item,path}] + followDistance track 0-1 (motion along a path), open paths (closed:false), multi-contour shapes (subpaths), stroke cap/join. "imports":[{"spec":"logo.scene.json","x":200,"y":150,"scale":0.8}] places riv_import_svg / riv_asset_search fragments under a wrapper group (id = file basename) — animate the wrapper or individual shape ids. PREFER imported real vector art over drawing with primitives for anything illustrative. Recommended flow: riv_design_tokens → (riv_import_svg / riv_asset_search for artwork) → riv_create (token values + presets + imports) → riv_critique → fix → re-critique. Shape z-order: later in array = on top; images render above shapes. properties for tracks: x,y,rotation(deg),scaleX,scaleY,opacity(0-1),width,height,fillColor(needs "color" in keyframes). Colors: #RRGGBB or #AARRGGBB. rotation in degrees. Easings include emphasized-decel (enters) / emphasized-accel (exits). Audio: "audio":[{"id":"beep","path":"./beep.wav"}] embeds a WAV/MP3/FLAC file (path resolved relative to cwd, or pass bytes directly). "events":[{"id":"beepEvent","type":"audio","audio":"beep"}] declares an AudioEvent bound to that clip. Trigger it either from a state machine state ("states":[{"name":"s1","fireEvent":"beepEvent"}]) or at specific frames inside a timeline via animations[].events: {"name":"anim1","duration":60,"tracks":[...],"events":[{"event":"beepEvent","frame":0},{"event":"beepEvent","frame":30}]}. NOTE: playback support depends on the runtime — this server's own preview (a Canvas2D-based renderer) does not play audio, so rendered PNG/GIF/video previews and riv_studio will stay silent even though the AudioAsset/AudioEvent are written correctly and will play in a GPU-backed Rive runtime (WebGL/Skia, e.g. rive.app or the production player).
| Name | Required | Description | Default |
|---|---|---|---|
| scene | Yes | Scene spec (see tool description for schema) | |
| outPath | Yes | Output .riv path | |
| previewTime | No | Seconds into first animation for the preview frame (default 0.4) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full weight. It discloses that the tool validates with the official runtime, embeds PNG/WAV/MP3 assets, returns a preview frame, and explicitly notes that the server's own preview does not play audio even though audio events are written correctly. It does not mention overwrite behavior or failure handling, but the main side effects are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured, with front-loaded purpose, example JSON blocks, and labeled sections for presets, pro features, imports, and audio. Each section earns its place given the tool's complexity, though the sheer length prevents a 5 on conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, lack of annotations, and absence of an output schema, the description is remarkably complete. It covers scene specification, character rigging, motion presets, advanced features, import flow, z-order, animatable properties, colors, easing, and audio behavior—including a note about runtime playback limitations. An agent has enough detail to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the schema descriptions are minimal (e.g., "Scene spec (see tool description for schema)"). The description fills this gap with extensive examples of scene structure, keyframe syntax, presets, pro features, imports, and audio configuration, far exceeding the baseline. It gives every parameter meaningful context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Create a working .riv animation file from scratch" and adds validation plus a rendered preview frame. This clearly differentiates riv_create from siblings like riv_edit, riv_import_svg, and riv_render_frame.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a recommended flow: riv_design_tokens → (riv_import_svg / riv_asset_search) → riv_create → riv_critique, establishing when to use it. It also states preferences: "PREFER imported real vector art over drawing with primitives" and "PREFER these over hand-authored keyframes." However, it does not explicitly say when NOT to use this tool (e.g., for editing existing files, use riv_edit), so it misses explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_critiqueCritique a .riv: filmstrip + onion skin + motion vectors + metrics + checklistA
One-call review bundle for the render→critique→revise loop. Returns (1) a FILMSTRIP image — N frames left→right across the duration, so motion is readable as a sequence, (2) an ONION-SKIN image — all frames ghost-overlaid so every mover leaves a visible trail (use it to check trajectories and travel direction vs the artwork's facing), (3) a MOTION REPORT — net displacement/rotation vector per animated object computed from the file data, (4) objective design metrics + lint findings, and (5) a fixed 7-axis scoring checklist (incl. spatial/directional coherence). LOOK at the images, score each axis 1-5, fix anything below 4 (riv_edit / regenerate), then re-run. Iterate at least twice before delivering any non-trivial scene.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file | |
| width | No | Width of each filmstrip cell (default 200 — keep small, it saves tokens) | |
| frames | No | Frames to sample across the duration (default 6) | |
| artboard | No | ||
| animation | No | Animation to sample (default: first) | |
| stateMachine | No | ||
| individualFrames | No | Also return each sampled frame as a separate full-size image (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden. It thoroughly discloses what the tool returns (including the nature of the images, that motion vectors are 'computed from the file data', and the fixed 7-axis checklist). It does not mention failure modes or explicit read-only status, but its output-focused transparency is strong. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is single-paragraph but well-structured with numbered return items (1)-(5) and a clear imperative workflow sentence. Every sentence contributes: purpose, outputs, and usage instructions. No fluff, scannable despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no output schema, no annotations), the description is remarkably complete. It explains what the tool produces, how to interpret the visual outputs, what the checklist covers, and how to loop the critique into revision. It even sets an iteration minimum. This is sufficient for an agent to select and execute the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so the baseline is 3. The description adds meaning to the 'frames' parameter by linking it to 'N frames left→right across the duration' and implies the token-saving intent of 'width' indirectly via 'keep small', but does not explain 'artboard', 'stateMachine', or 'individualFrames' beyond the schema. Overall, moderate additional value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Critique a .riv' via a 'One-call review bundle'. It enumerates the five distinct return types (filmstrip, onion-skin, motion report, metrics+lint, checklist), distinguishing it from sibling render or inspect tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly places the tool in the 'render→critique→revise loop' and gives actionable workflow instructions: 'LOOK at the images, score each axis 1-5, fix anything below 4 (riv_edit / regenerate), then re-run. Iterate at least twice...' It also names alternatives (riv_edit/regenerate), making usage context and next steps unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_decompileDecompile a .riv into an editable scene specA
Reverse a .riv file into a riv_create scene spec (shapes with bezier vertices, solid/gradient fills incl. gradient opacity, blend modes, artboard background, groups/solos, trim paths, clipping, animations with named easings, loop modes). Paint objects are resolved by parentId, so editor-authored files (paints deferred to the stream tail) decompile correctly. Use it to study professional files as few-shot examples, or to remix them — art AND hand-tuned animation tracks — into new scenes (decompile → edit spec → riv_create; see samples/night-delivery). Object types outside the writer's coverage are counted in 'skipped', not silently dropped. Note: community/marketplace files are CC BY 4.0 — keep attribution.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file | |
| outSpec | No | Write the scene spec JSON here (default: return summary only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does not disappoint. It discloses the parentId resolution behavior for editor-authored files, explains that unsupported object types are counted in 'skipped' rather than silently dropped, and flags licensing attribution for community/marketplace files. This goes beyond basic operation, though it omits side effects like writing the outSpec file and the default return behavior (which only appear in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a meaty paragraph, but every sentence carries substantive information: the core operation, supported features, parentId handling, skipped counting, workflow use, sample pointer, and licensing note. It is dense yet front-loaded with the primary purpose, and while it could be trimmed, it is not inflated with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex conversion tool with no output schema, the description covers a wide range of relevant behavior: the exact types of content preserved, file provenance handling, unsupported-content visibility, practical use cases, and legal considerations. It does not fully specify the return format (only 'scene spec' and the schema's 'return summary only'), but it is broadly adequate for an agent to understand scope, limitations, and expected outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for both parameters (path and outSpec), so the baseline is 3. The description adds workflow context (decompile → edit spec → riv_create) and mentions the scene-spec output, but does not elaborate on parameter syntax or formatting beyond what the schema names. It is adequate but does not significantly enhance schema understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Reverse') and identifies the exact resource and output ('a .riv file into a riv_create scene spec'). It further enumerates the included element types (shapes, bezier vertices, fills, blend modes, etc.), clearly distinguishing this tool from siblings like riv_dump or riv_inspect by its transformation goal and editable-spec target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'study professional files as few-shot examples, or to remix them', and provides a concrete workflow (decompile → edit spec → riv_create with sample reference). It lacks explicit 'when not to use' or named alternatives, but the use cases are clearly framed with enough context to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_design_tokensGenerate a design-token set (palette / motion / layout)A
Deterministically generate professional design tokens for a scene BEFORE calling riv_create: an OKLCH-harmonized palette (with WCAG contrast ratios), gradient pairs, Material-Motion-derived durations & easing roles, spacing/radius/stroke scales and a type scale. Call this first, then use ONLY the returned values in the scene spec — never invent raw hex colors or ad-hoc durations. Inputs: optional seed color, mood (calm|playful|elegant|tech|warm|natural), scheme (dark|light).
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | ||
| seed | No | Brand/seed color #RRGGBB (optional; mood default hue otherwise) | |
| scheme | No | Default dark |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses deterministic generation, OKLCH harmonization, WCAG contrast ratios, and Material-Motion-derived durations, which gives insight into behavior beyond simple generation. It does not explicitly state side-effect-free behavior, but 'generate' implies no mutation, and the lack of side-effect warnings is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences that are information-dense yet concise. It front-loads the core purpose and immediately follows with usage constraints, with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, but the description enumerates the token categories returned, effectively compensating for missing return documentation. It also covers input options and the ordering requirement relative to riv_create. Minor gap: no mention of how results are returned (e.g., JSON structure), but the listing of token types provides sufficient context for a generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the description adds meaning by listing the allowed mood values, scheme options, and optional seed color. It contextualizes how these parameters affect generation (mood as hue default, seed as optional brand color), going beyond the raw enum/pattern definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates design tokens deterministically for a scene, listing specific token categories (palette, gradients, motion, spacing, type scale). It also explicitly positions this as a prerequisite step before riv_create, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to call this first and to use only the returned values in the scene spec, never inventing raw hex colors or ad-hoc durations. This provides clear when-to-use guidance and an explicit alternative/ordering relative to riv_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_diffDiff two .riv filesB
Structural diff between two .riv files: type count changes and per-object property differences.
| Name | Required | Description | Default |
|---|---|---|---|
| pathA | Yes | ||
| pathB | Yes | ||
| maxDiffs | No | Max object diffs to list (default 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the type of output (type counts and property differences) but omits any indication of whether the tool is read-only, how results are formatted, or the effect of the maxDiffs parameter. This is a notable gap for a tool with no annotation safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately captures the tool's purpose. It is concise and contains no filler, with every word contributing to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite being a simple diff tool, the description covers the core purpose but leaves out return format and parameter details. Given the presence of a maxDiffs parameter and no output schema, a bit more detail on invocation would improve completeness, but the basic intent is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only includes a description for maxDiffs, leaving pathA and pathB as bare string fields. The tool description does not compensate by explaining these parameters or the optional maxDiffs, so the parameter semantics are largely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool performs a structural diff between two .riv files, specifying that it reports type count changes and per-object property differences. This specific verb+resource combination distinguishes it from sibling tools like riv_visual_diff, which would handle visual comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for structural comparison of .riv files but does not explicitly state when to use it over alternatives such as riv_visual_diff or riv_ab_compare. There is no explicit 'when not to use' guidance, so the usage context is clear but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_dumpDump .riv binary structureA
Low-level dump of a .riv file's object stream (typeKeys, property values, hierarchy). Useful for debugging and format research. Large files return a summary unless full=true.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return every object (default: summary + first 50) | |
| path | Yes | Path to the .riv file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a critical non-obvious behavior: large files return a summary unless full=true. Since no annotations are provided, this is important context. It could additionally mention output format or errors, but for a read-only dump tool the disclosure is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and key behavior. Every sentence earns its place, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set and full schema coverage, the description provides the essential context: purpose, use case, and truncation behavior. It lacks explicit return format details, but as a low-level debugging tool this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully documented in the schema (100% coverage), and the description only restates the 'full' parameter's behavior without adding new details. Baseline 3 is appropriate when the schema already handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Dump') on a specific resource ('.riv file's object stream') and enumerates the content (typeKeys, property values, hierarchy). It distinguishes itself from sibling tools like riv_inspect or riv_list by emphasizing its low-level binary focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for debugging and format research' provides clear context for when to use the tool. It does not explicitly mention alternatives or when not to use it, but the stated use cases effectively guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_editEdit an existing .riv fileA
Modify an existing .riv (lossless roundtrip): set any property, change named text runs, delete objects (with automatic subtree + reference remapping), or edit keyframes on an existing animation (op=setKeyframes). Use riv_dump to find object indices/names. Renders a preview of the result. setKeyframes: target an animated object via index/name(+type), give 'animation' (LinearAnimation name) and 'property' (x/y/rotation/scaleX/scaleY/opacity/width/height — rotation in degrees), then 'keyframes' (array of {frame,value,easing}). 'mode': replace (default, swaps the whole track) | add (appends keyframes, creating the track if absent) | remove (deletes keyframes matching the given frame numbers; keyframes[].value/easing are ignored).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Source .riv path | |
| edits | Yes | ||
| outPath | No | Output path (default: overwrite source) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses several behaviors: lossless roundtrip, automatic subtree + reference remapping for deletes, preview rendering, and detailed setKeyframes modes. However, it does not mention that outPath defaults to overwriting the source file, nor does it clarify what 'preview' means or what the tool returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, with a clear two-paragraph structure. The first paragraph summarizes the main operations and cross-references riv_dump; the second dives into setKeyframes specifics without redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with multiple op modes, and the description covers most operational details: op semantics, setKeyframes modes, keyframe format, and using riv_dump for targeting. However, it omits the outPath default behavior and does not describe the return value or preview format, which is notable given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers many parameter descriptions, and the description adds significant meaning: rotation is in degrees, setKeyframes mode semantics (replace/add/remove) with default behavior, and that remove ignores value/easing. It also clarifies how index/name/type are used for targeting, going beyond raw schema listings.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: modifying an existing .riv file with four specific operations (set properties, setText, delete, setKeyframes). It contrasts with siblings like riv_create and riv_dump by emphasizing it edits existing files and references riv_dump for finding object indices/names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells users to use riv_dump to locate object indices/names, which is a practical prerequisite. It implies this tool is for editing existing files rather than creating or inspecting, but does not list explicit exclusion criteria versus other edit-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_extract_assetsExtract embedded assets from a .riv fileA
Extract embedded image/font/audio asset binary contents (ImageAsset/FontAsset/AudioAsset + FileAssetContents pairs) from a .riv file to disk, with the file extension inferred from magic bytes (PNG/JPEG/WEBP/TTF/OTF/WOFF/WOFF2/GIF). Externally-referenced (non-embedded) assets are skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file | |
| outDir | No | Output directory (default: <file>.assets alongside the .riv) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It discloses important behavioral details: file extension inference from magic bytes (PNG/JPEG/WEBP/TTF/OTF/WOFF/WOFF2/GIF) and the skipping of externally-referenced assets. This goes beyond a simple action statement, though it omits overwrite behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that is front-loaded with the primary action and resource. Every clause adds value: asset types, destination, magic-byte inference, and the exclusion of external references. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter extraction tool with no output schema and no annotations, the description covers all essential aspects: what is extracted, how files are named, and what is skipped. It could mention folder creation or overwrite behavior, but that is not critical for tool selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both 'path' and 'outDir' well-described. The tool description adds no additional parameter meaning beyond what is already in the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts embedded image/font/audio asset binaries from a .riv file to disk. It specifies exact asset types (ImageAsset/FontAsset/AudioAsset + FileAssetContents pairs) and the magic-byte inference, which distinguishes it from sibling tools like riv_asset_search or riv_inspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (extracting raw embedded asset binaries to disk) and gives context that externally-referenced assets are skipped. However, it does not explicitly name alternative tools or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_generate_codeGenerate integration codeA
Generate ready-to-use integration code (React/Vue/Svelte/plain JS/Flutter) for a .riv file, using its real artboard, state machine and input names.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file | |
| framework | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does add useful behavioral context: 'using its real artboard, state machine and input names' implies the tool reads the file and adapts to its contents. However, it omits side effects (e.g., does it write files or return code?) and possible limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that packs significant information (frameworks, source, behavior) without fluff. It is front-loaded with the verb 'Generate' and each phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param tool, the description covers the core purpose, but it lacks details about the output format (returned code vs. file generation) and any prerequisites or error conditions. Since there is no output schema, the description should have clarified the return value to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 50% of parameters (path has a description; framework has an enum but no description). The description partially compensates by listing the frameworks ('React/Vue/Svelte/plain JS/Flutter') which aligns with the enum, and implies 'path' refers to a .riv file. But it adds no deeper semantics beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Generate ready-to-use integration code' for various frameworks. It explicitly mentions the source resource (.riv file) and distinguishes this tool from sibling tools like riv_inspect or riv_play_state_machine by focusing on code generation, not inspection or playback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention use cases, prerequisites (e.g., file must exist), or exclusions. The agent is left to infer from the tool name and sibling list, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_import_svgImport an SVG as Rive vector shapesA
Convert an SVG file (Figma/Illustrator export, icon, illustration) into Rive bezier path shapes — the professional way to get high-quality artwork instead of drawing with primitives. Writes a scene-fragment JSON (shapes with full cubic vertices, gradients, strokes) and returns a rendered preview. Use the fragment in riv_create via "imports". Supports path/rect/circle/ellipse/polygon/polyline/line, nested transforms, style attrs, linear/radial gradients. Not imported: (use texts[] with a font), , filters, masks.
| Name | Required | Description | Default |
|---|---|---|---|
| svg | No | Inline SVG markup (alternative to svgPath) | |
| outSpec | Yes | Output scene-fragment JSON path (e.g. logo.scene.json) | |
| svgPath | No | Path to the .svg file | |
| idPrefix | No | Prefix for generated shape ids (avoid collisions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the output format ('Writes a scene-fragment JSON... returns a rendered preview'), supported elements ('Supports path/rect/circle/ellipse/polygon/polyline/line, nested transforms, style attrs, linear/radial gradients'), and limitations ('Not imported: <text>, <image>, filters, masks'). It doesn't mention overwrite behavior or error handling, but the disclosed behavior goes well beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 80 words) and front-loaded with the primary action in the first sentence. It logically flows from action to output to integration to supported/unsupported elements, with no wasted or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, but the description covers the key contextual needs: what input it accepts, what it produces (scene-fragment JSON and rendered preview), how the output is used (in riv_create), and the supported/unsupported SVG features. It could be more specific about the preview return format, but for a tool of this complexity, the description is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with all four parameters (svg, svgPath, outSpec, idPrefix) already described in the input schema. The description adds no parameter-specific details beyond the schema, so the baseline of 3 applies. It does connect outSpec to riv_create, but that is not a semantic clarification of the parameter itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Convert an SVG file (Figma/Illustrator export, icon, illustration) into Rive bezier path shapes' and 'Writes a scene-fragment JSON (shapes with full cubic vertices, gradients, strokes) and returns a rendered preview.' It differentiates from siblings by positioning it as 'the professional way to get high-quality artwork instead of drawing with primitives' and by mentioning integration with riv_create via 'imports.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context and exclusions: it is 'instead of drawing with primitives,' tells how to use the output ('Use the fragment in riv_create via imports'), and lists what is not imported with an alternative for text: 'Not imported: <text> (use texts[] with a font), <image>, filters, masks.' This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_inspectInspect a .riv fileA
Extract full metadata from a .riv file: artboards, animations (duration/fps/loop), state machines and their inputs (name/type/initial value). Uses the official Rive runtime. Also decodes Data Binding (ViewModel) structure when present — ViewModel definitions and their properties, ViewModelInstances with resolved property values (including enum/nested-viewmodel/list references), enums, converters, and DataBind wiring (which target object/property each bind writes to) — via direct binary parsing (returned as dataBinding, omitted when the file has none).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the transparency burden. It openly discloses that it uses the official Rive runtime for metadata and direct binary parsing for data binding, and notes that the `dataBinding` field is omitted when absent. This adds meaningful behavioral context beyond a simple 'inspect' claim.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but all information is relevant and no words are wasted. It efficiently packs a lot of detail into two sentences, though the second sentence is long and could be split for easier reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description provides a solid overview of return contents, listing all major categories and clarifying that data binding is included only when present. It could benefit from mentioning error behavior or file-format limitations, but overall it is sufficiently complete for an inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single `path` parameter (100% coverage). The description adds no new semantic meaning for the parameter beyond restating that it is a .riv file, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts full metadata from .riv files, listing specific content types (artboards, animations, state machines, data binding). This distinguishes it from sibling tools like riv_list or riv_dump by detailing its comprehensive inspection scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for inspection and full metadata extraction, but it does not explicitly state when to use it over alternatives or mention any exclusions. It gives context about what it covers (including data binding) but lacks explicit 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_lintDiagnose a .riv file for structural problemsA
Static diagnostic pass over a .riv file: broken/out-of-range references, oversized embedded assets, state-machine states unreachable by any transition, unconditional self-transitions (infinite-loop risk), unused state-machine inputs, keyframe easing silently discarded on a track's last keyframe, plus motion-quality rules (all-linear robotic movement, teleporting objects, missing stagger on simultaneous fade-ins, one-sided scale animation). Complements riv_dump (which shows raw structure but doesn't judge it).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states the operation is a 'static diagnostic pass,' implying no file mutation, and lists the specific behavioral scopes it checks (unreachable states, easing discarded, motion-quality rules). This provides useful behavioral context, though it does not mention output format, exit codes, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core function and then uses a colon-led list to enumerate checks efficiently. The list is long but each item adds distinct value; the closing sentence about riv_dump is also purposeful. Slightly verbose, but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single parameter, no annotations, and no output schema, the description is quite complete in explaining what the tool does and what it checks. The only gap is that it doesn't describe the return value format (e.g., a list of issues), which would be expected in the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the only parameter ('path' with description 'Path to the .riv file'). The description adds no additional detail about the parameter, so per the rubric the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Static diagnostic pass over a .riv file') and enumerates precise diagnostic categories (broken references, oversized assets, unreachable states, etc.). It also explicitly distinguishes itself from the sibling riv_dump by stating it 'complements' it and 'doesn't judge it,' making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names riv_dump as a complementary tool and contrasts it by noting riv_dump shows raw structure but doesn't judge it, giving the agent a clear alternative. However, it does not explicitly state when not to use riv_lint or list other alternatives, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_listList .riv filesA
Recursively find .riv files under a directory and report size and format version for each.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Directory to search (absolute or relative) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behavior: recursive traversal, target file type, and reported properties (size and format version). This is sufficient for a simple listing tool, though it does not mention output format or edge cases like permissions or symlinks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that covers purpose and output in a clear, front-loaded manner. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and no output schema. The description explains what it reports (size and format version), which is sufficient for invocation. It lacks an explicit output format, but for a listing tool the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the 'dir' parameter with a clear description (Directory to search, absolute or relative). The tool description adds the 'recursive' aspect, which relates to behavior rather than parameter semantics. Since schema coverage is 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool recursively finds .riv files under a directory and reports size and format version. It uses a specific verb ('find') and resource ('.riv files'), and distinguishes it from sibling tools like riv_inspect or riv_dump which operate on individual files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool to list .riv files in a directory tree with metadata. It implies a directory-wide search, distinguishing it from siblings that target single files. However, it does not explicitly name alternatives or say 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.
riv_lottie_importImport a Lottie/bodymovin JSON as a Rive scene fragment (art + timing + easing)A
Convert a Lottie (bodymovin, .json) animation — the format used by LottieFiles' huge library of free, professionally animated assets — into a riv_create scene fragment. Unlike riv_import_svg (shapes only), this carries over the professional's actual choreography: keyframed position/rotation/scale/opacity with their exact bezier easing curves (not approximated to a named preset), shape/null/precomp layer hierarchy, solid layers, gradient fills, stroke trim-path animation, and layer in/out visibility windows. Writes a scene-fragment JSON with {groups,shapes,animations} plus a rendered preview and a coverage/warnings summary. Since the fragment includes animations (which riv_create's "imports" mechanism does not merge), splice its groups/shapes/animations arrays directly into your riv_create scene spec instead of using "imports". Supported: shape layers (path/ellipse/rect/star/polygon/fill/stroke/gradient/trim/nested groups), null layers, solid layers, one level of precomp inlining, parented layers, hold and bezier easing. Not imported (counted in coverage.skipped, not silently dropped): text layers, masks, track mattes, repeaters, merge-paths, path/gradient-position keyframe morphing (frozen to first frame + warning), time-remapped precomps, expressions.
| Name | Required | Description | Default |
|---|---|---|---|
| json | No | Inline Lottie JSON text (alternative to path) | |
| path | No | Path to the Lottie .json file | |
| outSpec | Yes | Output scene-fragment JSON path (e.g. anim.scene.json) | |
| idPrefix | No | Prefix for generated group/shape ids (avoid collisions) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility and does so thoroughly. It discloses output contents (groups, shapes, animations, preview, coverage/warnings), that unsupported features are counted in coverage.skipped rather than silently dropped, and that some animations are frozen with a warning. This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded with the core purpose and every sentence contributes substantive detail. It could be improved with structured lists, but it avoids redundancy and only includes necessary information for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and absence of an output schema, the description is remarkably complete. It covers input format, output structure, integration approach, supported features, and explicitly delineated limitations, making it self-contained for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context about the output format but does not elaborate on individual parameter semantics beyond what the schema already provides. No additional per-parameter meaning is introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: converting a Lottie JSON into a Rive scene fragment. It names the specific input (bodymovin .json), the output (riv_create scene fragment), and explicitly differentiates from sibling riv_import_svg by noting it preserves animation. This is a specific verb+resource+scope pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit: it contrasts with riv_import_svg ('shapes only'), explains why the 'imports' mechanism is not suitable for animations, and instructs to splice arrays manually. It also lists what is and isn't supported, clarifying when this tool is appropriate and what to expect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_optimizeOptimize a .riv file (lossless)A
Shrink a .riv without changing its visual output: remove unreferenced objects (dangling easing interpolators, fired-events nothing points to, empty keyframe tracks left over from prior edits) and thin redundant keyframes on strictly-linear-interpolation runs within a tolerance. Only runs where every segment is linear are touched — any run touching hold/cubic easing is left alone, so no easing gets shifted (see keyed_property.cpp semantics: a KeyFrame's interpolationType applies to the segment going INTO the next frame). Colors and id-keyframes (soloActive) are never thinned, only numeric (KeyFrameDouble) tracks. All steps are opt-in booleans (default: all on) and idempotent/safe to run repeatedly. Use dryRun=true to see the removal/thinning plan without writing anything. Run riv_lint afterwards if in doubt.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Source .riv path | |
| dryRun | No | Report the plan only; don't write anything (default false) | |
| outPath | No | Output path (default: overwrite source) | |
| tolerance | No | Thinning tolerance as a ratio of each track's own value range (default 0.01 = 1%, conservative) | |
| thinKeyframes | No | Douglas-Peucker thin redundant keyframes on linear-only runs (default true) | |
| removeUnreferenced | No | Remove unreferenced interpolators/events/empty tracks (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so comprehensively. It discloses what gets removed (dangling easing interpolators, fired-events, empty tracks), the strict linear-only constraint for thinning, the exclusion of color/id keyframes, opt-in flags, idempotency, and the dry-run behavior. This is rich, unambiguous behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It front-loads the core purpose, then interleaves constraints, exceptions, and safety guidance with no redundancy or fluff. The structure flows logically from what → safety → usage tips.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description covers all necessary context: specific operations, algorithmic caveats (linear-only, no easing shift), parameter semantics, idempotency, dry-run workflow, and follow-up validation. It is complete for an agent to invoke correctly and understand consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing a baseline of 3. The description adds beyond schema by clarifying that thinning applies only to numeric tracks (KeyFrameDouble) and never to colors or soloActive keyframes, and by tying each boolean to the described removal/thinning steps. This adds meaningful parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Shrink a .riv without changing its visual output', and enumerates distinct actions (remove unreferenced objects, thin redundant keyframes). It clearly differentiates from siblings like riv_lint and riv_edit by focusing on lossless optimization rather than validation or manual editing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: idempotent/safe to run repeatedly, dryRun for planning, and a post-step (run riv_lint afterwards if in doubt). It does not explicitly name alternatives or state when not to use, but the purpose alone makes the intended scenario clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_play_state_machineInteractively drive a state machineA
Run a .riv state machine step by step: set/fire inputs, advance time, observe state transitions, and optionally capture frames. Returns a transition report.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file | |
| steps | Yes | Sequence of interaction steps | |
| width | No | ||
| artboard | No | ||
| background | No | ||
| stateMachine | No | State machine name (default: first) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It explains the workflow and return type, but it does not clarify side effects of capturing frames (e.g., whether PNGs are written to disk or returned) or error/prerequisite behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core purpose and lists key operations without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a solid overview of the tool and its output, but with no output schema or annotations it leaves gaps: what exactly a 'transition report' contains, how captured frames are delivered, and what the optional rendering parameters (width, artboard, background) do. These would require further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers path, steps, and stateMachine, and the description adds high-level semantic context like 'advance time' and 'capture frames' that maps to step fields. However, width, artboard, and background are undocumented in both schema and description, so the description does not compensate for those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Run') and resource ('.riv state machine'), and enumerates concrete operations: set/fire inputs, advance time, observe state transitions, and capture frames. This distinguishes it from sibling render/inspect tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies an interactive, step-by-step debugging/validation use case and mentions the output ('transition report'), which helps an agent decide when to use it. However, it does not explicitly say when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_render_apngRender an animation to APNGA
Render a .riv animation (or state machine playback) to an animated PNG (APNG). Unlike GIF this supports 24-bit color plus full alpha transparency, and GitHub READMEs animate it like a regular image. Frames are rendered with a transparent background by default.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second (default 20) | |
| out | No | Output path, .apng or .png (default: <name>.apng alongside the .riv) | |
| path | Yes | Path to the .riv file | |
| loops | No | Loop count (0 = infinite, default 0) | |
| width | No | Output width (default 480) | |
| height | No | ||
| artboard | No | ||
| duration | No | Seconds to render (default 2) | |
| animation | No | Animation name (default: first state machine or animation) | |
| background | No | CSS background color when transparent=false (default #ffffff) | |
| transparent | No | Render on a transparent background to keep APNG alpha (default true). Set false to composite onto 'background' | |
| stateMachine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the disclosure burden. It adds useful behavioral detail such as transparent background by default and full alpha support. However, it does not mention side effects like file creation, output path defaults, or overwrite behavior, leaving some important gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences: the first states the function, the second gives format differentiation and a concrete use case, and the third notes the default transparency behavior. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 12-parameter render tool with no annotations and no output schema. The description covers basic purpose and a key differentiator, but omits important invocation details such as output path defaults, state machine vs animation selection, and interactions with transparent/background. It is adequate for tool selection but not for full correct invocation across all options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema handles most parameter meanings. The description adds context around transparency defaults but does not explain undocumented params like height, artboard, or stateMachine. It provides some added value but is not heavily compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it renders .riv animations or state machine playback to APNG, naming the exact resource and output format. It also distinguishes itself from GIF by highlighting 24-bit color and alpha transparency, which separates it from sibling tools like riv_render_gif.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete use case comparison with GIF, noting APNG's support for full alpha transparency and GitHub README compatibility, which helps an agent decide when to choose this tool. It does not explicitly exclude alternatives like video or sprites, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_render_frameRender a single frame to PNGA
Render one frame of a .riv animation or state machine to PNG. Returns the image inline and saves it to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the .riv file | |
| time | No | Seconds to advance before capturing (default 0) | |
| width | No | ||
| height | No | ||
| outPath | No | Output PNG path (default: alongside the .riv) | |
| artboard | No | Artboard name (default: first) | |
| animation | No | Linear animation name | |
| background | No | CSS background color (default: transparent) | |
| stateMachine | No | State machine name (takes precedence) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the image is returned inline and saved to disk, which is a key side effect. However, it does not mention overwrite behavior, file permissions, or that state machine rendering may produce different results than linear animation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, immediately stating the core function and output behavior. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters and multiple render siblings, the description is minimal. It covers the basic output behavior but does not explain how to choose between state machine and animation, or how this tool differs from other render tools, leaving some context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78%, with most parameters described, but width and height lack descriptions. The description itself adds no parameter-level detail beyond what the schema already provides, so it neither compensates for the gaps nor adds extra meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders one frame of a .riv animation or state machine to PNG, using a specific verb and resource. This distinguishes it from sibling tools like riv_render_gif, riv_render_apng, and riv_render_video that handle animated output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'one frame' implies use for static captures, but no explicit guidance is given on when to choose this over the animated/render siblings. No alternatives are named and no 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.
riv_render_gifRender an animation to GIFB
Render a .riv animation (or state machine idle playback) to an animated GIF file for preview.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second (default 20) | |
| path | Yes | Path to the .riv file | |
| width | No | Output width (default: artboard width, capped 800) | |
| outPath | No | Output GIF path (default: alongside the .riv) | |
| artboard | No | ||
| duration | No | Seconds to render (default 2) | |
| animation | No | Animation name (default: first state machine or animation) | |
| background | No | CSS background color (default white — GIF has no alpha) | |
| stateMachine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. However, it only states the output format and purpose, omitting side effects such as file creation/overwriting, default output location, behavior with missing animations, or performance considerations. This is a significant gap for a tool that writes files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the main action and outcome, with no redundant or unnecessary information. It is appropriately concise given the moderate complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters, no output schema, and no annotations, a one-sentence description is insufficient. It does not explain return behavior, output file handling (e.g., default outPath), or the meaning of 'preview' in practical terms. The description is too sparse to fully guide an agent for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78%, which is above the 80% threshold, so the baseline is 3. The description adds minimal context by mentioning 'state machine idle playback', which helps clarify the stateMachine parameter, but it does not significantly enhance understanding of the other parameters beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders a .riv animation to an animated GIF, using the verb 'Render' and specifying the resource and output format. It distinguishes from sibling tools like riv_render_frame, riv_render_apng, and riv_render_video by explicitly targeting GIF output, and mentions 'for preview' as the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for preview' implies a context of use, but the description does not explicitly state when to choose this tool over alternatives like riv_render_apng or riv_render_video, nor does it mention any exclusions or when not to use it. Thus, usage guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_render_spritesRender an animation to a sprite sheet PNGA
Render N evenly-spaced frames of a .riv animation/state machine into a single grid sprite sheet PNG (columns = ceil(sqrt(N))). Writes the PNG plus a JSON metadata file (cellW/cellH/cols/rows/count/fps) alongside.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Metadata playback fps (default: count/duration) | |
| out | No | Output PNG path (default: alongside the .riv); metadata is written next to it with a .json extension | |
| path | Yes | Path to the .riv file | |
| count | No | Number of frames (default 16) | |
| width | No | ||
| height | No | ||
| artboard | No | ||
| duration | No | Seconds spanned by the frames (default: one animation loop, or 2s) | |
| animation | No | ||
| background | No | ||
| stateMachine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It clearly discloses that the tool writes both a PNG and a JSON metadata file alongside, and reveals the grid layout formula (columns = ceil(sqrt(N))). This adds useful context beyond the schema. However, it does not mention overwrite behavior, file permission requirements, or potential long runtime for large frame counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and is front-loaded with the core purpose. It avoids unnecessary jargon and includes only the key details (frame spacing, grid layout, output artifacts). Every sentence earns its place, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a good high-level overview but omits important interaction details: how fps, duration, and count interrelate, which parameter takes precedence when both animation and stateMachine are provided, and the effect of width/height on rendering. Since there is no output schema and many parameters are semantically sparse, the description is not fully complete for a tool with 11 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 45%, so the description must compensate. It adds meaning for the 'count' parameter (N frames) and the metadata fields (cellW/cellH/cols/rows/count/fps), clarifying how these relate to the output. However, many parameters such as width, height, artboard, animation, stateMachine, and background are not addressed, leaving gaps for the agent. The description only partially compensates for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Render N evenly-spaced frames of a .riv animation/state machine into a single grid sprite sheet PNG'. It specifies the verb (Render), the resource (.riv animation/state machine), and the output format (single grid sprite sheet PNG), which effectively distinguishes it from sibling tools like riv_render_frame, riv_render_gif, and riv_render_video. The output metadata file is also briefly described.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (sprite sheet creation) but does not explicitly state when to use this tool versus alternatives. There is no mention of 'use this instead of...' or 'not recommended when...'. Sibling tools such as riv_render_gif and riv_render_video are not referenced, leaving the agent to infer the distinction based solely on the output type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_render_videoRender an animation to a WebM videoA
Render a .riv animation (or state machine) to a real-time WebM video using canvas.captureStream() + MediaRecorder (VP9, falls back to VP8/generic webm). Default duration is one loop of the animation (2s for a bare state machine or when the animation's length can't be determined).
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | captureStream() frame rate (default 30) | |
| out | No | Output .webm path (default: alongside the .riv) | |
| path | Yes | Path to the .riv file | |
| width | No | ||
| height | No | ||
| artboard | No | ||
| duration | No | Seconds to record (default: one animation loop, or 2s) | |
| animation | No | ||
| background | No | CSS background color (default: transparent) | |
| stateMachine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It reveals implementation details (canvas.captureStream, MediaRecorder, VP9 fallback) and default duration logic. However, it omits important behavior such as return value, whether it writes to disk, browser/headless environment requirements, and whether existing files are overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every clause adds value (format, method, codec, default duration). No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 10 parameters, no annotations, and no output schema. The description explains core function and duration default but does not cover width/height/artboard/animation/stateMachine semantics, output naming, or return value. For the complexity, the description is incomplete and would leave an agent guessing about half the parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so the description must compensate for the five undocumented parameters (width, height, artboard, animation, stateMachine). It adds meaning only for 'duration' by explaining default one-loop behavior and the 2s fallback. No explanation is given for the other undocumented parameters, leaving the agent without sufficient guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Render' and the resource '.riv animation (or state machine)' with a specific output format 'WebM video'. It distinguishes from sibling render tools (gif, apng, frame) by explicitly naming the container format and capture technique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating WebM videos when a real-time recording is needed, and clarifies default duration behavior. However, it does not explicitly mention when to use this tool over alternatives like riv_render_gif or riv_render_frame, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_rig_characterAuto-rig a character PNGA
One call: character PNG -> fully rigged .riv with cutout parts (ears/tail via polygons), 2-bone head-tilt mesh (seamless), vector eyelid blink, idle + happy animations, and a state machine with a 'happy' trigger. Returns a preview. Fine-tune afterwards with riv_edit or riv_studio.
| Name | Required | Description | Default |
|---|---|---|---|
| eyes | No | Eye rects in image px coords (generates blink overlays) | |
| parts | No | Named cutout parts, e.g. {earL, earR, tail}. Names containing 'ear' attach to the head | |
| outPath | Yes | Output .riv path | |
| pngPath | Yes | Character PNG (transparent background recommended) | |
| furColor | No | Eyelid/patch color matching the fur (default #f8eee2) | |
| headRatio | No | Top fraction of the image that is 'head' (default 0.45) | |
| artboardWidth | No | ||
| artboardHeight | No | ||
| backgroundColor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses detailed output behavior: cutout parts via polygons, 2-bone head-tilt mesh, vector eyelid blink, idle/happy animations, state machine with 'happy' trigger, and a preview return. This is substantial, though it doesn't mention failure modes, overwrite behavior, or input requirements beyond 'transparent background recommended'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, highly information-dense and front-loaded. The first sentence packs the full transformation and output features; the second sentence gives actionable follow-up alternatives. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 9-parameter tool with nested objects and no output schema, the description covers the core pipeline, output features, and sibling tools for refinement. It doesn't mention the nature of the 'preview' or edge cases, but the main workflow is clearly communicated. The schema handles parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, and the description adds some semantic context (e.g., 'ears/tail via polygons' hints at the 'parts' parameter, 'head-tilt mesh' links to headRatio/eyes). However, it doesn't explain parameters like artboardWidth/Height or backgroundColor, which remain undocumented in schema. It adds value but doesn't fully compensate for gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'character PNG -> fully rigged .riv' with specific features (cutout parts, head-tilt mesh, blink, animations, state machine). It distinguishes itself from siblings by mentioning 'Fine-tune afterwards with riv_edit or riv_studio', positioning this as the one-call auto-rigging tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for initial rigging from a PNG, with explicit guidance to use 'riv_edit or riv_studio' for fine-tuning. This gives clear context and alternatives, though it doesn't state exclusions (e.g., for non-PNG inputs) or when to prefer other tools like riv_import_svg.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_setupInstall the bundled rive-design-guidelines skill into this environmentA
One-time setup: copies the bundled rive-design-guidelines skill (the mandatory tokens → pro-asset ingestion → presets → critique workflow, asset-source registry, icon-animation recipes and craft rules) into the client's skills directory so it auto-triggers on future Rive work — .claude/skills/ in the current project (scope=project, default) or ~/.claude/skills/ for all projects (scope=user). Idempotent: re-running updates the skill to this server version's copy. Recommended on first use of this server in a new environment; clients without skill support can read the same content via the rive-design-guidelines MCP prompt instead.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | project = <projectDir>/.claude/skills (default), user = ~/.claude/skills | |
| projectDir | No | Project root for scope=project (default: current working directory) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It discloses that the tool copies files ('copies the bundled skill'), is idempotent ('re-running updates the skill to this server version's copy'), has scope-dependent behavior, and notes the auto-triggering effect. It could be more explicit about overwriting existing skill directories, but 'updates' strongly implies that behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the essential action ('One-time setup: copies') and packs critical details into a single well-structured sentence. Every clause adds value: idempotency, scope, default, auto-triggering, recommendation, and alternative. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description comprehensively covers what the tool does, when to use it, what behavior to expect (idempotent, scope options), and how to fall back if skill support is unavailable. All essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both 'scope' and 'projectDir' are fully described in the input schema. The description repeats these facts (e.g., 'scope=project, default') but adds no parameter-specific meaning beyond what the schema already provides. The baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'One-time setup: copies the bundled `rive-design-guidelines` skill ... into the client's skills directory'. It uses a specific verb ('copies'), names the resource, and explains the effect ('auto-triggers on future Rive work'). This distinguishes it from sibling tools, all of which perform Rive processing or analysis rather than setup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends when to use the tool: 'Recommended on first use of this server in a new environment'. It also provides an alternative for clients without skill support: 'clients without skill support can read the same content via the rive-design-guidelines MCP prompt instead'. This clearly conveys both when to use and when not to use, with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_slice_imageSlice a PNG into parts for riggingA
Cut polygon regions out of a character PNG for parts-based rigging (cutout animation). Writes each part as .png plus base.png (source with parts erased) into outDir, and returns each part's bbox for placement. Use with riv_create: images per part + groups as pivots.
| Name | Required | Description | Default |
|---|---|---|---|
| outDir | Yes | Directory to write part PNGs into | |
| pngPath | Yes | Source PNG path | |
| regions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly states that it writes part files and a base.png, mentions that base.png has parts erased, and says it returns bounding boxes for placement. Missing details like overwrite behavior and failure modes leave room for improvement, but the core side effects are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the action and purpose, and the second explains outputs and integration. Every phrase adds value, and the structure front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and three parameters including a nested 'regions' array, the description does a solid job covering inputs, outputs, and return value. It could mention prerequisites (e.g., valid PNG, non-overlapping polygons) or error conditions, but it already conveys what the tool does, what it produces, and how it integrates with riv_create.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents most parameters (pngPath, outDir, polygon, keepInBase). The description adds meaningful semantics by explaining that the 'name' field becomes the filename for each part (<name>.png) and that output is meant for riv_create. This goes beyond the schema's bare property definitions, especially for the 'name' parameter which has no schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Cut polygon regions') and identifies the resource ('character PNG') and purpose ('parts-based rigging (cutout animation)'). It clearly distinguishes itself from the sibling tool riv_create by explaining how the output is consumed ('Use with riv_create: images per part + groups as pivots').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by explicitly recommending pairing with riv_create. It doesn't specify when not to use this tool or alternative slicing approaches, but the 'Use with riv_create' workflow provides strong guidance about the intended role in a rigging pipeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_studioStart the local Studio web UIA
Start a local web UI (Rive-editor-like 3-pane layout) for live-previewing and editing a .riv file: hierarchy tree + click/drag selection on canvas + inspector (position/size/color/text edits apply live), timeline with keyframe markers, hot reload on file change, auto-generated state machine input controls, event log, and (with scenePath) direct scene-JSON editing. The UI also has an 'Instructions for AI' box — fetch those with riv_studio_notes. Re-running riv_create/riv_edit on the watched file updates the browser instantly. Only one studio runs at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The .riv file to preview (watched for changes) | |
| port | No | Port (default 8787) | |
| stop | No | Stop the running studio instead | |
| scenePath | No | Scene spec JSON path — enables the edit+rebuild panel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden and does so admirably. It discloses key behaviors: 'Only one studio runs at a time,' 'hot reload on file change,' 'auto-generated state machine input controls,' 'event log,' and the 'Instructions for AI' box. It also mentions that re-running create/edit updates the browser instantly, which is a non-obvious behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but front-loaded with the core purpose. Every sentence adds a useful detail (features, limitations, companion tools). It could be broken into bullets for easier scanning, but no sentence is wasted and the length is justified given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description covers most relevant aspects: features, live behavior, single-instance limitation, and connection to other riv_* tools. It does not explicitly state what the tool returns (e.g., the local URL), which would be helpful for an agent, but it covers the essential context for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description doesn't need to restate parameter basics. It adds value for scenePath by explaining it 'enables the edit+rebuild panel' and mentions the watched path. The `stop` parameter is not described in prose, but the schema description already covers it. The added scenePath context pushes it above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Start a local web UI... for live-previewing and editing a .riv file.' It clearly differentiates the tool from siblings like riv_render_frame or riv_edit by emphasizing interactive editing, timeline, hot reload, and auto-generated controls. The rich feature list makes its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool—for interactive preview and editing—and even references companion tools: 'Re-running riv_create/riv_edit on the watched file updates the browser instantly' and 'fetch those with riv_studio_notes.' However, it does not explicitly name alternatives or say when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_studio_notesRead the Studio chat and reply into itA
The Studio web UI's Agent panel is a two-way chat. Use this tool for both halves of it.
READ: call with no
replyto fetch the messages the user typed (consumes the queue; the Studio shows them as picked up). Trigger on 'check the studio notes' / 「スタジオの指示を確認して」, or after opening riv_studio when the user mentions they left notes. Act on each instruction — usually riv_edit or riv_create on the watched file, which hot-reloads the browser.REPLY: after doing the work, call again with
replyset to a short summary of what you changed (and anything you could not do). It appears as your message in the same chat. ALWAYS reply — otherwise the user is left staring at the Studio with no idea whether you acted. Both can be done in one call: passreplytogether with the read to answer and pick up anything new at the same time.
| Name | Required | Description | Default |
|---|---|---|---|
| peek | No | Read without consuming | |
| port | No | Studio port (default 8787) | |
| reply | No | Message to post back into the Studio chat as the assistant (what you changed, what you skipped, what you need) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so excellently: it discloses that reading consumes the queue, that the Studio shows messages as picked up, that both operations can be combined in one call, and that the reply appears as the assistant's message. This goes well beyond a basic statement of function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place. It is front-loaded with the core purpose (two-way chat), then structured into READ and REPLY sections with precise, actionable details. The use of numbered items and examples makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, this description is highly complete. It covers both modes, when to trigger, queue consumption behavior, follow-up actions, the requirement to always reply, and the option to combine read/reply in one call. No critical gap is apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining that omitting `reply` triggers the read mode, that `reply` posts into the chat, and that passing `reply` together with read clears and retrieves new messages. It does not mention `peek` explicitly, so not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is for both reading and replying to the Studio chat, with an explicit two-mode structure. It distinguishes itself from sibling tools by describing the unique read/reply behavior rather than rendering or editing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit triggers ('check the studio notes', after opening riv_studio when the user leaves notes) and explains when to call with and without the `reply` parameter. It also names follow-up actions (riv_edit or riv_create) and stresses that replying is mandatory, giving clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
riv_visual_diffPixel-diff two .riv filesA
Render the same artboard/animation/time from two .riv files under identical conditions (forced to the same output size) and compute a thresholded per-pixel visual diff. Returns match rate, differing pixel count, and a diff visualization PNG (differing pixels in red, matching pixels dimmed).
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | Output diff PNG path (default: alongside pathA) | |
| time | No | Seconds to advance before capturing (default 0) | |
| pathA | Yes | Path to the first .riv file | |
| pathB | Yes | Path to the second .riv file | |
| width | No | ||
| height | No | ||
| artboard | No | ||
| animation | No | ||
| threshold | No | Max per-channel diff (0-255) still counted as a match (default 16) | |
| background | No | ||
| stateMachine | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses forced identical output size, thresholding behavior, and the exact visualization color scheme (red/dim), adding context beyond the schema. It does not cover failure modes or requirements like matching artboards, but provides solid behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and every clause adds value. There is no redundancy or fluff, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description explains the core behavior and return values but leaves background and stateMachine parameters unexplained. It gives a good baseline but does not fully document all configuration options, especially optional selectors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 45%, so the description compensates by clarifying that artboard, animation, and time parameters select the rendering context, width/height are forced to identical sizes, threshold controls matching strictness, and out specifies the PNG path. It does not explain background or stateMachine, but most parameters are implicitly covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders two .riv files under identical conditions and computes a thresholded per-pixel visual diff, explicitly listing output contents (match rate, pixel count, diff PNG). The phrase 'visual diff' differentiates it from sibling tools like riv_diff and riv_ab_compare.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly implies usage for comparing visual output of two .riv files but does not explicitly state when to choose this tool over alternatives or provide exclusions. It lacks direct references to riv_diff or riv_ab_compare, so the guidance is implied rather than explicit.
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 tool update
- Changed
riv_studio_notes1 field changed- added
Input schema / properties / replyAdded value: +{ + "description": "Message to post back into the Studio chat as the assistant (what you changed, what you skipped, what you need)", + "type": "string" +}
30 tool updates
v0.5.0- First observed
riv_ab_compare - First observed
riv_asset_search - First observed
riv_batch_render - First observed
riv_create - First observed
riv_critique - First observed
riv_decompile - First observed
riv_design_tokens - First observed
riv_diff - First observed
riv_dump - First observed
riv_edit - First observed
riv_extract_assets - First observed
riv_generate_code - First observed
riv_import_svg - First observed
riv_inspect - First observed
riv_lint - First observed
riv_list - First observed
riv_lottie_import - First observed
riv_optimize - First observed
riv_play_state_machine - First observed
riv_render_apng - First observed
riv_render_frame - First observed
riv_render_gif - First observed
riv_render_sprites - First observed
riv_render_video - First observed
riv_rig_character - First observed
riv_setup - First observed
riv_slice_image - First observed
riv_studio - First observed
riv_studio_notes - First observed
riv_visual_diff
TDQS
Scored across 30 tools
Most tools have clearly distinct purposes, and the descriptions explicitly disambiguate adjacent families like riv_visual_diff vs riv_ab_compare and riv_inspect vs riv_dump vs riv_decompile. The main risk is the large cluster of render/import/review tools, where an agent could momentarily pick the wrong one without reading the descriptions carefully.
All tools share the riv_ prefix and snake_case, and most follow a verb-first pattern like riv_create, riv_render_frame, or riv_import_svg. However, several names are noun phrases or reverse the verb/object order, such as riv_asset_search, riv_lottie_import, riv_batch_render, riv_visual_diff, and riv_studio_notes, so the pattern is not fully uniform.
At 30 tools, this is a heavy surface area and exceeds the 25+ threshold, especially when many tools belong to the same families. Several render tools could plausibly be unified behind a single format parameter, and the diff/compare/review cluster adds similar cognitive load.
The surface covers the full Rive production pipeline: discovery, inspection, creation, editing, optimization, decompilation, linting, critique, import from SVG/Lottie/icons, rendering to many formats, batch/CI workflows, rigging, asset extraction, code generation, and a live studio. There are no obvious dead ends, and the intended workflows are explicitly supported.
Maintenance
Related MCP Connectors
Turn Claude into a creative studio: DNA-locked characters, images, video, voiceover — 55 tools.
Build, version, review, and export websites, web apps, and games from a conversation.
Read, edit, publish, and preview your pepita websites from Claude.
Create AI animations and export transparent sprite sheets, alpha video, frames, and game assets.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceOrchestrates Rive animations by enabling discovery, integration, and composition across frameworks like React and Vue, with code generation and multi-backend storage.5-
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to inspect, validate, control, and ship Rive animation files with 11 tools for parsing, scanning, generating types, comparing files, and more.6-
- FlicenseNot gradedqualityDmaintenanceEnables Claude Code to automate Mixamo: browse/search animations, upload custom characters via Auto-Rigger, set animation parameters, and download animations with your character.2-
- FlicenseAqualityCmaintenanceEnables Claude to programmatically create and modify Figma animations (keyframes and motion styles) using the Figma Motion API via a plugin bridge.10-