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

io.github.kumoproductions/mcp-cinema4d

NPM · @KUMOPRODUCTIONS/MCP-CINEMA4D · SCANNED AUG 3

MCP server for Cinema 4D — entity CRUD, parameter-level access, batched undo, security controls.

+51 this week 75 Trust /100
Trust breakdown (6 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 →

Supply Chain Security86
  • No malware found by supply-chain analysis.Pass
  • Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to kumoproductions/mcp-cinema4d). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 47 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability59
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 10466 tokens (~166/item across 63 items; 63 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 Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 96% of tool parameters carry a description.Partial
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · @kumoproductions/mcp-cinema4d

# add to Claude Code
claude mcp add kumoproductions-mcp-cinema4d -- npx -y @kumoproductions/mcp-cinema4d
# add to Codex CLI
codex mcp add kumoproductions-mcp-cinema4d -- npx -y @kumoproductions/mcp-cinema4d
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kumoproductions-mcp-cinema4d": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@kumoproductions/mcp-cinema4d"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add kumoproductions-mcp-cinema4d --command npx --arg -y --arg @kumoproductions/mcp-cinema4d
# ~/.hermes/config.yaml
mcp_servers:
  kumoproductions-mcp-cinema4d:
    command: "npx"
    args: ["-y", "@kumoproductions/mcp-cinema4d"]
// mcp.json
{
  "mcpServers": {
    "kumoproductions-mcp-cinema4d": {
      "command": "npx",
      "args": [
        "-y",
        "@kumoproductions/mcp-cinema4d"
      ]
    }
  }
}
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.

  • 3 Aug 26 +3
    • Stability: unverified → 0.23 functional
  • 2 Aug 26 +63
    • Install scripts: unverified → pass security
    • Known CVEs: unverified → partial security
    • Provenance: unverified → pass security
    • Malware scan: unverified → pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • The attested source repository moved: kumoproductions/mcp-cinema4d security
    • Dependency health: partial → unverified functional
    • Security disclosure: fail → unverified functional
    • Schema quality: unverified → good functional
    • MCP protocol: unverified → pass functional
    • Maintenance: unverified → pass functional
    • License: unverified → pass functional
    • Tool coverage: unverified → 100 functional
    • Licence: MIT functional
  • 1 Aug 26 −10
    • Tool coverage: 100 → unverified functional
    • Dependency health: unverified → partial functional
  • 31 Jul 26 −6
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 −18
    • Malware scan: pass → unverified security
  • 28 Jul 26 +19
    • Tool coverage: unverified → 100 functional
    • First check of Schema quality: unverified functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 96 functional
    • First check of Schema quality: fail functional
  • 27 Jul 26 24

    First indexed and scored.

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 3 Aug 2026 · Analysed npm/@kumoproductions/[email protected]

Provenance verified

Ecosystem: npm · Outcome: verified

Reason: verified

Source repo:
kumoproductions/mcp-cinema4d
Certificate issuer:
https://token.actions.githubusercontent.com
Certificate SAN:
https://github.com/kumoproductions/mcp-cinema4d/.github/workflows/release.yml@refs/tags/v0.3.1
Rekor log index:
1848867410
Predicate type:
https://slsa.dev/provenance/v1
Subject digest:
sha512:21f4f3dabf3264a27cff987376d6c22a8ee92c8b73c2339d952f6e7ccf7155df97d04fd3ea9705a07096f88410c818369260130a8d6091835139d5803
Discovery method:
attestation_endpoint
Dependencies 94 packages

94 packages in the resolved dependency tree · 94 deprecated · 29 stale.

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools — 63 exposed · ~10,466 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.

Tool Tokens
add_user_data ~187

Add a new User Data slot to any BaseList2D (common rigging / control-exposure pattern). Returns the slot's DescID (as a nested list) which can be piped into `get_params` / `set_params` as a path. dtype aliases: real, long, bool, vector, string, color, filename, time, link.

NameTypeReqDescription
defaultDefault stored on the descriptor.
dtypestringyesUser-data dtype.
handleyesTarget (object / tag / material / etc.).
maxnumberNumeric upper bound (real / long).
minnumberNumeric lower bound (real / long).
namestringyesDisplay name for the new UD slot.
stepnumberSpinner step size.
valueInitial value. For vector / color, pass [x,y,z].

No output schema declared.

No examples provided.

apply_graph_description ~333

Build or mutate a node graph using maxon.GraphDescription's declarative dict syntax. Supports creating nodes (`$type`), assigning stable ids (`$id`), wiring connections via 'thisPort -> childPort' keys (the value is the nested upstream node), and setting port values inline. Example: {"$type":"Output","Surface -> outColor":{"$type":"Standard Material","$id":"mat","Base/Color":[1,0,0]}}. Works for material graphs (standard/redshift) and the scene-nodes (neutron) document graph via `scope:"document"`. For scene-nodes, `$type` must be a node-template asset id from `list_graph_node_assets` (node_space:"scenenodes"), e.g. "net.maxon.node.invert" — NOT the net.maxon.corenode:* ids; the scene-nodes path supports creation + connections + port values (graph queries/labels are material-only). Creates the graph on demand by default.

NameTypeReqDescription
create_graphbooleanCreate the graph if missing. Default true.
descriptionobjectyesmaxon.GraphDescription dict (nested; $type / $id / '->' keys).
handleMaterial handle. Required unless `scope:'document'`.
node_spacestringAlias 'standard' | 'redshift' | 'scenenodes' or a maxon.Id. Default 'standard' for materials, 'scenenodes' for document scope.
scopestringTarget the active document's scene-nodes graph instead of a material.

No output schema declared.

No examples provided.

apply_xpresso_graph ~328

Declarative builder for an Xpresso (classic GvNodeMaster) graph — mirror of `apply_graph_description` but for Xpresso rather than Maxon node materials. Creates nodes (CreateNode) and wires connections (GvPort.Connect) in one call. Accepts an operator_id as an int (e.g. c4d.ID_OPERATOR_CONST=1001150) or short alias ('object'|'const'|'result'|'math'|'range_mapper'|'condition'|'compare'|'memory'|'iterate'|'bool'|'freeze'|'formula'|'realtovect'|'vecttoreal'|'matrix2vect'|'vect2matrix'|'link'|'spy'|'python'). Optionally creates the Texpresso tag when given an object handle and `create_tag_if_missing:true`. Example: build a `Object.Global Position -> Result` graph in three calls (create Cube → apply_xpresso_graph → EventAdd).

NameTypeReqDescription
connectarrayConnection list. `from` defaults to dir='out' and `to` defaults to dir='in'. Internally always calls outputPort.Connect(inputPort).
create_tag_if_missingbooleanWhen handle is an object and no Texpresso tag exists, create one. Default true.
handleyesXpresso tag handle (Texpresso) or an object handle (pass create_tag_if_missing:true to auto-add a tag).
nodesobjectyesNode specs keyed by caller-chosen stable id (used in `connect`).

No output schema declared.

No examples provided.

assign_material ~209

Link a material to an object by creating a Texture tag (or updating an existing one when `update_if_exists:true`). Avoids wrangling TEXTURETAG_* param ids by hand. Projection aliases: spherical, cylindrical, flat, cubic, frontal, spatial, uvw, shrinkwrap, camera.

NameTypeReqDescription
materialyesMaterial to assign.
namestringOptional display name for the Texture tag.
objectyesTarget object.
projectionstringProjection alias. Omit to preserve the existing projection.
restrict_to_selectionstringPolygon-selection tag name to restrict this texture to.
update_if_existsbooleanIf a Texture tag already exists on the object, update it in place instead of appending. Default false.
uv_offsetarray[u, v] offset applied to TEXTURETAG_OFFSETX/Y.
uv_tilesarray[u, v] tile count applied to TEXTURETAG_TILESX/Y.

No output schema declared.

No examples provided.

assign_to_layer ~68

Place a target (object / tag / material) on a named layer. Pass `layer:null` to clear the assignment. The layer must exist — call `create_layer` first if needed.

NameTypeReqDescription
layeryesLayer name, or null to clear.
targetyesEntity to assign.

No output schema declared.

No examples provided.

batch ~102

Run many generic ops in one RPC. Each op is applied in order; by default failures are recorded per op and the batch continues. The whole batch is wrapped in a single undo group. Useful for 'apply X to all matching entities' workflows (pair with list_entities + name_pattern to get handles).

NameTypeReqDescription
opsarrayyesOperations to execute in order.
stop_on_errorbooleanAbort on first error (default false — errors are collected per op).

No output schema declared.

No examples provided.

call_command ~150

Invoke a Cinema 4D command by plugin id via c4d.CallCommand(). Works for built-in commands (render, save, make editable, ...) and any registered command plugin.

NameTypeReqDescription
command_idintegeryesCinema 4D command id. Examples: 12099 = Render to Picture Viewer, 12161 = Save Document, 12236 = Make Editable, 12168 = New Document. Use list_plugins (plugin_type="command") to discover.
subidintegerOptional sub-id (rarely needed).
timeout_msintegerRequest timeout in ms (default 60000). CallCommand often runs synchronously; increase for long-running ones like Render.

No output schema declared.

No examples provided.

clone_entity ~166

Duplicate an entity. Supports object / tag / material / shader (via GetClone + parent insert), render_data (doc.InsertRenderData — copies VideoPosts too), video_post (rd.InsertVideoPost), and take (TakeData.AddTake, copying existing overrides). Objects default to dropping next to the source; pass `parent` to place the clone elsewhere. Returns a handle to the new entity.

NameTypeReqDescription
handleyesSource entity to clone.
namestringOptional name for the clone.
parentFor objects: destination parent (defaults to source's sibling). For tags: required owner object. For shaders: required owner. For video_post: target render_data (defaults to source's host). For take:…

No output schema declared.

No examples provided.

close_document ~149

Close an open document, identified by its list `index` (from `list_documents`) or `name`. Pass exactly one of the two. A document with unsaved changes is refused unless `force:true` — closing discards unsaved work without a prompt (unlike the GUI close). C4D always keeps at least one document, so closing the last one leaves a fresh empty document active.

NameTypeReqDescription
forcebooleanClose even with unsaved changes, discarding them. Default false.
indexinteger0-based position in the document list (see `list_documents`).
namestringDocument name; errors if it matches zero or several open documents.

No output schema declared.

No examples provided.

create_entity ~381

Unified constructor for object / tag / material / shader / video_post. Handles parent linking, optional params, positions, and container slot assignment in one call. Returns the handle of the created entity (object handles include `path` for stable re-resolution) so you can chain set_params / set_keyframe. Note: `kind:"shader"` targets classical shader chains (Fusion, Colorizer, Xbitmap, …). For node-material edits (Standard node space / Redshift), use `apply_graph_description` instead. `kind:"video_post"` attaches a renderer effect (Octane 1029525, Redshift 1036219, Magic Bullet Looks 1054755, …) to a RenderData parent.

NameTypeReqDescription
kindstringyesEntity kind to create.
namestringOptional display name.
paramsobject{param_id: value} to set after allocation. Lists of 3 numbers become Vectors.
parentParent handle. Required for tag (owner object), shader (owner VideoPost / tag / material) and video_post (owner render_data). Optional for object (creates at scene root if omitted).
positionarrayRelative position [x,y,z] (objects only).
slotsarrayOwner BaseContainer slot ids to link the new shader into (e.g. [3740, 3741] for Octane AOV).
type_idyesPlugin id. Accepts a numeric id (c4d.Ocube=5159, c4d.Ttexture=5616, Octane renderer=1029525, …) or, for kind='object', an alias string: 'cube', 'sphere', 'cylinder', 'cone', 'torus', 'plane', 'disc',…

No output schema declared.

No examples provided.

create_layer ~134

Create a LayerObject at the document's layer root. With `update_if_exists:true` the existing layer with the same name is updated in place (idempotent). Pass `color:[r,g,b]` (0..1) and/or `flags:{solo,view,render,manager,locked,...}` to configure it.

NameTypeReqDescription
colorarray[r,g,b] in 0..1.
flagsobjectInitial flag values.
namestringyesLayer display name (also used for lookup).
update_if_existsbooleanIdempotent update. Default false.

No output schema declared.

No examples provided.

create_render_data ~252

Create (or update-if-exists) a RenderData with resolution / renderer / fps / frame range in one call. Returns the render_data handle for subsequent create_take / set_params chaining.

NameTypeReqDescription
fpsintegerFrame rate (also disables Use Project Frame Rate).
frame_endintegerFrame range end.
frame_sequencestringFrame range mode (default "manual" when frame_start/end given).
frame_startintegerFrame range start.
heightintegerOutput height (pixels).
make_activebooleanMake this the active render data.
namestringyesRender data name (used as handle).
paramsobjectExtra {param_id: value} to apply (any RDATA_* id).
parentstringParent render_data name to nest under (default: top level).
rendererRenderer plugin id, or alias: "octane"/"standard"/"physical"/"redshift"/"cycles"/"viewport".
update_if_existsbooleanIf a render data with this name already exists, update it instead of creating.
widthintegerOutput width (pixels).

No output schema declared.

No examples provided.

create_take ~215

Create or update a Take (AddTake + SetCamera + SetRenderData + SetChecked) in one call. New takes are checked by default so they participate in batch renders; pass `checked:false` to override. Returns the take handle — ideal for building per-shot take stacks programmatically.

NameTypeReqDescription
camerastringObject name to link as the take's camera override.
checkedbooleanChecked state for batch rendering (default true on create).
clear_camerabooleanExplicitly clear the camera override.
clear_render_databooleanExplicitly clear the render data override.
make_activebooleanMake this take the current take.
namestringyesTake name (used as handle).
parentstringParent take name (default: Main).
render_datastringRender data name to link as the take's render settings override.
update_if_existsbooleanIf a take with this name already exists, update it instead of creating.

No output schema declared.

No examples provided.

delete_keyframe ~137

Remove keys from a CTrack. Pass `frame` for a single-frame delete, or `start_frame` / `end_frame` (inclusive) for a range. Returns `{removed, track}`. Symmetric with `set_keyframe`.

NameTypeReqDescription
componentVector sub-component. null / omitted for scalar tracks.
end_frameintegerInclusive upper bound.
fpsintegerOverride for BaseTime conversion.
frameintegerSingle frame to remove.
handleyesAnimated target.
param_idintegeryesTop-level description id.
start_frameintegerInclusive lower bound.

No output schema declared.

No examples provided.

delete_track ~70

Remove an entire CTrack (identified by `param_id` + optional `component`) from the target. Returns `{removed: bool}`.

NameTypeReqDescription
componentVector sub-component. null / omitted for scalar tracks.
handleyesAnimated target.
param_idintegeryesTop-level description id.

No output schema declared.

No examples provided.

describe ~268

Dump all description parameters (id, name, cycle enum, current value) of a C4D entity resolved by handle. Use this to discover parameter IDs before reading/writing.

NameTypeReqDescription
handleyesC4D entity handle. Shapes: {kind:"object",name?|path?}, {kind:"render_data",name}, {kind:"take",name}, {kind:"material",name}, {kind:"tag",object?|object_path?,type_id?,tag_name?}, {kind:"video_post"…

No output schema declared.

No examples provided.

dump_shader ~426

Recursively dump a shader (resolved from a handle) into JSON. **Classical materials only** — node materials (Standard node space / Redshift / etc.) expose their shading as a maxon node graph; use `list_graph_nodes` / `apply_graph_description` for those instead. Captures type_id / type_name / name per node; promotes c4d.Xbitmap paths to a "file" field; heuristically surfaces image-like strings hiding in other shader BaseContainers as "file_candidates"; and expands shader links stored inside the container as "linked_shaders" (the shape used by Fusion / Colorizer whose internals don't appear via GetDown). Pair with list_entities kind=shader to discover shader handles.

NameTypeReqDescription
handleyesC4D entity handle. Shapes: {kind:"object",name?|path?}, {kind:"render_data",name}, {kind:"take",name}, {kind:"material",name}, {kind:"tag",object?|object_path?,type_id?,tag_name?}, {kind:"video_post"…
max_depthintegerMaximum recursion depth (default 5). 0 returns only the root node.

No output schema declared.

No examples provided.

get_container ~309

Dump the raw BaseContainer of a C4D entity (including hidden keys that don't show up in `describe`, e.g. Octane AOV shader slots at 3740/3741). Filter by key range to narrow output.

NameTypeReqDescription
handleyesC4D entity handle. Shapes: {kind:"object",name?|path?}, {kind:"render_data",name}, {kind:"take",name}, {kind:"material",name}, {kind:"tag",object?|object_path?,type_id?,tag_name?}, {kind:"video_post"…
id_fromintegerInclusive lower bound for container keys.
id_tointegerInclusive upper bound for container keys.

No output schema declared.

No examples provided.

get_document_state ~61

One-shot reader for the active document's key fields: fps, min/max and loop frame range, current frame, document name/path, and canonical handles for the active camera / take / render data. Pairs with `set_document` for the writer side.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_graph_info ~66

Report which node spaces a material exposes a graph in, which one is currently active, and the alias table the bridge understands. Use this before `apply_graph_description` to confirm the right `node_space` is addressable on this build / material.

NameTypeReqDescription
handleyesMaterial handle.

No output schema declared.

No examples provided.

get_keyframes ~135

Read the keys on a specific animation track. Combine with list_tracks to discover which (param_id, component) pairs are animated. Returns `[{frame, value, interp}]`. Optional start_frame / end_frame clip the range inclusively.

NameTypeReqDescription
componentSub-component for vector parameters. Omit / null for scalar tracks.
end_frameintegerInclusive upper frame bound.
fpsintegerOverride for BaseTime → frame conversion.
handleyesAnimated entity.
param_idintegeryesTop-level description id of the parameter.
start_frameintegerInclusive lower frame bound.

No output schema declared.

No examples provided.

get_mesh ~188

Read points and polygons (or spline segments) from an editable PointObject / PolygonObject / SplineObject. Primitives (Cube, Sphere, …) must be converted first via `modeling_command` make_editable. Triangles are returned as [a,b,c] (c==d in C4D storage), quads as [a,b,c,d]. Point and polygon counts are capped to 50,000 by default to protect JSON payload size — override via max_points / max_polys.

NameTypeReqDescription
handleyesTarget object (must be editable).
includearrayOptional extras. 'normals' adds phong-shaded vertex normals. 'selections' adds `point_selection` / `poly_selection` / `edge_selection` index lists.
max_pointsintegerDefault 50000.
max_polysintegerDefault 50000.

No output schema declared.

No examples provided.

get_object_layer ~39

Return the layer currently assigned to a target entity (object / tag / material), or null if unassigned.

NameTypeReqDescription
targetyesEntity to query.

No output schema declared.

No examples provided.

get_params ~363

Read parameter values on a C4D entity by id or DescID path. Each id may be: an int (top-level), a list [a, b, …] (chained DescID; dtypes inferred from the description), or contain 'x'/'y'/'z' for vector sub-components (e.g. [903, 'x'] = position.x). For explicit dtypes use [[id, 'real|long|bool|vector'], …]. Returns `{values: [{path, value}]}` in request order. Discover ids via `describe`.

NameTypeReqDescription
handleyesC4D entity handle. Shapes: {kind:"object",name?|path?}, {kind:"render_data",name}, {kind:"take",name}, {kind:"material",name}, {kind:"tag",object?|object_path?,type_id?,tag_name?}, {kind:"video_post"…
idsarrayyesList of parameter paths to read.

No output schema declared.

No examples provided.

get_selection ~68

Read the active document's current selection: the active object (primary), all selected objects, and the active tag / material. Useful for reacting to the user's current focus without asking them to re-pick entities. Returns canonical handles so results can be piped directly into describe / set_params / etc.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

import_scene ~145

Merge an external file (abc/fbx/obj/c4d/etc.) into the active document via MergeDocument. Returns the newly-imported top-level objects so they can be chained with set_params / create_entity / create_take. Optionally re-parents them under an existing object and renames the first root.

NameTypeReqDescription
filterstringScene filter (default "all").
parentOptional parent handle — newly-imported top-level objects are moved under this object.
pathstringyesAbsolute path to the file to merge (abc/fbx/obj/c4d/...).
renamestringOptional new name for the first imported top-level object.

No output schema declared.

No examples provided.

list_documents ~71

Enumerate the documents currently open in Cinema 4D. Each entry has its list `index` (the handle accepted by `set_active_document`), name, path and whether it is the active document. `get_document_state` only reports the active document; this is how you discover the others before switching.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_entities ~424

Enumerate scene entities of a given kind. Returns compact summaries (name, type_id, type_name, plus kind-specific fields — `is_active` for take / material / render_data). For kind=object also supports type_ids / tag_types / max_depth filters and include_tags / include_params to read data inline — so you can find 'all cubes with a Ttexture tag and their position in one call' without falling back to exec_python. Use this first to find what exists before `describe`/`set_params`. **Note:** kind=shader walks classical shader chains; for node-material graphs use `list_graph_nodes`.

NameTypeReqDescription
include_paramsarray(kind=object) Parameter ids to read per match. Returned under `params: {param_id: value}`.
include_tagsboolean(kind=object) Attach `tags: [{type_id, type_name, name}, ...]` to each match.
kindstringyesEntity kind to list.
max_depthinteger(kind=object) Skip objects deeper than this (root=0). Default: unlimited.
name_patternstringOptional regex to filter results by name (e.g. "^VFX_Shot00[2-9]$").
objectstringFilter tags to this object name (only for kind=tag). Omit to list tags on all objects.
object_pathstringFilter tags to this object path (only for kind=tag). Use when the name is not unique.
ownerOwner handle (required for kind=shader).
render_datastringRender data name (required for kind=video_post).
tag_typesarray(kind=object) Keep only objects carrying a tag whose type id is in this set (e.g. [5616] for Ttexture).
type_idsarray(kind=object) Keep only objects whose GetType() is in this set (e.g. [5159] for cubes).

No output schema declared.

No examples provided.

list_graph_node_assets ~164

Enumerate registered node-template asset ids for a node space — the ids you pass to `apply_graph_description` as `$type`. For the scene-nodes (neutron) space, results are filtered to the templates actually addable there (e.g. 'net.maxon.node.invert', 'net.maxon.node.access.composecolor64'); note these differ from the net.maxon.corenode:* ids that `list_graph_nodes` reports for existing nodes. `supported:false` comes back when the C4D build lacks the maxon framework.

NameTypeReqDescription
node_spacestringAlias 'standard' | 'redshift' | 'scenenodes' (a.k.a. 'neutron') or a fully-qualified maxon.Id. Default 'standard'.

No output schema declared.

No examples provided.

list_graph_nodes ~160

Walk a node graph and return a flat list of nodes. Target either a node-based material (via `handle`) or the active document's scene-nodes graph (via `scope:'document'`). `supported:false` comes back when the maxon framework is unavailable or no graph exists in the requested space.

NameTypeReqDescription
handleMaterial handle. Required unless `scope:'document'`.
node_spacestringAlias 'standard' | 'redshift' | 'scenenodes' / 'neutron' or a fully-qualified maxon.Id. Default 'standard' (materials) or 'scenenodes' (document).
scopestringSet to 'document' to target the scene-nodes (neutron) graph.

No output schema declared.

No examples provided.

list_layers ~60

Enumerate every LayerObject in the active document. Each entry returns the layer's name, optional color [r,g,b], and its flag dict (solo / view / render / manager / locked / generators / deformers / expressions / animation / xref).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_mograph_clones ~144

Read the per-clone transforms from a MoGraph generator (Cloner / Matrix / Tracer / …). The bridge forces a scene pass so the MoData array is populated before sampling. Returns `{count, returned, clones: [{index, pos, matrix?}]}`. `supported:false` when the build lacks c4d.modules.mograph or when the handle isn't a MoGraph generator.

NameTypeReqDescription
handleyesMoGraph generator (e.g. Omgcloner).
include_matrixbooleanInclude the 4x3 matrix per clone. Default true.
max_countintegerCap on clones returned. Default 2048.

No output schema declared.

No examples provided.

list_plugins ~197

Generalized plugin enumerator. Pass plugin_type (e.g. "material", "shader", "video_post", "command") or a raw int to FilterPluginList. Each entry includes "plugin" (parent folder of the binary, e.g. "OctaneRender 1.7.1") and "plugin_file" (binary basename) for host-plugin attribution. Filter results by name_pattern and/or plugin_pattern regex.

NameTypeReqDescription
name_patternstringOptional regex applied to plugin display name (e.g. "octane|convert").
plugin_patternstringOptional regex matched against the host plugin folder or binary filename (e.g. "octane" → "OctaneRender 1.7.1"). Useful for commands whose display name does not include the plugin brand.
plugin_typePlugin category: string alias or raw c4d.PLUGINTYPE_* integer. Defaults to 'command'.

No output schema declared.

No examples provided.

list_tracks ~76

Enumerate CTracks on the resolved entity. Returns `{name, param_id, component, dtype, key_count}` per track so callers can pipe the results straight into get_keyframes / set_keyframe. Vector tracks (Position, Rotation, Scale) surface as separate entries per component.

NameTypeReqDescription
handleyesEntity whose animation tracks to enumerate.

No output schema declared.

No examples provided.

list_user_data ~69

Enumerate the User Data slots on a target. Each entry carries `{desc_id, name, dtype, value}`. Feed `desc_id` back into `remove_user_data` / `get_params` / `set_params` as a DescID path.

NameTypeReqDescription
handleyesTarget to inspect.

No output schema declared.

No examples provided.

list_xpresso_nodes ~150

Walk an Xpresso (Texpresso / GvNodeMaster) tag and return a flat list of its GvNodes. Each entry carries a stable dotted-index path id ('0.2' = root's first child, its third child) plus port summaries. Use the id to address nodes from `apply_xpresso_graph`, `set_xpresso_port`, `remove_xpresso_node`, or any handle-taking tool via `{kind:'gv_node', tag, id}`. Accepts either a tag handle (Texpresso) or an object handle (uses that object's first Texpresso tag).

NameTypeReqDescription
handleyesXpresso tag handle or host object handle.

No output schema declared.

No examples provided.

modeling_command ~202

Run a Cinema 4D modeling operation via c4d.utils.SendModelingCommand on one or more target objects. Commands that produce new geometry (Current State to Object, Connect / Join, Split, Explode Segments) return handles to the inserted results; in-place commands (Make Editable, Subdivide, Triangulate, …) return the mutated targets. Aliases: current_state_to_object / cso, make_editable, connect / join, connect_delete, subdivide, triangulate, untriangulate, reverse_normals, align_normals, optimize, center_axis, split, explode_segments, melt, collapse, dissolve.

NameTypeReqDescription
commandyesAlias (see description) or raw MCOMMAND_* integer.
modestringMODELINGCOMMANDMODE_* selector. Default 'all'.
paramsobjectOptional BaseContainer params for the command (e.g. subdivision level).
targetsarrayyesTarget object handles.

No output schema declared.

No examples provided.

move_entity ~190

Reparent a node under a new parent, promote it to the top of its hierarchy, or reorder it relative to a sibling. Works on objects, takes, and render_data — siblings/parents must share the moved node's kind. Exactly one destination field must be provided (`parent`, `before`, `after`, or `to_root:true`). For takes, `to_root:true` reparents under Main; the Main take itself cannot be moved. Returns the node's new canonical handle so follow-up edits remain stable.

NameTypeReqDescription
afterInsert immediately after this sibling.
beforeInsert immediately before this sibling.
handleyesNode to move (object / take / render_data).
parentInsert as last child of this parent.
to_rootbooleanPromote to the top of the hierarchy (objects → doc root, takes → under Main, render_data → top level).

No output schema declared.

No examples provided.

new_document ~77

Insert a fresh empty BaseDocument into C4D's document list and (by default) switch focus to it. Useful for starting a clean scene without overwriting the current one.

NameTypeReqDescription
make_activebooleanSwitch the active document to the new one. Default true.
namestringOptional display name for the new document.

No output schema declared.

No examples provided.

open_document ~107

Load a Cinema 4D scene file as a new document. Unlike `import_scene` (which merges into the current doc), this opens the file as its own document. Pass `make_active:true` (default) to switch focus to the loaded document. Differs from `import_scene` which calls MergeDocument.

NameTypeReqDescription
make_activebooleanSwitch the active document to the newly loaded one. Default true.
pathstringyesAbsolute path to a loadable scene file.

No output schema declared.

No examples provided.

ping ~18

Check connectivity to the Cinema 4D bridge plugin.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

preview_render ~316

Quick agent-friendly verification render. Uses the Viewport renderer with the active editor view temporarily switched to Constant Shading (Lines) — sketch-style and fast. Independent of the active RenderData (built freestanding, never inserted) and restores BaseDraw / camera / time / take in finally. Returns a base64 PNG inline so the agent can directly view it. Use `view: top|bottom|left|right|front|back` for an auto-framed temp camera, or `camera` to render through a named scene camera. Pass `save_path` to also write the PNG to disk.

NameTypeReqDescription
camerastringOptional scene camera object name. Mutually exclusive with a non-'current' view.
frameintegerOptional frame number; defaults to the current document time.
heightintegerOutput height in pixels (default 1024, max 4096).
save_pathstringOptional absolute PNG path. When set, the rendered image is also written to disk (parent directory must already exist). The base64 PNG is still returned inline.
takestringOptional take name to switch to before rendering. Restored afterward.
viewstringPreset view. 'current' (default) uses the active BaseDraw camera. The other presets place a temp camera looking at the scene bounds from that side; the temp camera is removed in finally.
widthintegerOutput width in pixels (default 1024, max 4096).

No output schema declared.

No examples provided.

remove_entity ~27

Delete the resolved entity (wrapped in an undo step).

NameTypeReqDescription
handleyesEntity to delete.

No output schema declared.

No examples provided.

remove_graph_node ~126

Delete a node by id from a node-material graph. The id must match the node's stable maxon.Id (as reported by list_graph_nodes or assigned via $id in apply_graph_description).

NameTypeReqDescription
handleMaterial handle. Required unless `scope:'document'`.
node_idstringyesThe id of the node to remove.
node_spacestringAlias 'standard' | 'redshift' | 'scenenodes' or maxon.Id. Default 'standard'.
scopestringTarget the scene-nodes graph on the active document.

No output schema declared.

No examples provided.

remove_user_data ~67

Delete a User Data slot by its DescID path (as returned by `list_user_data` or `add_user_data`). Wrapped in undo.

NameTypeReqDescription
desc_idarrayyesDescID path — list of [id, dtype, creator?] levels.
handleyesTarget.

No output schema declared.

No examples provided.

remove_xpresso_node ~76

Delete a GvNode from an Xpresso graph. The handle must be a gv_node handle pointing at the target (use `list_xpresso_nodes` to discover its path id). All incoming / outgoing connections on the node are severed automatically.

NameTypeReqDescription
handleyesgv_node handle for the node to remove.

No output schema declared.

No examples provided.

render ~94

Render the active Cinema 4D document at its currently-active render data settings. To change resolution / renderer / frame range / etc., adjust the active RenderData first via `create_render_data` (with `update_if_exists:true` on the active RD) or `set_params`. May take up to 60 seconds.

NameTypeReqDescription
output_pathstringOptional absolute path to write the rendered image. Defaults to a temp file.

No output schema declared.

No examples provided.

reset_scene ~139

Clear scene state in one RPC. With `prefix` (e.g. 'e2e_') removes only objects / materials / non-active render data / non-main takes whose name starts with the prefix, then flushes the undo buffer — cheap cleanup for test suites. Without prefix, swaps the active document for a fresh empty BaseDocument (everything goes). Much faster than chained remove_entity calls when cleanup involves animated objects.

NameTypeReqDescription
keep_active_rdbooleanPrefix-mode only: protect the currently-active RenderData from deletion. Default true.
prefixstringOnly remove entities whose name starts with this prefix. Omit for full reset.

No output schema declared.

No examples provided.

sample_transform ~161

Evaluate the scene at each requested frame and return the object's transform. Useful to verify alembic / constraint / xpresso-driven animation without writing a bespoke exec_python sampler.

NameTypeReqDescription
formatstringOutput format: "off_rot" returns pos+rot(HPB radians); "matrix" returns 4x3 rows.
fpsintegerTime base override (default: doc fps).
framesarrayyesFrames to sample (1..500). The scene is evaluated at each frame via ExecutePasses.
handleyesTarget object handle (must resolve to a BaseObject).
restore_timebooleanRestore the original playhead after sampling (default true).
spacestringTransform space (default "global").

No output schema declared.

No examples provided.

save_document ~127

Save the active document to disk. Path must be absolute; the parent directory must exist. Supported formats: c4d (default), abc / alembic, fbx, obj, stl, ply, usd / usda, gltf. With `copy:true` the document's internal name/path is left unchanged (Save-As-Copy behaviour).

NameTypeReqDescription
copybooleanSave as copy — document's active path/name stays unchanged. Default false.
formatstringExport format alias. Default 'c4d'.
pathstringyesAbsolute output path.

No output schema declared.

No examples provided.