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.
Available components
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
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
claude mcp add kumoproductions-mcp-cinema4d -- npx -y @kumoproductions/mcp-cinema4d
codex mcp add kumoproductions-mcp-cinema4d -- npx -y @kumoproductions/mcp-cinema4d
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kumoproductions-mcp-cinema4d": {
"type": "local",
"command": [
"npx",
"-y",
"@kumoproductions/mcp-cinema4d"
],
"enabled": true
}
}
} openclaw mcp add kumoproductions-mcp-cinema4d --command npx --arg -y --arg @kumoproductions/mcp-cinema4d
mcp_servers:
kumoproductions-mcp-cinema4d:
command: "npx"
args: ["-y", "@kumoproductions/mcp-cinema4d"] {
"mcpServers": {
"kumoproductions-mcp-cinema4d": {
"command": "npx",
"args": [
"-y",
"@kumoproductions/mcp-cinema4d"
]
}
}
} 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.
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.
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.
add_user_data Add User Data Slot ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| default | — | — | Default stored on the descriptor. |
| dtype | string | yes | User-data dtype. |
| handle | — | yes | Target (object / tag / material / etc.). |
| max | number | — | Numeric upper bound (real / long). |
| min | number | — | Numeric lower bound (real / long). |
| name | string | yes | Display name for the new UD slot. |
| step | number | — | Spinner step size. |
| value | — | — | Initial value. For vector / color, pass [x,y,z]. |
No output schema declared.
No examples provided.
apply_graph_description Apply Node 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.
| Name | Type | Req | Description |
|---|---|---|---|
| create_graph | boolean | — | Create the graph if missing. Default true. |
| description | object | yes | maxon.GraphDescription dict (nested; $type / $id / '->' keys). |
| handle | — | — | Material handle. Required unless `scope:'document'`. |
| node_space | string | — | Alias 'standard' | 'redshift' | 'scenenodes' or a maxon.Id. Default 'standard' for materials, 'scenenodes' for document scope. |
| scope | string | — | Target the active document's scene-nodes graph instead of a material. |
No output schema declared.
No examples provided.
apply_xpresso_graph Apply Xpresso Graph Description ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| connect | array | — | Connection list. `from` defaults to dir='out' and `to` defaults to dir='in'. Internally always calls outputPort.Connect(inputPort). |
| create_tag_if_missing | boolean | — | When handle is an object and no Texpresso tag exists, create one. Default true. |
| handle | — | yes | Xpresso tag handle (Texpresso) or an object handle (pass create_tag_if_missing:true to auto-add a tag). |
| nodes | object | yes | Node specs keyed by caller-chosen stable id (used in `connect`). |
No output schema declared.
No examples provided.
assign_material Assign Material (Texture Tag) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| material | — | yes | Material to assign. |
| name | string | — | Optional display name for the Texture tag. |
| object | — | yes | Target object. |
| projection | string | — | Projection alias. Omit to preserve the existing projection. |
| restrict_to_selection | string | — | Polygon-selection tag name to restrict this texture to. |
| update_if_exists | boolean | — | If a Texture tag already exists on the object, update it in place instead of appending. Default false. |
| uv_offset | array | — | [u, v] offset applied to TEXTURETAG_OFFSETX/Y. |
| uv_tiles | array | — | [u, v] tile count applied to TEXTURETAG_TILESX/Y. |
No output schema declared.
No examples provided.
assign_to_layer 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.
| Name | Type | Req | Description |
|---|---|---|---|
| layer | — | yes | Layer name, or null to clear. |
| target | — | yes | Entity to assign. |
No output schema declared.
No examples provided.
batch Batch Execute ~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).
| Name | Type | Req | Description |
|---|---|---|---|
| ops | array | yes | Operations to execute in order. |
| stop_on_error | boolean | — | Abort on first error (default false — errors are collected per op). |
No output schema declared.
No examples provided.
call_command Call C4D 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.
| Name | Type | Req | Description |
|---|---|---|---|
| command_id | integer | yes | Cinema 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. |
| subid | integer | — | Optional sub-id (rarely needed). |
| timeout_ms | integer | — | Request 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Source entity to clone. |
| name | string | — | Optional name for the clone. |
| parent | — | — | For 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | — | Close even with unsaved changes, discarding them. Default false. |
| index | integer | — | 0-based position in the document list (see `list_documents`). |
| name | string | — | Document name; errors if it matches zero or several open documents. |
No output schema declared.
No examples provided.
create_entity Create C4D 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.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | yes | Entity kind to create. |
| name | string | — | Optional display name. |
| params | object | — | {param_id: value} to set after allocation. Lists of 3 numbers become Vectors. |
| parent | — | — | Parent 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). |
| position | array | — | Relative position [x,y,z] (objects only). |
| slots | array | — | Owner BaseContainer slot ids to link the new shader into (e.g. [3740, 3741] for Octane AOV). |
| type_id | — | yes | Plugin 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| color | array | — | [r,g,b] in 0..1. |
| flags | object | — | Initial flag values. |
| name | string | yes | Layer display name (also used for lookup). |
| update_if_exists | boolean | — | Idempotent update. Default false. |
No output schema declared.
No examples provided.
create_render_data 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.
| Name | Type | Req | Description |
|---|---|---|---|
| fps | integer | — | Frame rate (also disables Use Project Frame Rate). |
| frame_end | integer | — | Frame range end. |
| frame_sequence | string | — | Frame range mode (default "manual" when frame_start/end given). |
| frame_start | integer | — | Frame range start. |
| height | integer | — | Output height (pixels). |
| make_active | boolean | — | Make this the active render data. |
| name | string | yes | Render data name (used as handle). |
| params | object | — | Extra {param_id: value} to apply (any RDATA_* id). |
| parent | string | — | Parent render_data name to nest under (default: top level). |
| renderer | — | — | Renderer plugin id, or alias: "octane"/"standard"/"physical"/"redshift"/"cycles"/"viewport". |
| update_if_exists | boolean | — | If a render data with this name already exists, update it instead of creating. |
| width | integer | — | Output width (pixels). |
No output schema declared.
No examples provided.
create_take Create / Update 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.
| Name | Type | Req | Description |
|---|---|---|---|
| camera | string | — | Object name to link as the take's camera override. |
| checked | boolean | — | Checked state for batch rendering (default true on create). |
| clear_camera | boolean | — | Explicitly clear the camera override. |
| clear_render_data | boolean | — | Explicitly clear the render data override. |
| make_active | boolean | — | Make this take the current take. |
| name | string | yes | Take name (used as handle). |
| parent | string | — | Parent take name (default: Main). |
| render_data | string | — | Render data name to link as the take's render settings override. |
| update_if_exists | boolean | — | If a take with this name already exists, update it instead of creating. |
No output schema declared.
No examples provided.
delete_keyframe 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| component | — | — | Vector sub-component. null / omitted for scalar tracks. |
| end_frame | integer | — | Inclusive upper bound. |
| fps | integer | — | Override for BaseTime conversion. |
| frame | integer | — | Single frame to remove. |
| handle | — | yes | Animated target. |
| param_id | integer | yes | Top-level description id. |
| start_frame | integer | — | Inclusive lower bound. |
No output schema declared.
No examples provided.
delete_track Delete Animation Track ~70
Remove an entire CTrack (identified by `param_id` + optional `component`) from the target. Returns `{removed: bool}`.
| Name | Type | Req | Description |
|---|---|---|---|
| component | — | — | Vector sub-component. null / omitted for scalar tracks. |
| handle | — | yes | Animated target. |
| param_id | integer | yes | Top-level description id. |
No output schema declared.
No examples provided.
describe Describe C4D Entity ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | C4D 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 Dump Shader Tree ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | C4D 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_depth | integer | — | Maximum recursion depth (default 5). 0 returns only the root node. |
No output schema declared.
No examples provided.
get_container Dump Raw BaseContainer ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | C4D 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_from | integer | — | Inclusive lower bound for container keys. |
| id_to | integer | — | Inclusive upper bound for container keys. |
No output schema declared.
No examples provided.
get_document_state 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 Get Node Material 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Material handle. |
No output schema declared.
No examples provided.
get_keyframes 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.
| Name | Type | Req | Description |
|---|---|---|---|
| component | — | — | Sub-component for vector parameters. Omit / null for scalar tracks. |
| end_frame | integer | — | Inclusive upper frame bound. |
| fps | integer | — | Override for BaseTime → frame conversion. |
| handle | — | yes | Animated entity. |
| param_id | integer | yes | Top-level description id of the parameter. |
| start_frame | integer | — | Inclusive lower frame bound. |
No output schema declared.
No examples provided.
get_mesh 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Target object (must be editable). |
| include | array | — | Optional extras. 'normals' adds phong-shaded vertex normals. 'selections' adds `point_selection` / `poly_selection` / `edge_selection` index lists. |
| max_points | integer | — | Default 50000. |
| max_polys | integer | — | Default 50000. |
No output schema declared.
No examples provided.
get_object_layer Get Object's Layer ~39
Return the layer currently assigned to a target entity (object / tag / material), or null if unassigned.
| Name | Type | Req | Description |
|---|---|---|---|
| target | — | yes | Entity to query. |
No output schema declared.
No examples provided.
get_params Get Parameter Values ~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`.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | C4D 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"… |
| ids | array | yes | List of parameter paths to read. |
No output schema declared.
No examples provided.
get_selection Get Active 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 Import / Merge Scene File ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| filter | string | — | Scene filter (default "all"). |
| parent | — | — | Optional parent handle — newly-imported top-level objects are moved under this object. |
| path | string | yes | Absolute path to the file to merge (abc/fbx/obj/c4d/...). |
| rename | string | — | Optional new name for the first imported top-level object. |
No output schema declared.
No examples provided.
list_documents 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 List C4D 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| include_params | array | — | (kind=object) Parameter ids to read per match. Returned under `params: {param_id: value}`. |
| include_tags | boolean | — | (kind=object) Attach `tags: [{type_id, type_name, name}, ...]` to each match. |
| kind | string | yes | Entity kind to list. |
| max_depth | integer | — | (kind=object) Skip objects deeper than this (root=0). Default: unlimited. |
| name_pattern | string | — | Optional regex to filter results by name (e.g. "^VFX_Shot00[2-9]$"). |
| object | string | — | Filter tags to this object name (only for kind=tag). Omit to list tags on all objects. |
| object_path | string | — | Filter tags to this object path (only for kind=tag). Use when the name is not unique. |
| owner | — | — | Owner handle (required for kind=shader). |
| render_data | string | — | Render data name (required for kind=video_post). |
| tag_types | array | — | (kind=object) Keep only objects carrying a tag whose type id is in this set (e.g. [5616] for Ttexture). |
| type_ids | array | — | (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 List Node Graph Asset Types ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| node_space | string | — | Alias '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 List Node Material 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | — | Material handle. Required unless `scope:'document'`. |
| node_space | string | — | Alias 'standard' | 'redshift' | 'scenenodes' / 'neutron' or a fully-qualified maxon.Id. Default 'standard' (materials) or 'scenenodes' (document). |
| scope | string | — | Set to 'document' to target the scene-nodes (neutron) graph. |
No output schema declared.
No examples provided.
list_layers 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | MoGraph generator (e.g. Omgcloner). |
| include_matrix | boolean | — | Include the 4x3 matrix per clone. Default true. |
| max_count | integer | — | Cap on clones returned. Default 2048. |
No output schema declared.
No examples provided.
list_plugins List C4D Plugins (Any Type) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| name_pattern | string | — | Optional regex applied to plugin display name (e.g. "octane|convert"). |
| plugin_pattern | string | — | Optional 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_type | — | — | Plugin category: string alias or raw c4d.PLUGINTYPE_* integer. Defaults to 'command'. |
No output schema declared.
No examples provided.
list_tracks List Animation 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Entity whose animation tracks to enumerate. |
No output schema declared.
No examples provided.
list_user_data 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Target to inspect. |
No output schema declared.
No examples provided.
list_xpresso_nodes List Xpresso Graph 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).
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Xpresso tag handle or host object handle. |
No output schema declared.
No examples provided.
modeling_command 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.
| Name | Type | Req | Description |
|---|---|---|---|
| command | — | yes | Alias (see description) or raw MCOMMAND_* integer. |
| mode | string | — | MODELINGCOMMANDMODE_* selector. Default 'all'. |
| params | object | — | Optional BaseContainer params for the command (e.g. subdivision level). |
| targets | array | yes | Target object handles. |
No output schema declared.
No examples provided.
move_entity Move / Reparent / Reorder Node ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| after | — | — | Insert immediately after this sibling. |
| before | — | — | Insert immediately before this sibling. |
| handle | — | yes | Node to move (object / take / render_data). |
| parent | — | — | Insert as last child of this parent. |
| to_root | boolean | — | Promote 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 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.
| Name | Type | Req | Description |
|---|---|---|---|
| make_active | boolean | — | Switch the active document to the new one. Default true. |
| name | string | — | Optional display name for the new document. |
No output schema declared.
No examples provided.
open_document 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.
| Name | Type | Req | Description |
|---|---|---|---|
| make_active | boolean | — | Switch the active document to the newly loaded one. Default true. |
| path | string | yes | Absolute path to a loadable scene file. |
No output schema declared.
No examples provided.
ping Ping C4D ~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 Preview Render (Viewport, Constant Lines) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| camera | string | — | Optional scene camera object name. Mutually exclusive with a non-'current' view. |
| frame | integer | — | Optional frame number; defaults to the current document time. |
| height | integer | — | Output height in pixels (default 1024, max 4096). |
| save_path | string | — | Optional 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. |
| take | string | — | Optional take name to switch to before rendering. Restored afterward. |
| view | string | — | Preset 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. |
| width | integer | — | Output width in pixels (default 1024, max 4096). |
No output schema declared.
No examples provided.
remove_entity Remove C4D Entity ~27
Delete the resolved entity (wrapped in an undo step).
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | Entity to delete. |
No output schema declared.
No examples provided.
remove_graph_node Remove Node 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).
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | — | Material handle. Required unless `scope:'document'`. |
| node_id | string | yes | The id of the node to remove. |
| node_space | string | — | Alias 'standard' | 'redshift' | 'scenenodes' or maxon.Id. Default 'standard'. |
| scope | string | — | Target the scene-nodes graph on the active document. |
No output schema declared.
No examples provided.
remove_user_data Remove User Data Slot ~67
Delete a User Data slot by its DescID path (as returned by `list_user_data` or `add_user_data`). Wrapped in undo.
| Name | Type | Req | Description |
|---|---|---|---|
| desc_id | array | yes | DescID path — list of [id, dtype, creator?] levels. |
| handle | — | yes | Target. |
No output schema declared.
No examples provided.
remove_xpresso_node Remove Xpresso Graph 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.
| Name | Type | Req | Description |
|---|---|---|---|
| handle | — | yes | gv_node handle for the node to remove. |
No output schema declared.
No examples provided.
render Render Active Document ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| output_path | string | — | Optional absolute path to write the rendered image. Defaults to a temp file. |
No output schema declared.
No examples provided.
reset_scene Reset Active 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.
| Name | Type | Req | Description |
|---|---|---|---|
| keep_active_rd | boolean | — | Prefix-mode only: protect the currently-active RenderData from deletion. Default true. |
| prefix | string | — | Only remove entities whose name starts with this prefix. Omit for full reset. |
No output schema declared.
No examples provided.
sample_transform Sample Object Transform at Frames ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | — | Output format: "off_rot" returns pos+rot(HPB radians); "matrix" returns 4x3 rows. |
| fps | integer | — | Time base override (default: doc fps). |
| frames | array | yes | Frames to sample (1..500). The scene is evaluated at each frame via ExecutePasses. |
| handle | — | yes | Target object handle (must resolve to a BaseObject). |
| restore_time | boolean | — | Restore the original playhead after sampling (default true). |
| space | string | — | Transform space (default "global"). |
No output schema declared.
No examples provided.
save_document 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).
| Name | Type | Req | Description |
|---|---|---|---|
| copy | boolean | — | Save as copy — document's active path/name stays unchanged. Default false. |
| format | string | — | Export format alias. Default 'c4d'. |
| path | string | yes | Absolute output path. |
No output schema declared.
No examples provided.