Skip to main content
Glama

Author a VNyan node graph

vnyan_graph_write

Builds and writes VNyan VTuber node graphs to JSON, or directly to a slot, for live loading in VNyan without restart.

Instructions

Builds a node graph from a friendly spec (nodes with caller-chosen ids + literal values, exec/value connections referencing those ids). By default (no 'slot') it EXPORTS the graph as a plain JSON file - import it into VNyan live via its own 'Load Graph' menu (replaces the currently active tab, VNyan stays running, no restart). PREFER THAT even when VNyan is closed: the 'slot' path (redeemsN.json + its asredeemsN.json mirror) REQUIRES VNyan closed and is unreliable, because VNyan persists its own in-memory copy of a tab over the file - a verified slot write has been observed silently replaced by an older graph, surviving only in the asredeemsN.json mirror. If you use 'slot', re-verify after VNyan restarts. Returns a 'warnings' array of static-analysis findings when it spots one of the mistakes VNyan itself accepts silently (a blendshape written twice on one execution path, a parameter read before the node that writes it, a float wired into BlendshapeNode's int value socket, or MathExpNode on a fast timer) - the graph is still written, so read them. Most action nodes have zero execOut sockets (check vnyan_node_schema) - they are terminal, not links in a serial chain. To run several actions off one event/trigger, fan its single execOut out to each action's execIn directly, rather than chaining action-to-action. FAN-OUT EXECUTES IN CONNECTION ORDER within a single tick (multicast delegate), so terminal nodes CAN be sequenced by wiring order - a chain of ParamOpNodes each reading the previous one's parameter resolves in one tick, with no OrderedNode and no lag. You therefore do NOT need MathExpNode to avoid ordering problems, and reaching for it on a timer is a frame-rate disaster - see vnyan_guide topic:'graph-performance'. BlendshapeNode specifics: its wired value socket is cast to int (put a DecimalToNumberNode in front of any decimal source, or the write throws and vanishes), 'bsName' splits on ';' so one node can drive several shapes from one evaluation, and bsValue '0' REMOVES the override rather than writing zero - so never zero a shape and then write it in the same tick. Branching nodes (OrderedNode, every Filter*Node, CompareTextNode, RandomNode, ...) declare their exec outputs as an array sized by the Unity prefab, so vnyan_node_schema reports a floor rather than an exact count - wiring past that floor is allowed for those types, and the sockets are created as needed. Node-value file-path fields (sound/avatar files) can't be set as literals here since VNyan encrypts them - wire a SetTextParamNode/TextReplaceNode into that value socket instead, the same pattern VNyan's own Crowd Control example graph uses. VALUE SOCKETS ARE STRONGLY TYPED AT RUNTIME despite values[] always being strings in the saved JSON - wiring a raw int/text output straight into a float/bool input throws inside VNyan and silently aborts the whole call (see valueConnections.toIndex below). If writing directly to a slot, VNyan only EXECUTES slots covered by settings.json 'NodeGraphCount' - a graph placed beyond that count loads with no error but never runs; use vnyan_settings_get area:'misc' to check it first. If using the default export+Load-Graph workflow instead, note VNyan's live Load Graph updates the running graph immediately but only writes it to redeemsN.json on VNyan's own quit - vnyan_graph_read can lag behind what's actually loaded until then. Full cookbook: vnyan_guide topic:'node-authoring'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slotNoAdvanced/fallback: write directly into this slot instead of exporting a file. REQUIRES VNyan closed.
nodesYesEvery node in the graph
graphNameYesDisplay name for the graph tab
connectionsNoExecution-flow wiring. Most action nodes have ZERO execOut sockets (check vnyan_node_schema) - they are terminal, not links in a chain. To run several actions off one event, add one connection per action from that same event node, rather than chaining action-to-action.
exportFileNameNoFile name for the export (default: graphName + '.json'), written under the configured export directory
valueConnectionsNoData-flow wiring between value sockets - see valueConnections.toIndex for the critical type-safety rule.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.1.0

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden. It discloses many behavioral traits: slot writes can be silently overwritten, warnings array for static-analysis findings, type-safety that throws and aborts silently, NodeGraphCount execution limitation, and load-graph lag behind vnyan_graph_read. This is exceptional transparency.

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

Conciseness4/5

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

The description is very long but well-structured: it starts with the primary purpose and mode, then progressively covers warnings, action-node wiring, blendshape specifics, branching, file-path fields, type safety, and slot-count caveats. While it could be trimmed, each section adds unique value for this complex tool, so it earns its place.

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

Completeness5/5

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

Given the tool's complexity (graph authoring with multiple connection types, runtime type-safety, VNyan quirks) and the absence of annotations or output schema, the description is remarkably complete. It covers edge cases, error conditions, related tools (vnyan_node_schema, vnyan_guide), and even the return of a warnings array. Nothing essential is missing.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds significant meaning beyond the schema: it explains slot as advanced/fallback with a closed-VNyan requirement, exportFileName default behavior, and the critical valueConnections.toIndex type-safety rule and routing through converters. It enriches parameters with essential context for correct invocation.

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

Purpose5/5

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

The description states a specific verb ('Builds a node graph') and resource ('from a friendly spec'), and clearly differentiates from siblings: it contrasts with vnyan_graph_read (reading) and mentions vnyan_node_schema for node types. An agent can tell this is the authoring/writing tool among the vnyan_* family.

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

Usage Guidelines5/5

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

Extensive when/when-not guidance: explicitly prefers the export path over slot ('PREFER THAT even when VNyan is closed'), warns about slot unreliability, explains when to use fan-out vs chaining, and routes to vnyan_guide for more. It covers exclusions and alternatives thoroughly.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seth-rah/vnyan-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server