Rive Animation ViewerBLOCK
Rive animation desktop viewer (Tauri) dual platform (Mac/PC) . Features demo bundle generation for distributing self-contained animation executables to clients. Embedded MCP Server
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
A local and desktop viewer for .riv files with runtime controls, JavaScript configuration editing, ViewModelInstance debugging tools, media and standalone export, a bundled native MCP sidecar, and desktop auto-update support.
For media export and recording, see Media export and recording. Release history belongs in the changelog; validation evidence is kept in reports.
Release
- Prepared release candidate:
2.5.9(native acceptance and publication pending). - Current public release:
2.5.8(GitHub release). - macOS downloads and updater apps are Developer ID signed, notarized, and stapled; updater payloads retain their separate update signatures.
Regression Gates
The repo has explicit prebuild guards for the application, export, and window-chrome surfaces:
npm run check:architectureenforces file-size and folder-shape budgetsnpm run check:depsenforces dependency-cruiser import boundariestests/smoke/ui-regressions.smoke.test.jsprotects the shared scrollbar contract, custom window-chrome structure, Tauri window config, and exported demo chrome contracttests/unit/ui/window-chrome.test.jsprotects desktop window-control wiring and Tauri/non-Tauri behavior splitnpm run testruns the full Vitest suite before every package buildcargo check --manifest-path src-tauri/Cargo.tomlvalidates the native Tauri layer
These gates reduce regression risk, but they remain code and DOM contract tests. Packaged desktop behavior still requires native acceptance with a real .riv file.
Quick Start
npm install npm start # Opens the browser DEV viewer at http://localhost:1420; MCP uses isolated port 9278
Browser preview and packaged DEV sessions may share port 9278, but the bridge always routes agent commands to the packaged desktop app while it is connected. The b
3e744cdedc13OBSERVED · 2026-10-09Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add rav-landing-page -- npx -y [email protected]
{
"mcpServers": {
"rav-landing-page": {
"command": "npx",
"args": [
"-y",
"[email protected]"
]
}
}
}Exposed tools (47)
23 read · 19 write · 5 destructive. Blast radius: 5 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
generate_web_instantiation_code | read | Generate a copy-paste-ready web instantiation snippet for the animation currently loaded in RAV. |
rav_apply_code | write | Apply the current editor code and reload the animation with the new |
rav_capture_canvas | read | Capture the currently rendered RAV canvas as a PNG image with dimensions, renderer, and playback-surface metadata. |
rav_configure_workspace | write | Set workspace UI state inside RAV. This can open or close the left/right |
rav_console_clear | destructive | Clear the visible transcript of the bottom console panel (Events or JS mode). Does not close the panel. |
rav_console_close | read | Close the JavaScript console panel (switches back to Event Console mode). |
rav_console_exec | write | Execute JavaScript in the REPL console. The code is evaluated in the |
rav_console_open | read | Open the bottom console panel. Defaults to JS mode. Optional |
rav_console_read | read | Read the JS console transcript, including REPL input/result rows and |
rav_console_set_filter | write | Apply filters to the rendered console transcript. Mirrors the existing on-screen filter toggles. |
rav_console_set_mode | write | Set the bottom console panel mode to Event Console ( |
rav_eval | read | Evaluate arbitrary JavaScript with explicit surface authority. |
rav_export_demo | read | Export the current animation as a self-contained standalone HTML demo file. |
rav_export_demo_visual | read | Orchestrate the Snippet & Export Controls dialog visually: open the dialog, apply the control selection, set package source and snippet mode, click Export, and write the demo to output_path. |
rav_get_artboards | read | List all artboard names available in the currently loaded .riv file. |
rav_get_editor_code | read | Get the current code in the RAV script editor (CodeMirror). |
rav_get_event_log | read | Get recent event log entries from RAV. Events include native runtime |
rav_get_global_vm_tree | read | List every file-level global ViewModel with its live hierarchy, paths, kinds, and values. |
rav_get_state_machines | read | List all state machine names on the current artboard. |
rav_get_vm_tree | read | Get the full ViewModel hierarchy tree for the loaded animation. Returns |
rav_global_vm_clear_image | destructive | Clear an image property on a named file-level global ViewModel through the authoritative playback surface. |
rav_global_vm_fire | write | Fire a trigger on a named file-level global ViewModel. |
rav_global_vm_get | read | Get a value from a named file-level global ViewModel. |
rav_global_vm_set | write | Set a number, boolean, string, enum, or color property on a named file-level global ViewModel. |
rav_global_vm_set_image | write | Set an image property on a named file-level global ViewModel through the authoritative playback surface. |
rav_open_file | read | Open a .riv file in RAV by its absolute file path. The file is read from |
rav_open_isolated_playback | read | Open the current animation in a separate, ordinary opaque Tauri webview using the exact self-contained standalone-export payload. |
rav_pause | read | Pause animation playback. |
rav_play | write | Start or resume animation playback. |
rav_reset | destructive | Reset and restart the animation from the beginning, preserving ViewModel |
rav_reset_artboard | destructive | Reset to the default artboard and default state machine that was detected when the file was first loaded. |
rav_set_alignment | write | Set the canvas alignment within the viewer. |
rav_set_anonymous_usage | write | Enable or disable RAV anonymous version reporting through the same preference controller used by Settings. |
rav_set_canvas_color | write | Set the canvas background color. Use |
rav_set_canvas_size | write | Set explicit canvas pixel sizing. Use mode |
rav_set_editor_code | write | Replace the code in the RAV script editor. This does NOT reload the |
rav_set_layout | write | Set the canvas layout fit mode. |
rav_set_runtime | write | Switch the Rive runtime engine. |
rav_status | read | Get current RAV application status: loaded file, runtime, playback state, |
rav_switch_artboard | read | Switch to a different artboard and/or playback target (state machine or animation). |
rav_switch_vm_instance | read | Switch to a specific ViewModel instance key and confirm that the dedicated playback surface bound that exact instance. |
rav_toggle_instantiation_controls_dialog | read | Open, close, or toggle the Snippet & Export Controls dialog inside RAV. |
rav_vm_clear_image | destructive | Clear a ViewModel image through the authoritative playback surface. |
rav_vm_fire | write | Fire a trigger ViewModel property by path. |
rav_vm_get | read | Get the current value of a ViewModel property by path. Use rav_get_vm_tree |
rav_vm_set | write | Set the value of a ViewModel property by path. Supports number, boolean, |
rav_vm_set_image | write | Set a ViewModel image through the authoritative playback surface using a bounded byte array. |
Trust audit
BLOCKgrade F · trust 41/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | FAIL |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (12 observation(s))
- Network
- declared (10 observation(s))
- Shell
- declared (9 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
demo-payload.js
payload.js
var value = await settleRenderSurfaceEvalValue(eval(expression));
var config = (new Function('return (' + code + '\n);'))();const result = await eval(expression);
await exec(code);
watch-controls.js
console.log(base2 + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);'Unable to acknowledge staged renderer readiness; waiting for its retry beacon.',
const requestPath = new URL(request.url, 'http://127.0.0.1').pathname;
const baseUrl = `http://127.0.0.1:${port}/${token}`;Some("http://127.0.0.1:43991/token/latest.json"),Some("http://127.0.0.1:43991/latest.json"),"http://127.0.0.1/latest.json",
var LowTypes = /* @__PURE__ */ dec("88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866var ArabicTypes = /* @__PURE__ */ dec("44444488266272889999999999922222222222222222222222222222222222222222222222299999999999999999999944444444446442228222222222222222222222222222222222222222222222222const LowTypes = dec("8888888888888888888888888888888888866688888878783333333333788888800000000000000000000000000888888000000000000000000000000008888888888888888888888888888888888888786666888808888866const ArabicTypes = dec("4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222const LowTypes = /*@__PURE__*/dec("888888888888888888888888888888888886668888887878333333333378888880000000000000000000000000088888800000000000000000000000000888888888888888888888888888888888888878666token: "abcdefghijklmnopqrstuv".to_string(),
token: "abcdefghijklmnopqrstuv".to_string(),
rav_console_clear, rav_global_vm_clear_image, rav_reset, rav_reset_artboard, rav_vm_clear_image
.dependency-cruiser.cjs
.lighthouserc.json
const helpers = new Function(
Gates applied: no_behavioural_pass.
3e744cdedc13full audit observations/trust-audit/mcp-server/ivg-design__rive-animation-viewer.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-09 | 3e744cdedc13 | BLOCK | F | 41 | first audit |
Questions
What is the Rive Animation Viewer MCP server?
Rive animation desktop viewer (Tauri) dual platform (Mac/PC) . Features demo bundle generation for distributing self-contained animation executables to clients. Embedded MCP Server
What tools does Rive Animation Viewer expose?
47 in total: 23 read-only, 19 that write, and 5 that can delete or overwrite (rav_console_clear, rav_global_vm_clear_image, rav_reset, rav_reset_artboard, rav_vm_clear_image). Every one is listed on this page with its risk.
Is Rive Animation Viewer safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (41/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 5 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Rive Animation Viewer need?
No credential environment variables were found in its source, so it appears to need none.
How does Rive Animation Viewer run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as rav-landing-page at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (3e744cdedc13), read on 2026-10-09. The repository is watched and re-audited when it changes.