mcp-cinema4d
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| C4D_MCP_HOST | No | Host for the TCP bridge. Default is 127.0.0.1. | 127.0.0.1 |
| C4D_MCP_PORT | No | Port for the TCP bridge. Default is 18710. | 18710 |
| C4D_MCP_TOKEN | No | Shared secret token for authentication. Strongly recommended. | |
| C4D_MCP_ALLOW_REMOTE | No | Required to bind C4D_MCP_HOST to a non-loopback interface. Off by default. | |
| C4D_MCP_ENABLE_PYTHON_OPS | No | Opt-in. Set to '1' to allow creating/editing Python-bearing plugin types. Off by default. | |
| C4D_MCP_ENABLE_EXEC_PYTHON | No | Opt-in. Set to '1' (or true/yes/on) to expose the exec_python tool. Off by default. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Check connectivity to the Cinema 4D bridge plugin. |
| renderA | 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 |
| preview_renderA | 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 |
| reset_sceneA | Clear scene state in one RPC. With |
| call_commandB | 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. |
| list_pluginsA | 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. |
| undoA | Pop up to |
| batchA | 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). |
| list_entitiesA | Enumerate scene entities of a given kind. Returns compact summaries (name, type_id, type_name, plus kind-specific fields — |
| describeA | 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. |
| get_paramsA | 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 |
| set_paramsA | Atomically write parameter values (wrapped in one undo). Each entry is |
| get_containerA | Dump the raw BaseContainer of a C4D entity (including hidden keys that don't show up in |
| dump_shaderA | 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 |
| create_entityA | 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 |
| remove_entityB | Delete the resolved entity (wrapped in an undo step). |
| set_keyframeA | Create or update a single keyframe on a resolved entity's parameter. Supports scalar (real/long/bool) and vector (x/y/z component) parameters; the bridge infers the dtype from the entity's description, or you can override it explicitly. Creates the CTrack automatically on first use. |
| set_documentB | Update document-level settings: fps, frame range, current frame, active camera, active take. FPS and frame range are also mirrored onto the active render data. |
| import_sceneA | 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. |
| create_render_dataA | 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. |
| create_takeA | 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 |
| take_overrideA | Write per-Take parameter overrides onto a target node (object / tag / material / render_data / video_post / shader). Wraps |
| sample_transformA | 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. |
| get_selectionA | 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. |
| set_selectionA | Replace or extend the active document's selection. Pass |
| move_entityA | 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 ( |
| clone_entityA | 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 |
| modeling_commandA | 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. |
| get_meshA | Read points and polygons (or spline segments) from an editable PointObject / PolygonObject / SplineObject. Primitives (Cube, Sphere, …) must be converted first via |
| set_meshA | Overwrite the points (and optionally polygons) of an editable object. Triangles may be passed as [a,b,c]; the bridge expands them to C4D's quad storage (a,b,c,c). If polygons is omitted, only points are rewritten and the count must match the existing topology. Wrapped in a single undo entry. |
| set_mesh_selectionA | Replace the point / polygon / edge BaseSelect on an editable mesh. Existing selection of the specified kind is cleared first. Pair with |
| save_documentA | 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 |
| open_documentA | Load a Cinema 4D scene file as a new document. Unlike |
| new_documentA | 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. |
| list_documentsA | Enumerate the documents currently open in Cinema 4D. Each entry has its list |
| set_active_documentA | Switch focus to an already-open document, identified by its list |
| close_documentA | Close an open document, identified by its list |
| list_graph_nodesA | Walk a node graph and return a flat list of nodes. Target either a node-based material (via |
| list_graph_node_assetsA | Enumerate registered node-template asset ids for a node space — the ids you pass to |
| get_graph_infoA | 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_descriptionA | Build or mutate a node graph using maxon.GraphDescription's declarative dict syntax. Supports creating nodes ( |
| set_graph_portA | Update a single port on a node addressable by its stable $id within a node material graph. Thin convenience over apply_graph_description: internally builds a {$query:{$id:node_id}, port: value} payload. Lists of 3 numbers are coerced to maxon.Vector for vector-typed ports. |
| remove_graph_nodeA | 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). |
| list_xpresso_nodesA | 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_graphA | Declarative builder for an Xpresso (classic GvNodeMaster) graph — mirror of |
| set_xpresso_portA | Low-level Xpresso port primitive — covers cases |
| remove_xpresso_nodeA | Delete a GvNode from an Xpresso graph. The handle must be a gv_node handle pointing at the target (use |
| assign_materialB | Link a material to an object by creating a Texture tag (or updating an existing one when |
| set_transformA | Write an object's transform in local or global space. Pass any combination of |
| add_user_dataA | 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 |
| list_user_dataA | Enumerate the User Data slots on a target. Each entry carries |
| remove_user_dataA | Delete a User Data slot by its DescID path (as returned by |
| list_mograph_clonesA | 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 |
| list_tracksA | Enumerate CTracks on the resolved entity. Returns |
| get_keyframesA | Read the keys on a specific animation track. Combine with list_tracks to discover which (param_id, component) pairs are animated. Returns |
| delete_keyframeA | Remove keys from a CTrack. Pass |
| delete_trackA | Remove an entire CTrack (identified by |
| list_layersA | 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). |
| create_layerA | Create a LayerObject at the document's layer root. With |
| assign_to_layerA | Place a target (object / tag / material) on a named layer. Pass |
| get_object_layerA | Return the layer currently assigned to a target entity (object / tag / material), or null if unassigned. |
| set_layer_flagsB | Toggle a layer's visibility / render / lock flags in one call. Only fields explicitly passed are modified; omitted flags keep their current value. |
| get_document_stateA | 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 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/kumoproductions/mcp-cinema4d'
If you have feedback or need assistance with the MCP directory API, please join our Discord server