# io.github.ODU33104/rive-mcp (npm · rive-mcp-server)

Free, editor-less MCP server for Rive: create, edit, inspect, render and preview .riv animations

- Trust score: 67/100 (medium)
- Change this week: +18
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `rive-mcp-server`: 67/100 (this document), [markdown](https://verifymcp.io/servers/odu33104-rive-mcp/rive-mcp-server.md), [page](https://verifymcp.io/servers/odu33104-rive-mcp/rive-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `rive-mcp-server`
- Version: `0.4.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 88/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (99 of 103), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (99 of 103), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: the license (SEE LICENSE IN LICENSE) isn't a recognized OSI-approved license.
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5863 tokens (~209/item across 28 items; 28 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 91/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 72% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add odu33104-rive-mcp -- npx -y rive-mcp-server
```

### Codex

```bash
codex mcp add odu33104-rive-mcp -- npx -y rive-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "odu33104-rive-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "rive-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add odu33104-rive-mcp --command npx --arg -y --arg rive-mcp-server
```

### Hermes

```yaml
mcp_servers:
  odu33104-rive-mcp:
    command: "npx"
    args: ["-y", "rive-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "odu33104-rive-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "rive-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 66, +43)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional regression] License: unverified → fail
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: SEE LICENSE IN LICENSE

### 2026-07-31 (score 23, −26)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 49)

First indexed and scored.

## MCP tools (28)

### `riv_list` (~40 tokens)

List .riv files

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

Input parameters:

- `dir` (string, required): Directory to search (absolute or relative)

### `riv_inspect` (~61 tokens)

Inspect a .riv file

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.

Input parameters:

- `path` (string, required): Path to the .riv file

### `riv_render_frame` (~147 tokens)

Render a single frame to PNG

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

Input parameters:

- `animation` (string): Linear animation name
- `artboard` (string): Artboard name (default: first)
- `background` (string): CSS background color (default: transparent)
- `height` (integer)
- `outPath` (string): Output PNG path (default: alongside the .riv)
- `path` (string, required): Path to the .riv file
- `stateMachine` (string): State machine name (takes precedence)
- `time` (number): Seconds to advance before capturing (default 0)
- `width` (integer)

### `riv_render_gif` (~159 tokens)

Render an animation to GIF

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

Input parameters:

- `animation` (string): Animation name (default: first state machine or animation)
- `artboard` (string)
- `background` (string): CSS background color (default white — GIF has no alpha)
- `duration` (number): Seconds to render (default 2)
- `fps` (integer): Frames per second (default 20)
- `outPath` (string): Output GIF path (default: alongside the .riv)
- `path` (string, required): Path to the .riv file
- `stateMachine` (string)
- `width` (integer): Output width (default: artboard width, capped 800)

### `riv_render_apng` (~249 tokens)

Render an animation to APNG

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.

Input parameters:

- `animation` (string): Animation name (default: first state machine or animation)
- `artboard` (string)
- `background` (string): CSS background color when transparent=false (default #ffffff)
- `duration` (number): Seconds to render (default 2)
- `fps` (integer): Frames per second (default 20)
- `height` (integer)
- `loops` (integer): Loop count (0 = infinite, default 0)
- `out` (string): Output path, .apng or .png (default: <name>.apng alongside the .riv)
- `path` (string, required): Path to the .riv file
- `stateMachine` (string)
- `transparent` (boolean): Render on a transparent background to keep APNG alpha (default true). Set false to composite onto 'background'
- `width` (integer): Output width (default 480)

### `riv_play_state_machine` (~102 tokens)

Interactively drive a state machine

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

Input parameters:

- `artboard` (string)
- `background` (string)
- `path` (string, required): Path to the .riv file
- `stateMachine` (string): State machine name (default: first)
- `steps` (array, required): Sequence of interaction steps
- `width` (integer)

### `riv_generate_code` (~64 tokens)

Generate integration code

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.

Input parameters:

- `framework` (string, required)
- `path` (string, required): Path to the .riv file

### `riv_dump` (~75 tokens)

Dump .riv binary structure

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.

Input parameters:

- `full` (boolean): Return every object (default: summary + first 50)
- `path` (string, required): Path to the .riv file

### `riv_lint` (~117 tokens)

Diagnose a .riv file for structural problems

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

Input parameters:

- `path` (string, required): Path to the .riv file

### `riv_design_tokens` (~157 tokens)

Generate a design-token set (palette / motion / layout)

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

Input parameters:

- `mood` (string)
- `scheme` (string): Default dark
- `seed` (string): Brand/seed color #RRGGBB (optional; mood default hue otherwise)

### `riv_critique` (~287 tokens)

Critique a .riv: filmstrip + onion skin + motion vectors + metrics + checklist

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.

Input parameters:

- `animation` (string): Animation to sample (default: first)
- `artboard` (string)
- `frames` (integer): Frames to sample across the duration (default 6)
- `individualFrames` (boolean): Also return each sampled frame as a separate full-size image (default false)
- `path` (string, required): Path to the .riv file
- `stateMachine` (string)
- `width` (integer): Width of each filmstrip cell (default 200 — keep small, it saves tokens)

### `riv_import_svg` (~195 tokens)

Import an SVG as Rive vector shapes

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.

Input parameters:

- `idPrefix` (string): Prefix for generated shape ids (avoid collisions)
- `outSpec` (string, required): Output scene-fragment JSON path (e.g. logo.scene.json)
- `svg` (string): Inline SVG markup (alternative to svgPath)
- `svgPath` (string): Path to the .svg file

### `riv_asset_search` (~147 tokens)

Search/fetch professional vector icons (Iconify)

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.

Input parameters:

- `icon` (string): Icon to fetch, e.g. 'solar:rocket-bold' (from a previous search)
- `idPrefix` (string)
- `limit` (integer): Max results (default 24)
- `outSpec` (string): Required with icon: output scene-fragment JSON path
- `query` (string): Search terms, e.g. 'rocket launch'

### `riv_lottie_import` (~357 tokens)

Import a Lottie/bodymovin JSON as a Rive scene fragment (art + timing + easing)

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.

Input parameters:

- `idPrefix` (string): Prefix for generated group/shape ids (avoid collisions)
- `json` (string): Inline Lottie JSON text (alternative to path)
- `outSpec` (string, required): Output scene-fragment JSON path (e.g. anim.scene.json)
- `path` (string): Path to the Lottie .json file

### `riv_decompile` (~201 tokens)

Decompile a .riv into an editable scene spec

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.

Input parameters:

- `outSpec` (string): Write the scene spec JSON here (default: return summary only)
- `path` (string, required): Path to the .riv file

### `riv_create` (~1340 tokens)

Create a .riv file from a scene spec

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,…

Input parameters:

- `outPath` (string, required): Output .riv path
- `previewTime` (number): Seconds into first animation for the preview frame (default 0.4)
- `scene` (object, required): Scene spec (see tool description for schema)

### `riv_edit` (~215 tokens)

Edit an existing .riv file

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

Input parameters:

- `edits` (array, required)
- `outPath` (string): Output path (default: overwrite source)
- `path` (string, required): Source .riv path

### `riv_optimize` (~306 tokens)

Optimize a .riv file (lossless)

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.

Input parameters:

- `dryRun` (boolean): Report the plan only; don't write anything (default false)
- `outPath` (string): Output path (default: overwrite source)
- `path` (string, required): Source .riv path
- `removeUnreferenced` (boolean): Remove unreferenced interpolators/events/empty tracks (default true)
- `thinKeyframes` (boolean): Douglas-Peucker thin redundant keyframes on linear-only runs (default true)
- `tolerance` (number): Thinning tolerance as a ratio of each track's own value range (default 0.01 = 1%, conservative)

### `riv_slice_image` (~104 tokens)

Slice a PNG into parts for rigging

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.

Input parameters:

- `outDir` (string, required): Directory to write part PNGs into
- `pngPath` (string, required): Source PNG path
- `regions` (array, required)

### `riv_rig_character` (~235 tokens)

Auto-rig a character PNG

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.

Input parameters:

- `artboardHeight` (number)
- `artboardWidth` (number)
- `backgroundColor` (string)
- `eyes` (array): Eye rects in image px coords (generates blink overlays)
- `furColor` (string): Eyelid/patch color matching the fur (default #f8eee2)
- `headRatio` (number): Top fraction of the image that is 'head' (default 0.45)
- `outPath` (string, required): Output .riv path
- `parts` (object): Named cutout parts, e.g. {earL, earR, tail}. Names containing 'ear' attach to the head
- `pngPath` (string, required): Character PNG (transparent background recommended)

### `riv_diff` (~60 tokens)

Diff two .riv files

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

Input parameters:

- `maxDiffs` (integer): Max object diffs to list (default 30)
- `pathA` (string, required)
- `pathB` (string, required)

### `riv_render_video` (~194 tokens)

Render an animation to a WebM video

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

Input parameters:

- `animation` (string)
- `artboard` (string)
- `background` (string): CSS background color (default: transparent)
- `duration` (number): Seconds to record (default: one animation loop, or 2s)
- `fps` (integer): captureStream() frame rate (default 30)
- `height` (integer)
- `out` (string): Output .webm path (default: alongside the .riv)
- `path` (string, required): Path to the .riv file
- `stateMachine` (string)
- `width` (integer)

### `riv_render_sprites` (~202 tokens)

Render an animation to a sprite sheet PNG

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.

Input parameters:

- `animation` (string)
- `artboard` (string)
- `background` (string)
- `count` (integer): Number of frames (default 16)
- `duration` (number): Seconds spanned by the frames (default: one animation loop, or 2s)
- `fps` (integer): Metadata playback fps (default: count/duration)
- `height` (integer)
- `out` (string): Output PNG path (default: alongside the .riv); metadata is written next to it with a .json extension
- `path` (string, required): Path to the .riv file
- `stateMachine` (string)
- `width` (integer)

### `riv_extract_assets` (~119 tokens)

Extract embedded assets from a .riv file

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.

Input parameters:

- `outDir` (string): Output directory (default: <file>.assets alongside the .riv)
- `path` (string, required): Path to the .riv file

### `riv_visual_diff` (~202 tokens)

Pixel-diff two .riv files

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

Input parameters:

- `animation` (string)
- `artboard` (string)
- `background` (string)
- `height` (integer)
- `out` (string): Output diff PNG path (default: alongside pathA)
- `pathA` (string, required): Path to the first .riv file
- `pathB` (string, required): Path to the second .riv file
- `stateMachine` (string)
- `threshold` (number): Max per-channel diff (0-255) still counted as a match (default 16)
- `time` (number): Seconds to advance before capturing (default 0)
- `width` (integer)

### `riv_studio` (~197 tokens)

Start the local Studio web UI

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.

Input parameters:

- `path` (string, required): The .riv file to preview (watched for changes)
- `port` (integer): Port (default 8787)
- `scenePath` (string): Scene spec JSON path — enables the edit+rebuild panel
- `stop` (boolean): Stop the running studio instead

### `riv_studio_notes` (~141 tokens)

Fetch human instructions from the Studio UI

Fetch pending instructions the user typed into the Studio web UI's 'Instructions for AI' box. Call this when the user says things like 'check the studio notes' / 「スタジオの指示を確認して」, or after opening riv_studio when the user mentions they left notes. Consumes (clears) the queue by default; the Studio UI then shows the notes were picked up. Act on each instruction (usually via riv_edit or riv_create on the watched file — changes hot-reload in the browser).

Input parameters:

- `peek` (boolean): Read without consuming
- `port` (integer): Studio port (default 8787)

### `riv_setup` (~190 tokens)

Install the bundled rive-design-guidelines skill into this environment

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.

Input parameters:

- `projectDir` (string): Project root for scope=project (default: current working directory)
- `scope` (string): project = <projectDir>/.claude/skills (default), user = ~/.claude/skills

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/odu33104-rive-mcp/rive-mcp-server#diagnostics

## Score history

- 2026-08-03: 67
- 2026-08-02: 66
- 2026-08-01: 23
- 2026-07-31: 23
- 2026-07-30: 49
- 2026-07-28: 49
- 2026-07-27: 49

## Links

- npm package: https://www.npmjs.com/package/rive-mcp-server
- Socket report: https://socket.dev/npm/package/rive-mcp-server
- Repository: https://github.com/ODU33104/rive-mcp
- Changelog RSS feed: https://verifymcp.io/servers/odu33104-rive-mcp/rive-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/odu33104-rive-mcp/rive-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/odu33104-rive-mcp/rive-mcp-server
