Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.ODU33104/rive-mcp

NPM · RIVE-MCP-SERVER

Free, editor-less MCP server for Rive: create, edit, render .riv — plus an AI-collaborative Studio

Available components

+20 this week 87 Trust /100

Last scanned (19 hours ago)

Scores higher than 91% of npm servers

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 31 of 97 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency87
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to ODU33104/rive-mcp). View diagnostics → Pass
  • Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.Unverified
  • Actively maintained (last published 5 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8959 tokens (~255/item across 35 items; 35 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 35 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 35 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 0
    • Stability: 0.97 → pass security
  • 3 Nov 26 0
    • Stability: pass → 0.97 functional
  • 30 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 29 Oct 26 +5
    • Known CVEs: unverified → fail ▼ security
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
    • Dependency health: unverified → 0.86 ▲ functional
    • Package version: 0.8.0 → 0.12.0 functional
    • Package version: 0.8.0 → 0.9.0 functional
  • 28 Oct 26 −20
    • Known CVEs: fail → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Stability: 0.97 → pass security
    • Dependency health: 0.86 → unverified ▼ functional
    • Package version: 0.7.0 → 0.8.0 functional
    • Package version: 0.7.0 → 0.7.1 functional
  • 27 Oct 26 +20
    • Known CVEs: unverified → fail ▼ security
    • Malware scan: unverified → pass ▲ security
    • Dependency health: unverified → 0.86 ▲ functional
    • Stability: pass → 0.97 functional
  • 26 Oct 26 −9
    • Known CVEs: fail → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Provenance: fail → pass ▲ security
    • The attested source repository moved: ODU33104/rive-mcp security
    • Dependency health: 0.86 → unverified ▼ functional
    • Tool coverage: 77% → 100% ▲ functional
    • Security disclosure: fail → pass ▲ functional
    • Package version: 0.6.2 → 0.7.0 functional
    • Package version: 0.6.2 → 0.6.3 functional
  • 24 Oct 26 −5
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: pass → fail ▼ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed npm/rive-mcp-server@0.12.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo ODU33104/rive-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/ODU33104/rive-mcp/.github/workflows/release.yml@refs/tags/v0.12.0
Rekor log index 3570808411
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:56dada54f6b96d56dcbeee33c548f4a904596f9bbb7e59aa87d3ae20efb1e2359200fe504a06e9e8c37b593b5c0368cd34af44b2fb551f72256e8b0f3

Background: How many MCP packages publish verified provenance →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 97 packages
Packages resolved 97
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 35 exposed · ~8,959 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
riv_ab_compare ~416

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: <file>' / 'B: <file>' 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.

NameTypeReqDescription
animationstring–Animation name, applied to both files (default: first)
artboardstring–Artboard name, applied to both files (default: first)
backgroundstring–CSS background per panel (default: white for gif, transparent for apng)
durationnumber–Seconds to render (default: the longer of the two files' own animation lengths)
formatstring–Output format (default gif)
fpsinteger–Default 20
heightinteger–Panel height (default: derived from file A's own aspect ratio)
labelsboolean–Burn 'A: <file>' / 'B: <file>' labels into each frame (default true)
layoutstring–Panel arrangement (default horizontal)
outstring–Output path (default: alongside pathA)
pathAstringyesFirst .riv file
pathBstringyesSecond .riv file
stateMachinestring–State machine name, applied to both files (takes precedence over animation)
widthinteger–Panel width (default 320); panel height is derived from file A's aspect ratio and then forced onto file B so both panels align

No output schema declared.

No examples provided.

riv_asset_search ~175

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.

NameTypeReqDescription
iconstring–Icon to fetch, e.g. 'solar:rocket-bold' (from a previous search)
idPrefixstring–Prefix for generated shape ids; applies when fetching an icon (default: the icon name with non-alphanumerics replaced, plus an underscore)
limitinteger–Max results (default 24)
outSpecstring–Required with icon: output scene-fragment JSON path
querystring–Search terms, e.g. 'rocket launch'

No output schema declared.

No examples provided.

riv_batch_render ~203

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. Every job needs a format (in the job or in defaults), or that job fails. 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.

NameTypeReqDescription
defaultsobject–Shared defaults merged under each job (job-level values win)
jobsarrayyesJobs to render, in order

No output schema declared.

No examples provided.

riv_create ~1,722

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 polished results (gradients, organic bezier curves, 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…

NameTypeReqDescription
outPathstringyesOutput .riv path
previewTimenumber–Seconds into first animation for the preview frame (default 0.4)
sceneobjectyesScene spec with optional Flex layouts (see tool description)

No output schema declared.

No examples provided.

riv_critique ~304

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.

NameTypeReqDescription
animationstring–Animation to sample (default: first)
artboardstring–Artboard name (default: first artboard)
framesinteger–Frames to sample across the duration (default 6)
individualFramesboolean–Also return each sampled frame as a separate full-size image (default false)
pathstringyesPath to the .riv file
stateMachinestring–State machine name (takes precedence over animation)
widthinteger–Width of each filmstrip cell (default 200 — keep small, it saves tokens)

No output schema declared.

No examples provided.

riv_decompile ~201

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.

NameTypeReqDescription
outSpecstring–Write the scene spec JSON here (default: return summary only)
pathstringyesPath to the .riv file

No output schema declared.

No examples provided.

riv_design_tokens ~168

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).

NameTypeReqDescription
moodstring–Sets the default hue when seed is absent (default calm)
schemestring–Default dark
seedstring–Brand/seed color #RRGGBB (optional; mood default hue otherwise)

No output schema declared.

No examples provided.

riv_diff ~74

Structural diff between two .riv files: type count changes and per-object property differences.

NameTypeReqDescription
maxDiffsinteger–Max object diffs to list (default 30)
pathAstringyesPath to the first .riv file
pathBstringyesPath to the second .riv file

No output schema declared.

No examples provided.

riv_dump ~75

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.

NameTypeReqDescription
fullboolean–Return every object (default: summary + first 50)
pathstringyesPath to the .riv file

No output schema declared.

No examples provided.

riv_edit ~221

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).

NameTypeReqDescription
editsarrayyesEdit operations, applied in order
outPathstring–Output path (default: overwrite source)
pathstringyesSource .riv path

No output schema declared.

No examples provided.

riv_export_lottie ~111

Export one .riv animation to Lottie JSON. Reports unsupported and approximated features, and indicates whether pixel comparison was available.

NameTypeReqDescription
animationstring–Animation name (default: first; all unsupported)
artboardstring–Artboard name (default: first)
fpsnumber–Output FPS (default: animation FPS)
outstring–Output JSON path (default: adjacent .lottie.json)
pathstringyesPath to a .riv file

No output schema declared.

No examples provided.

riv_extract_assets ~119

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.

NameTypeReqDescription
outDirstring–Output directory (default: <file>.assets alongside the .riv)
pathstringyesPath to the .riv file

No output schema declared.

No examples provided.

riv_generate_code ~80

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.

NameTypeReqDescription
frameworkstringyesTarget: react, js (plain JavaScript), vue, svelte or flutter
pathstringyesPath to the .riv file

No output schema declared.

No examples provided.

riv_import_svg ~195

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: <text> (use texts[] with a font), <image>, filters, masks.

NameTypeReqDescription
idPrefixstring–Prefix for generated shape ids (avoid collisions)
outSpecstringyesOutput scene-fragment JSON path (e.g. logo.scene.json)
svgstring–Inline SVG markup (alternative to svgPath)
svgPathstring–Path to the .svg file

No output schema declared.

No examples provided.

riv_inspect ~135

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).

NameTypeReqDescription
pathstringyesPath to the .riv file

No output schema declared.

No examples provided.

riv_lint ~117

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).

NameTypeReqDescription
pathstringyesPath to the .riv file

No output schema declared.

No examples provided.

riv_list ~40

Recursively find .riv files under a directory and report size and format version for each.

NameTypeReqDescription
dirstringyesDirectory to search (absolute or relative)

No output schema declared.

No examples provided.

riv_lottie_import ~345

Convert a Lottie (bodymovin, .json) animation — the format of LottieFiles' free animation library — into a riv_create scene fragment. Unlike riv_import_svg (shapes only), this keeps the keyframed timing: position, rotation, scale and opacity with their exact bezier easing (not mapped 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.

NameTypeReqDescription
idPrefixstring–Prefix for generated group/shape ids (avoid collisions)
jsonstring–Inline Lottie JSON text (alternative to path)
outSpecstringyesOutput scene-fragment JSON path (e.g. anim.scene.json)
pathstring–Path to the Lottie .json file

No output schema declared.

No examples provided.

riv_optimize ~314

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. Each step is a boolean that is on by default (set it to false to skip that step), and the run is idempotent/safe to repeat. Use dryRun=true to see the removal/thinning plan without writing anything. Run riv_lint afterwards if in doubt.

NameTypeReqDescription
dryRunboolean–Report the plan only; don't write anything (default false)
outPathstring–Output path (default: overwrite source)
pathstringyesSource .riv path
removeUnreferencedboolean–Remove unreferenced interpolators/events/empty tracks (default true)
thinKeyframesboolean–Douglas-Peucker thin redundant keyframes on linear-only runs (default true)
tolerancenumber–Thinning tolerance as a ratio of each track's own value range (default 0.01 = 1%, conservative)

No output schema declared.

No examples provided.

riv_play_state_machine ~126

Run a .riv state machine step by step: set/fire inputs, advance time, observe state transitions, and optionally capture frames. Returns a transition report.

NameTypeReqDescription
artboardstring–Artboard name (default: first artboard)
backgroundstring–CSS background color (default: transparent)
pathstringyesPath to the .riv file
stateMachinestring–State machine name (default: first)
stepsarrayyesSequence of interaction steps
widthinteger–Output width in px (default 480)

No output schema declared.

No examples provided.

riv_preflight ~105

Detect .riv features and compare optional target runtime versions with documented minimums. Report unsupported, conditional, or unverified support, and inspect the file with bundled official WASM.

NameTypeReqDescription
pathstringyesPath to the .riv file
strictboolean–Count unverified compatibility as a warning (default false)
targetsarray–Target runtimes (default: all supported target names)
versionsobject–Target runtime versions as numeric dotted strings

No output schema declared.

No examples provided.

riv_render_apng ~279

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.

NameTypeReqDescription
animationstring–Animation name (default: first state machine or animation)
artboardstring–Artboard name (default: first artboard)
backgroundstring–CSS background color when transparent=false (default #ffffff)
durationnumber–Seconds to render (default 2)
fpsinteger–Frames per second (default 20)
heightinteger–Output height in px (default: keeps the artboard aspect ratio)
loopsinteger–Loop count (0 = infinite, default 0)
outstring–Output path, .apng or .png (default: <name>.apng alongside the .riv)
pathstringyesPath to the .riv file
stateMachinestring–State machine name (takes precedence over animation)
transparentboolean–Render on a transparent background to keep APNG alpha (default true). Set false to composite onto 'background'
widthinteger–Output width (default 480)

No output schema declared.

No examples provided.

riv_render_frame ~170

Render one frame of a .riv animation or state machine to PNG. Returns the image inline and saves it to disk.

NameTypeReqDescription
animationstring–Linear animation name
artboardstring–Artboard name (default: first)
backgroundstring–CSS background color (default: transparent)
heightinteger–Output height in px (default: keeps the artboard aspect ratio)
outPathstring–Output PNG path (default: alongside the .riv)
pathstringyesPath to the .riv file
stateMachinestring–State machine name (takes precedence)
timenumber–Seconds to advance before capturing (default 0)
widthinteger–Output width in px (default: artboard width)

No output schema declared.

No examples provided.

riv_render_gif ~172

Render a .riv animation (or state machine idle playback) to an animated GIF file for preview.

NameTypeReqDescription
animationstring–Animation name (default: first state machine or animation)
artboardstring–Artboard name (default: first artboard)
backgroundstring–CSS background color (default white — GIF has no alpha)
durationnumber–Seconds to render (default 2)
fpsinteger–Frames per second (default 20)
outPathstring–Output GIF path (default: alongside the .riv)
pathstringyesPath to the .riv file
stateMachinestring–State machine name (takes precedence over animation)
widthinteger–Output width in px (default 480)

No output schema declared.

No examples provided.

riv_render_sprites ~270

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.

NameTypeReqDescription
animationstring–Animation name; ignored when stateMachine is set (default: the first state machine, else the first animation)
artboardstring–Artboard name (default: first artboard)
backgroundstring–CSS background color (default: transparent)
countinteger–Number of frames (default 16)
durationnumber–Seconds spanned by the frames (default: one animation loop, or 2s)
fpsinteger–Metadata playback fps (default: count/duration)
heightinteger–Output height in px (default: keeps the artboard aspect ratio)
outstring–Output PNG path (default: alongside the .riv); metadata is written next to it with a .json extension
pathstringyesPath to the .riv file
stateMachinestring–State machine name (takes precedence over animation)
widthinteger–Output width in px (default: artboard width)

No output schema declared.

No examples provided.

riv_render_video ~255

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).

NameTypeReqDescription
animationstring–Animation name; ignored when stateMachine is set (default: the first state machine, else the first animation)
artboardstring–Artboard name (default: first artboard)
backgroundstring–CSS background color (default: transparent)
durationnumber–Seconds to record (default: one animation loop, or 2s)
fpsinteger–captureStream() frame rate (default 30)
heightinteger–Output height in px (default: keeps the artboard aspect ratio)
outstring–Output .webm path (default: alongside the .riv)
pathstringyesPath to the .riv file
stateMachinestring–State machine name (takes precedence over animation)
widthinteger–Output width in px (default: artboard width)

No output schema declared.

No examples provided.

riv_repair ~114

Repair lint findings one change at a time. Compare pixels for each candidate, skip visual changes with reasons, and validate the final result before writing. dryRun never writes.

NameTypeReqDescription
dryRunboolean–Inspect and validate without writing (default false)
fixesarray–Selected fix types (default all supported types)
outstring–Output path (default: <name>.repaired.riv next to the source; the source is never overwritten)
pathstringyesSource .riv path

No output schema declared.

No examples provided.

riv_rig_character ~260

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.

NameTypeReqDescription
artboardHeightnumber–Artboard height in px (default 460)
artboardWidthnumber–Artboard width in px (default 600)
backgroundColorstring–CSS background color (default: transparent)
eyesarray–Eye rects in image px coords (generates blink overlays)
furColorstring–Eyelid/patch color matching the fur (default #f8eee2)
headRationumber–Top fraction of the image that is 'head' (default 0.45)
outPathstringyesOutput .riv path
partsobject–Named cutout parts, e.g. {earL, earR, tail}. Names containing 'ear' attach to the head
pngPathstringyesCharacter PNG (transparent background recommended)

No output schema declared.

No examples provided.

riv_setup ~190

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.

NameTypeReqDescription
projectDirstring–Project root for scope=project (default: current working directory)
scopestring–project = <projectDir>/.claude/skills (default), user = ~/.claude/skills

No output schema declared.

No examples provided.

riv_slice_image ~113

Cut polygon regions out of a character PNG for parts-based rigging (cutout animation). Writes each part as <name>.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.

NameTypeReqDescription
outDirstringyesDirectory to write part PNGs into
pngPathstringyesSource PNG path
regionsarrayyesPolygon regions to cut out, one per part

No output schema declared.

No examples provided.

riv_studio ~337

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.

NameTypeReqDescription
pathstringyesThe .riv file to preview (watched for changes)
portinteger–Port (default 8787)
scenePathstring–Scene spec JSON path — enables the edit+rebuild panel
shareboolean–Also open a READ-ONLY view on the LAN (default false: Studio listens on 127.0.0.1 only). Returns a URL with an unguessable token; viewers can play/scrub/drive state-machine inputs but cannot edit, sa…
shareHoststring–Local IPv4 address to listen on for the read-only view (default: the auto-detected LAN address; '0.0.0.0' = all interfaces)
sharePortinteger–Port for the read-only view (default: port + 1)
stopboolean–Stop the running studio instead

No output schema declared.

No examples provided.

riv_studio_notes ~251

Read the Studio web UI's Agent chat and reply into it. 1) READ: call with no `reply` to 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. 2) REPLY: after doing the work, call again with `reply` set 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: without a reply the user cannot tell whether you acted. Both can be done in one call: pass `reply` together with the read to answer and pick up anything new at the same time.

NameTypeReqDescription
peekboolean–Read without consuming
portinteger–Studio port (default 8787)
replystring–Message to post back into the Studio chat as the assistant (what you changed, what you skipped, what you need)

No output schema declared.

No examples provided.

riv_ui_detect ~511

Find the rectangles, text runs and images in a UI screenshot or design comp. Returns a nested element tree with rects, corner radii and fill colours, plus a numbered overlay PNG. Coordinates are in source pixels (accurate to about 1-2 px); corner radii to about 1 px. Each element carries renderMode ("vector-panel" | "raster" — how it would be reconstructed; flat fills are test-rendered and turned into crops when more than 2% of their visible pixels would differ, the measured share is returned as renderRisk) and semanticHint ("panel" | "text" | "image" | "line" — what it looks like) as independent fields. Next, give each element a role and pass the result to riv_ui_prototype. This is geometry only: it does not know a button from a card. If you have the vector source, pass svgPath instead of imagePath: nothing is estimated, the element tree is the SVG's own group nesting, non-rectangular artwork comes through as "vector-shape" with its real bezier vertices, <text> becomes "vector-text" (editable Rive text — the bundled Inter is substituted unless you pass fonts, and a run whose glyphs are missing is baked as a picture instead, always with a warning), embedded <image> data comes through as its own pixels, and Figma layer names arrive as roleHint.

NameTypeReqDescription
figmaUrlstring–A Figma link to one frame (Copy link to selection), fetched as SVG through the Figma REST API. Off unless FIGMA_TOKEN is set in the server's environment; without it this errors and nothing is request…
fontsarray–Fonts for the SVG's <text>. svgPath only — pass the same list to riv_ui_prototype
imagePathstring–Screenshot or design comp (PNG/JPEG)
maxElementsnumber–Keep at most this many elements, largest first (default 120, or 300 for svgPath)
minAreanumber–Ignore regions smaller than this many pixels (default 576). imagePath only
overlayPathstring–Where to write the numbered overlay PNG
svgPathstring–Vector source instead of a screenshot (Figma/Illustrator SVG export). Nothing is estimated: rects, fills, corner radii and nesting come straight from the file

No output schema declared.

No examples provided.

riv_ui_prototype ~521

Take the elements from riv_ui_detect, assign each one a role, and get back a working .riv: every element becomes a shape or an image asset, each gets an entrance appropriate to its role, and buttons and cards get hover and press states. Roles: background, nav, header, card, panel, button, fab, text, icon, image, chart, list-item, badge, divider, avatar, input. Elements you leave unassigned animate as a generic panel. Pass exactly one of imagePath, svgPath or figmaUrl, the same one you gave riv_ui_detect. If you changed minArea or maxElements there, pass the same values here so the ids match. With svgPath no screenshot is embedded, every element stays editable, and the file reproduces the SVG; its <text> becomes real Rive text you can re-type at runtime, and its embedded <image> data becomes an image asset. figmaUrl fetches the same thing straight from Figma, and needs FIGMA_TOKEN.

NameTypeReqDescription
ambientboolean–Give roles with an idle motion a looping ambient animation (default true)
entranceMsnumber–How long the whole entrance takes, in milliseconds
figmaUrlstring–The same Figma link you passed to riv_ui_detect. Off unless FIGMA_TOKEN is set in the server's environment. The frame is fetched again, so a design that changed in between can move the ids
fontsarray–Fonts for the SVG's <text>. svgPath only. Without a match the bundled Inter is used and a warning says so; a run whose glyphs the font lacks (CJK, say) is baked as a picture rather than embedded as t…
imagePathstring–The same screenshot you passed to riv_ui_detect
interactionsboolean–Add hover and press states where the role has them (default true)
maxElementsnumber–Must match the riv_ui_detect call (default 120, or 300 for svgPath)
minAreanumber–Must match the riv_ui_detect call. imagePath only (default 576)
outPathstringyesWhere to write the .riv
rolesarrayyesRole for each element. Ids you omit fall back to a generic panel.
staggernumber–Delay between elements entering, in milliseconds
svgPathstring–The same SVG you passed to riv_ui_detect (instead of imagePath)

No output schema declared.

No examples provided.

riv_visual_diff ~270

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).

NameTypeReqDescription
animationstring–Animation name; ignored when stateMachine is set (default: the first state machine, else the first animation)
artboardstring–Artboard name (default: first artboard)
backgroundstring–CSS background color (default: transparent)
heightinteger–Output height in px (default: keeps the artboard aspect ratio)
outstring–Output diff PNG path (default: alongside pathA)
pathAstringyesPath to the first .riv file
pathBstringyesPath to the second .riv file
stateMachinestring–State machine name (takes precedence over animation)
thresholdnumber–Max per-channel diff (0-255) still counted as a match (default 16)
timenumber–Seconds to advance before capturing (default 0)
widthinteger–Output width in px (default: artboard width)

No output schema declared.

No examples provided.

Install

How do I install the io.github.ODU33104/rive-mcp server?

io.github.ODU33104/rive-mcp runs locally as an npm package, launched with npx -y rive-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · rive-mcp-server

# add to Claude Code
claude mcp add odu33104-rive-mcp -- npx -y rive-mcp-server
Common questions

What is the io.github.ODU33104/rive-mcp server?

io.github.ODU33104/rive-mcp is listed in the public MCP registry as io.github.ODU33104/rive-mcp. Free, editor-less MCP server for Rive: create, edit, render .riv, plus an AI-collaborative Studio. This page covers its npm package (rive-mcp-server).

Is the io.github.ODU33104/rive-mcp server safe to use?

io.github.ODU33104/rive-mcp scores 87 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.ODU33104/rive-mcp server expose?

io.github.ODU33104/rive-mcp exposes 35 tools: riv_list, riv_inspect, riv_render_frame, riv_render_gif, riv_render_apng, and 30 more. Their descriptions and schemas cost roughly 8,959 tokens of context every time the server is loaded.

Is the io.github.ODU33104/rive-mcp server still maintained?

io.github.ODU33104/rive-mcp is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.