mcp-c4d-2025
Allows LLM-driven control of Cinema 4D scenes, including inspection and editing of objects, materials, tags, takes, render data, animations, and F-curves, as well as scene setup and rendering.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-c4d-2025List every object on the hero layer; flag any with non-uniform scale or missing Texture tags."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-c4d-2025
中文文档:完整入门说明 · 动画、F-Curve 与序列渲染
Let an LLM drive Cinema 4D. mcp-c4d-2025 is a foundation fork of mcp-cinema4d that targets Cinema 4D 2025.3.2. It connects an MCP stdio client to the Python bridge running inside Cinema 4D so the model can inspect and edit a scene through typed tools.
Based on kumo.productions' mcp-cinema4d, with its MIT license and original copyright retained. This fork adds compatibility fixes, guarded Redshift workflows, and animation controls. Install from this source checkout; the version in this repository is not a claim that an npm release has been published.
Foundation and a scoped Redshift still-render path are live-verified on Windows x64 / Cinema 4D 2025.3.2. See Compatibility for exact installed revisions and evidence. Version 0.4.0 adds full DescID animation selectors, explicit parameter links, and bounded PNG sequence jobs. Source availability is not a blanket compatibility claim; character skinning/IK and production animation rendering are not fully supported or verified.
Version 0.5.0 adds four bounded F-Curve tools for existing REAL tracks: read/sample, edit values and tangents, retime/scale, and set pre/post extrapolation. Automatic tangents remain automatic and are recalculated by C4D; this is not an arbitrary curve-shape preservation guarantee. These additions have not yet been installed or live-verified. See the F-Curve workflow.
The installed 0.4.0 candidate also passed a single-document workflow test: editable geometry, rigid parent-hierarchy animation, user-data/reference access and seven 128×128 Redshift PNG frames. This is a scoped technical test, not a complete character-rigging or production-rendering claim.
Good for:
Scene audits — "List every object on the
herolayer; flag any with non-uniform scale or missing Texture tags."Shot setup — "Create a 1920×1080 RenderData, a camera at (0, 150, -400), and a Take that uses both."
Material work — "Build a Redshift node material with a noise texture driving roughness at 0.4 gain."
Procedural edits — "On every Subdivision Surface in the scene, reduce editor/render levels by 1."
Xpresso rigs — "Build a 3-gear meshing rig where the master gear's pitch radius dynamically drives the others' size and counter-rotation via an Xpresso graph."
Do not proceed unless you understand what this does. An LLM with a live connection to Cinema 4D can read your scene, write to it, and (if you opt in) execute arbitrary code on your machine. In concrete terms:
Your scene data leaves your machine. Object names, hierarchy paths, material/parameter values, imported file paths — whatever the LLM reads via
list_entities/describe/get_container/dump_shader/get_mesh— is forwarded to your chosen LLM provider and may be logged by your MCP client. Under NDA or on unreleased IP? Confirm with your studio/legal team first that the provider's retention policy and your client's logs are acceptable.The LLM gets write access. It can create, mutate, and delete objects, tags, materials, takes, render data, and layers; import / merge / open / save files; and render. Ctrl/Cmd-Z covers most edits —
save_document,open_document,render, and somecall_commandinvocations do not.Arbitrary Python is off by default.
exec_pythonruns unrestricted code with the full authority of the Cinema 4D process (file I/O, subprocess, network). Enabled only whenC4D_MCP_ENABLE_EXEC_PYTHON=1is set on both sides; turn it back off when you no longer need it. The same applies to plugin types that store Python source in their container — Python tag, Python generator, MoGraph Python effector, Python field, and the Xpresso Python operator. Creating or editing them is gated behind a separateC4D_MCP_ENABLE_PYTHON_OPS=1opt-in, since their code parameter is RCE-equivalent toexec_python.
Before first use: back up (or commit) your scene, start on a throwaway project, and leave your MCP client's per-call approval prompts enabled. See Security before exposing the bridge beyond loopback.
Architecture
MCP client
↓ stdio
MCP server (this repo, Node.js)
↓ TCP, JSON Lines (default 127.0.0.1:18710)
cinema4d_mcp_bridge (Python plugin inside C4D)
↓
Cinema 4DTwo pieces to install: the MCP server (this npm package, runs as an MCP stdio process) and the bridge plugin (Python, lives inside Cinema 4D). C4D must be running for the bridge to respond.
Related MCP server: Maya MCP Server
Quickstart
Prerequisites: Windows, Node.js 24+, and a local Cinema 4D 2025 preference directory. From an absolute local checkout:
Set-Location "D:\ABSOLUTE\PATH\TO\mcp_c4d"
npm ci
npm run build
npm run install:c4d -- --dry-runReview the printed source and destination before running the explicit --install command. Do not install into a running Cinema 4D process. The complete token, install, Codex, backup, rollback, and live-test procedure is in Codex setup.
Client configuration
Codex uses this checkout as a local STDIO MCP server. Set the same C4D_MCP_TOKEN in the Cinema 4D launch environment and the MCP server environment, use absolute Windows paths for node.exe and dist\index.js, and never commit the token. See Codex setup for the supported Settings UI, CLI, and config.toml forms.
Tools
83 tools across 17 groups are registered (82 exposed by default; arbitrary Python is opt-in). Catalog presence does not mean that a tool or group is compatible with Cinema 4D 2025.3.2. See docs/TOOLS.md for the generated reference and Compatibility for verification scope.
Group | Count | What's in it |
Basics | 5 |
|
Script-style | 5 |
|
Generic CRUD | 9 |
|
Shot setup | 7 | Document state, fps / frame range / camera, |
Selection · Hierarchy | 4 | Active selection read / write; reparent, reorder, clone. |
Modeling · Mesh | 4 |
|
Document I/O | 6 |
|
Node graphs | 10 | Node-material graphs (walk / asset enum / |
Tag helpers · Animation | 9 |
|
Transforms · User data · MoGraph | 5 |
|
Layers | 5 | Enumerate, create, assign, query, flag toggles (solo / view / render / locked / …). |
Redshift | 14 | Capabilities; PBR materials; lights and camera; AOVs; RenderData; explicit-frame Beauty rendering; PNG sequence start/status/cancel/resume. |
For a guarded Redshift workflow, call rs_get_capabilities first, then create or update materials, lights, and camera, configure AOVs and RenderData, and use rs_render last. Always pass the exact document_name. rs_set_material_pbr requires replace_graph: true before replacing an existing graph; rs_clear_aovs requires both the exact document name and force: true; rs_render is synchronous, requires force: true, and a client timeout does not cancel work already running inside Cinema 4D.
Entity handles
Every CRUD tool identifies entities by a typed handle object. The resolver raises on ambiguous names — prefer path when a scene contains duplicates.
Kind | Shape |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
name lookups are strict: if several entities share the name, the bridge returns an error listing up to five candidate paths so you can switch to a path-based handle. create_entity always returns the freshly-resolved handle (objects include path; shaders include both name and index) so chained edits stay stable.
Installing the bridge plugin
The local installer accepts only a drive-letter absolute Cinema 4D 2025 preference path under the current user's %APPDATA%\Maxon directory. Start with a read-only plan:
npm run install:c4d -- --dry-runIf discovery is ambiguous, pass an explicit path such as C:\Users\<WINDOWS_USER>\AppData\Roaming\Maxon\Maxon Cinema 4D 2025_<INSTALL_ID>. Only --install copies files. If the destination already exists, it is moved into <PREFERENCE>\mcp_bridge_backups\cinema4d_mcp_bridge.backup-<UTC_TIMESTAMP> before the new copy is created. Backups stay outside plugins so Cinema 4D cannot load their plugin entrypoints. See Codex setup for the reviewed install and rollback sequence.
Configuration
Var | Side | Default | Notes |
| both |
| Host for the TCP bridge. Legacy aliases: |
| both |
| Port for the TCP bridge. Legacy aliases: |
| both | unset | Opt-in. Set to |
| C4D plugin | unset | Opt-in. Set to |
| both | unset | Shared secret. When set on the C4D side, the Node client must send the same value. Strongly recommended. |
| C4D plugin | unset | Required to bind |
Security
Even without exec_python, many tools mutate state: call_command, set_params, import_scene, render, remove_entity, save_document, open_document, new_document. Treat the bridge like a local shell, not a sandbox.
exec_pythonis opt-in. It runs unrestricted Python on Cinema 4D's main thread (file I/O, subprocess, network). Hidden and rejected by the bridge unlessC4D_MCP_ENABLE_EXEC_PYTHON=1is set on both the MCP server process and the Cinema 4D process. Turn it back off when you no longer need it — set-and-forget is how accidents happen.Python-bearing plugin types are opt-in too. Python tag (
Tpython), Python generator (Opython), MoGraph Python effector, Python field (Fpython), and the Xpresso Python operator all store caller-supplied source code in their container and run it on scene evaluation — i.e. they are RCE-equivalent toexec_python. The bridge refusescreate_entity,set_params,apply_xpresso_graph, andtake_overrideoperations targeting these types unlessC4D_MCP_ENABLE_PYTHON_OPS=1is set on the Cinema 4D side. Listing / reading / removing existing instances is unaffected.Set a shared-secret token (
C4D_MCP_TOKEN). Localhost is not a trust boundary — any local process running as your user can otherwise connect. See Codex setup.Loopback default + remote opt-in. The bridge binds to
127.0.0.1by default. BindingC4D_MCP_HOSTto a non-loopback interface refuses to start unlessC4D_MCP_ALLOW_REMOTE=1is also set — guarding against a one-character typo (0.0.0.0) exposing C4D to the LAN.Only connect MCP clients you trust. Review their tool-use permissions so mutating tools (especially
exec_pythonif opted in) are not auto-approved.Indirect prompt injection via scene content. Scene data (object names, parameter strings, imported file paths) flows back to the LLM through
list_entities/describe/get_container/dump_shader/get_mesh. Whenexec_pythonis enabled, a malicious string in a scene can steer the model into running arbitrary Python. Don't runimport_sceneagainst untrusted.c4d/.fbx/.abcfiles whileexec_pythonis on, and rely on your MCP client's per-call approval forexec_python/call_command/save_document/import_scenerather than blanket-approving them.Audit log. Every
exec_pythoncall records the code body to the local bridge log (%TEMP%/cinema4d_mcp_bridge.logon Windows,$TMPDIR/cinema4d_mcp_bridge.logon macOS) for after-the-fact review. The log is append-only with no rotation — prune it manually if it grows.
Troubleshooting
For plugin repair or version skew, save your work and close Cinema 4D first. From this local checkout, review the exact target before reinstalling:
npm run install:c4d -- --dry-run --preference "C:\Users\<WINDOWS_USER>\AppData\Roaming\Maxon\Maxon Cinema 4D 2025_<INSTALL_ID>"
npm run install:c4d -- --install --preference "C:\Users\<WINDOWS_USER>\AppData\Roaming\Maxon\Maxon Cinema 4D 2025_<INSTALL_ID>"Run the second command only after the dry-run source and destination are correct. The installer preserves the previous bridge as a sibling backup; see backup and rollback.
Symptom | Likely cause / fix |
| C4D isn't running, plugin didn't load, or a firewall is blocking localhost. Check the C4D console for the |
Plugin loads but the | Inspect the C4D console for a Python import error, then use the reviewed local dry-run/install repair procedure above. Do not delete the destination or replace it from an unreviewed zip. |
| Another process already owns that port. Either quit it, or set both |
| The bridge and Node checkout are version-skewed. Save/close Cinema 4D and use the reviewed local dry-run/install repair procedure above so the installer creates a rollback backup. |
| Two or more scene objects share the name. Use a path-based handle: |
|
|
| You tried to create or edit a Python-bearing entity (Python tag, Python generator, MoGraph Python effector, Python field, Xpresso Python operator). Off by default. Set |
Still stuck? Open an issue with a redacted bridge log, your OS, Cinema 4D version, and the tool call that failed. Remove tokens, private asset names, and personal paths before posting.
Known limitations
Inherited observations are not 2025 verification. Notes about
modeling_command make_editable, node assets, node material names, and other SDK behavior came from the upstream implementation and remain unverified on Cinema 4D 2025.3.2.list_graph_node_assetscan return an empty list on builds where the Maxon asset repository doesn't expose node-template assets through the usual query path. The tool still returnssupported: truewith shape-correct output; treat an emptyassetsarray as "discovery unavailable on this C4D build" and pass$typeasset ids you already know (e.g. fromlist_graph_nodeson an existing material).Node material friendly names vary.
apply_graph_descriptionaccepts the declarative$typestrings documented by Maxon (e.g."Standard Material"), but the resolver varies between 2024 / 2025 / 2026 builds — when in doubt, pass the fully-qualified asset id returned bylist_graph_node_assets/list_graph_nodesinstead.exec_pythonis the only way to seed classical-shader fixtures. A handful of E2E tests (fordump_shader) need to build a shader tree before asserting on it, so they skip cleanly whenC4D_MCP_ENABLE_EXEC_PYTHONisn't set on both sides. The tools themselves don't requireexec_python.No broad support claim is made. The foundation path is live-verified, while the Redshift tools remain offline-tested until the separate strict
test:live:redshift:2025gate passes on the installed candidate. Each gate verifies only its documented path on the exact runtime tested. See Compatibility.
Contributing
See CONTRIBUTING.md for setup, the development loop, how to add a new tool, coding style, and the PR flow.
License
MIT © 2026 kumo.productions, Inc.
Trademarks
Cinema 4D® and Maxon® are trademarks of Maxon Computer GmbH. This project is an independent, unofficial tool, not affiliated with or endorsed by Maxon.
Available Tools
82 toolsadd_user_dataAdd User Data SlotA
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 | Required | Description | Default |
|---|---|---|---|
| max | No | Numeric upper bound (real / long). | |
| min | No | Numeric lower bound (real / long). | |
| name | Yes | Display name for the new UD slot. | |
| step | No | Spinner step size. | |
| dtype | Yes | User-data dtype. | |
| value | No | Initial value. For vector / color, pass [x,y,z]. | |
| handle | Yes | Target (object / tag / material / etc.). | |
| default | No | Default stored on the descriptor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavior burden. It discloses the mutation ('Add'), the return type (DescID as a nested list), and a concrete downstream use (path for get_params/set_params). It does not cover duplicate-slot or error behavior, but the core behavioral contract is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is compact and front-loaded: action/target in the first sentence, return behavior in the second, dtype aliases in the third. The dtype list is slightly redundant with the schema enum, so it is not perfectly lean, but there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, 3-required write tool with no annotations and no output schema, the description covers purpose, target class, return value, and integration path, while the schema covers parameter details. The main missing pieces are explicit sibling routing and error/duplicate behavior, which are not critical to a first correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents name, handle, dtype, min/max/step/value/default, including the vector/color [x,y,z] format. The description mostly restates the dtype enum, so it adds little parameter-level meaning beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Add'), a specific object ('new User Data slot'), and scopes the target ('any BaseList2D'), which is enough to distinguish it from sibling list_user_data/remove_user_data even without naming them. The rigging/control-exposure context adds real-world purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use-case signal ('common rigging / control-exposure pattern') and explains the returned DescID can feed get_params/set_params, so an agent can infer when it is useful. However, it never explicitly says when to prefer this over list_user_data/remove_user_data, and there are no exclusion or alternative statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_graph_descriptionApply Node Graph DescriptionA
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 | Required | Description | Default |
|---|---|---|---|
| scope | No | Target the active document's scene-nodes graph instead of a material. | |
| handle | No | Material handle. Required unless `scope:'document'`. | |
| node_space | No | Alias 'standard' | 'redshift' | 'scenenodes' or a maxon.Id. Default 'standard' for materials, 'scenenodes' for document scope. | |
| description | Yes | maxon.GraphDescription dict (nested; $type / $id / '->' keys). | |
| create_graph | No | Create the graph if missing. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses mutation, on-demand graph creation, scene-node type restrictions, and unsupported operations for scene-nodes. It stops short of clarifying whether an existing graph is merged or replaced and what the tool returns on success or failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core operation and syntax, and nearly every clause adds value. The inline JSON example and long caveat-laden sentence make it slightly harder to scan than necessary, but it is appropriately sized for the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema, the description is remarkably complete: it covers input syntax, supported graph types, scope, node_space behavior, and the default create_graph behavior. The main gaps are the lack of any statement about return values/error behavior and the merge-vs-replace semantics on an existing graph.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds meaning well beyond the schema by explaining the special keys in the `description` parameter ($type, $id, '->' wiring), giving a nested example, and clarifying scope/node_space defaults and scene-node asset-id sourcing. This is genuinely useful for an agent constructing a valid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise operation—building or mutating a node graph via maxon.GraphDescription dict syntax—and gives concrete examples of node creation, stable ids, port wiring, and port values. It also names the graph families it applies to (standard/redshift materials and the scene-nodes document graph), which helps distinguish it from Xpresso-related sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides strong contextual guidance: material graphs vs document scope, where to source scene-node asset ids, and the material-only restriction on queries/labels. However, it never explicitly names a sibling tool as the alternative for other graph types (e.g. apply_xpresso_graph), so some routing decisions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_xpresso_graphApply Xpresso Graph DescriptionA
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 | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | Node specs keyed by caller-chosen stable id (used in `connect`). | |
| handle | Yes | Xpresso tag handle (Texpresso) or an object handle (pass create_tag_if_missing:true to auto-add a tag). | |
| connect | No | Connection list. `from` defaults to dir='out' and `to` defaults to dir='in'. Internally always calls outputPort.Connect(inputPort). | |
| create_tag_if_missing | No | When handle is an object and no Texpresso tag exists, create one. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It appropriately says the tool creates nodes, wires connections via GvPort.Connect, and can optionally create a Texpresso tag; the example also implies EventAdd must be called separately. However, it does not disclose whether the call appends to or replaces an existing graph, what happens if the tag already exists, or side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and sibling distinction, then packs in parameter aliases and an example workflow. It is dense but not bloated; the long alias list is justified because those values are not enumerated in the schema. A slightly more structured layout (e.g., bullets for aliases) could improve scannability, but every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the very rich nested schema, the description does not need to re-explain the node/connect structures. It adds the essential contextual pieces: sibling comparison, operator alias catalog, tag auto-creation, and an end-to-end example. The main omission is return-value behavior and whether the graph is replaced or augmented, but the description is largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real value beyond the schema by listing the accepted short aliases for operator_id, giving a concrete integer example (c4d.ID_OPERATOR_CONST=1001150), and explaining the handle semantics for objects versus existing tags. This makes the parameter surface more usable without repeating schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific purpose: declaratively building an Xpresso GvNodeMaster graph by creating nodes and wiring connections. It also explicitly distinguishes itself from apply_graph_description, naming the sibling tool and the material-vs-Xpresso difference, so an agent can select it correctly even before inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It positions the tool as the Xpresso counterpart to apply_graph_description and frames it as a one-call declarative builder, which tells the agent when to prefer this over stepwise graph tools. The example workflow (create Cube -> apply_xpresso_graph -> EventAdd) adds concrete usage context, and the optional tag-creation behavior clarifies when an object handle vs. tag handle is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_materialAssign Material (Texture Tag)A
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 | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name for the Texture tag. | |
| object | Yes | Target object. | |
| material | Yes | Material to assign. | |
| uv_tiles | No | [u, v] tile count applied to TEXTURETAG_TILESX/Y. | |
| uv_offset | No | [u, v] offset applied to TEXTURETAG_OFFSETX/Y. | |
| projection | No | Projection alias. Omit to preserve the existing projection. | |
| update_if_exists | No | If a Texture tag already exists on the object, update it in place instead of appending. Default false. | |
| restrict_to_selection | No | Polygon-selection tag name to restrict this texture to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does: it states that a Texture tag is created, that an existing tag can be updated when update_if_exists is true, and that projection aliases avoid raw TEXTURETAG_* ids. It does not detail failure modes or duplicate-tag behavior when update_if_exists is false, but the core mutation and side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first identifies the primary action and update behavior, and the second adds value by summarizing projection aliases. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description covers the essential behavior, the update path, and the projection vocabulary. It does not mention failure behavior or what the response contains, but these are secondary for such a straightforward assignment action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a score of 3 is the baseline, but the description adds meaningful context beyond the schema: the projection alias list clarifies that the enum values are aliases, and the update_if_exists behavior is linked to the tag-creation workflow. This helps the agent understand parameter intent without opening the full schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Link a material to an object by creating a Texture tag.' This clearly distinguishes it from material-creation and layer-assignment siblings such as rs_create_material and assign_to_layer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The core use case is clear: assigning a material to an object via a Texture tag. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough that an agent can infer when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_to_layerAssign To LayerA
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 | Required | Description | Default |
|---|---|---|---|
| layer | Yes | Layer name, or null to clear. | |
| target | Yes | Entity to assign. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that passing layer:null clears the assignment and that the layer must already exist. However, it does not mention whether a previous layer assignment is overwritten, what error occurs for an invalid target, or what the tool returns on success.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the primary action, the clearing special case, and the key prerequisite. There is no filler or redundancy; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with a rich schema and no output schema, the description covers the essential operational details: what the tool does, how to clear, and the layer-existence prerequisite. It omits minor behavior like return values and overwrite semantics, but these are not critical for correct invocation given the schema's completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains both parameters. The description adds a little context by naming object/tag/material targets and repeating the null-to-clear behavior, but that null behavior is already in the schema. The target parenthetical is also underinclusive relative to the schema's many supported kinds, so no bonus is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Place') and resource ('named layer'), and clarifies the accepted target types. It is immediately distinguishable from sibling layer/material tools like create_layer, get_object_layer, and assign_material because the action is explicitly 'assign target to a layer.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use context: place a target on a named layer. It also provides a direct prerequisite — 'The layer must exist — call create_layer first if needed' — which helps the agent decide on a precondition action. It does not explicitly contrast with alternatives like assign_material, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batchBatch ExecuteA
Run many generic ops in one main-thread 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 unless undo_group=false. Pass document_name to bind every allowed active-document operation to one uniquely named open document and restore the prior active document afterward; document lifecycle, arbitrary Python, and command operations are rejected in this scoped mode.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | Operations to execute in order. | |
| undo_group | No | Wrap the batch in one outer undo group (default true). Set false when ops include undo or mix reads/renders/saves with independently undo-wrapped mutations. | |
| document_name | No | Optional unique open-document name. The bridge activates it atomically for allowed operations, rejects document-switching/bypass operations, verifies the target around every handler, and restores the prior active document in finally. | |
| stop_on_error | No | Abort on first error (default false — errors are collected per op). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden and does so well: it discloses main-thread execution, sequential application, per-op error recording, default undo grouping, active-document binding/restoration, and rejected operation categories. This goes far beyond a minimal 'run multiple ops' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler; the core action is front-loaded and operational details follow logically. Every sentence earns its place by conveying a distinct behavioral aspect of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description combined with the fully documented schema covers execution semantics, error handling, undo behavior, and scoped document handling. The main omission is the shape of the return value, which matters more because there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics by explaining the default behavior of undo_group and stop_on_error and the full document_name scoping model. It does not discuss timeout_ms, but the schema already documents that parameter clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Run many generic ops in one main-thread RPC') and clearly identifies the resource as a composite operation executor. The batching behavior is distinct from the many individual sibling tools, so an agent can tell this is a container for other registered handlers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains ordering, per-op failure continuation, undo grouping, and document_name scoping, giving clear context for when this tool is appropriate. It does not explicitly name alternative tools or say 'use this instead of running individual ops', but the use case is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_commandCall C4D CommandA
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 | Required | Description | Default |
|---|---|---|---|
| subid | No | Optional sub-id (rarely needed). | |
| command_id | 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. | |
| timeout_ms | No | Request timeout in ms (default 60000). CallCommand often runs synchronously; increase for long-running ones like Render. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Invoke' and names the API. It does not warn that many commands mutate the scene, may block the main thread, may open UI, or may have no meaningful return value. The synchronous behavior is only mentioned in the timeout parameter description, not in the tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action, the target resource, the mechanism, and the scope of supported commands with useful examples. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description and schema together cover the command_id, subid, timeout, and discovery path, which is enough to make a basic call. However, because there are no annotations and no output schema, the description leaves the agent uncertain about side effects, return values, and failure modes for a potentially mutating call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents command_id with examples and discovery guidance, plus subid and timeout_ms. The description adds little beyond saying 'by plugin id', so a baseline score of 3 is appropriate because the schema handles the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Invoke') and names the exact resource ('Cinema 4D command by plugin id') and mechanism ('via c4d.CallCommand()'). It clearly differentiates this generic command invoker from specialized siblings like render or save_document by emphasizing the plugin-id/CallCommand path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for built-in commands and registered command plugins, and gives examples like render, save, and make editable. However, it does not explicitly state when to prefer this tool over dedicated siblings such as render or save_document, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_entityClone 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 parent to place the clone elsewhere. Returns a handle to the new entity.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional name for the clone. | |
| handle | Yes | Source entity to clone. | |
| parent | No | 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: parent take as handle (defaults to source's parent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does well: it explains type-specific cloning behavior, copies VideoPosts and take overrides, describes default object placement, and states the return value. It does not discuss edge cases or potential side effects, but 'duplicate' strongly implies the original remains intact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each contributing distinct information: core operation, supported entity types, placement defaults, and return value. No filler or redundancy; the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool supporting many entity types with no output schema, the description covers the key invocation details: supported kinds, parent semantics, type-specific behavior, and return handle. It could go deeper on failure modes or whether object children are cloned, but it is complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parent parameter already has detailed per-type semantics. The description adds value by explaining the default placement behavior for objects and the option to pass parent to relocate the clone. This goes beyond the schema and helps an agent invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Duplicate an entity,' then enumerates the supported entity types (object, tag, material, shader, render_data, video_post, take) and their implementation paths. This clearly differentiates it from siblings like create_entity and move_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when the tool applies: duplicating an existing entity across multiple supported types. It also clarifies default placement for objects and the ability to override via parent. It does not explicitly name sibling alternatives, but the duplication semantics are unambiguous enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_documentClose DocumentA
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 | Required | Description | Default |
|---|---|---|---|
| name | No | Document name; errors if it matches zero or several open documents. | |
| force | No | Close even with unsaved changes, discarding them. Default false. | |
| index | No | 0-based position in the document list (see `list_documents`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and delivers: closing discards unsaved work without a prompt (explicitly contrasted with the GUI), unsaved documents are refused unless force is set, and C4D's one-document minimum means the last close leaves a fresh empty document active. These are exactly the behavioral surprises an agent needs before invoking a destructive close.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: action/identification, force/discard semantics, and the last-document edge case. No redundancy with the schema and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, conditional tool with three parameters and no annotations or output schema, the description covers every decision point: target selection, exclusivity, unsaved-change handling, and the edge case. Only the success-response format goes unmentioned, which is minor for a close operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the critical exclusivity constraint — 'Pass exactly one of the two' — that the schema's individual property descriptions cannot express, and ties index directly to list_documents output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Close an open document' — and clearly anchors identification to list_documents output. This makes it immediately distinguishable from sibling tools like open_document, new_document, and save_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit invocation guidance: pass exactly one of index or name, source the index from list_documents, and use force:true as the escape hatch for unsaved changes. It does not explicitly name an alternative tool (e.g., save_document) as the when-not-to-use path, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_entityCreate C4D 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 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 | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Entity kind to create. | |
| name | No | Optional display name. | |
| slots | No | Owner BaseContainer slot ids to link the new shader into (e.g. [3740, 3741] for Octane AOV). | |
| params | No | {param_id: value} to set after allocation. Lists of 3 numbers become Vectors. | |
| parent | No | 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). | |
| 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', 'pyramid', 'platonic', 'null'. | |
| position | No | Relative position [x,y,z] (objects only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly discloses that the tool mutates by creating entities, returns a handle for chaining, and that object handles include `path` for stable re-resolution. It also warns about classical vs. node-material shader behavior, which is important non-obvious behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: scope, return value/chaining, shader caveat, and video_post clarification. Key behavioral constraints are front-loaded before the longer kind-specific notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and absence of an output schema, the description covers the most important context: what it constructs, what it returns, how to chain follow-up calls, and which sibling to use for node materials. The return handle format for non-object kinds is left somewhat underspecified, but the overall guidance is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful parameter context beyond the schema: it ties `kind` to specific behaviors (classical shader chains vs. node materials, video_post renderer effects) and gives concrete renderer IDs, which helps the agent understand `type_id` and `parent` intent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it is a 'unified constructor' for object, tag, material, shader, and video_post. It clearly distinguishes the tool from siblings by naming its scope and unique return behavior (handle with stable `path` for chaining).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use it ('Unified constructor... in one call') and gives a concrete alternative: for node-material edits, use `apply_graph_description` instead. It also clarifies kind-specific behavior for `shader` and `video_post`, helping an agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_layerCreate LayerA
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 | Required | Description | Default |
|---|---|---|---|
| name | Yes | Layer display name (also used for lookup). | |
| color | No | [r,g,b] in 0..1. | |
| flags | No | Initial flag values. | |
| update_if_exists | No | Idempotent update. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses that the layer is created at the document root, that update_if_exists:true updates the existing layer in place, and that the operation is idempotent. It does not mention what happens if a duplicate name exists without update_if_exists, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. The main purpose is front-loaded, and each clause adds useful information—creation location, idempotent update behavior, and configuration options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create/update tool with a nested flags object and no output schema or annotations, the description covers the essential decision points: where the layer is created, how idempotency works, and how to configure color/flags. It leaves some details to the schema, but nothing critical blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema by explaining the update_if_exists behavior in detail and showing that color and flags can be passed together or separately. It also gives example flag names, reinforcing what those parameters do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'Create' and the resource 'LayerObject at the document's layer root'. It also distinguishes the idempotent update behavior via update_if_exists, making it easy for an agent to understand what this tool does without confusing it with layer-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the main use case—creating a new layer or idempotently updating an existing one by name—but it does not explicitly mention when to prefer this tool over alternatives like assign_to_layer or set_layer_flags, nor does it list exclusions. Usage context is clear only by inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_render_dataCreate 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.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frame rate (also disables Use Project Frame Rate). | |
| name | Yes | Render data name (used as handle). | |
| width | No | Output width (pixels). | |
| height | No | Output height (pixels). | |
| params | No | Extra {param_id: value} to apply (any RDATA_* id). | |
| parent | No | Parent render_data name to nest under (default: top level). | |
| renderer | No | Renderer plugin id, or alias: "octane"/"standard"/"physical"/"redshift"/"cycles"/"viewport". | |
| frame_end | No | Frame range end. | |
| frame_start | No | Frame range start. | |
| make_active | No | Make this the active render data. | |
| frame_sequence | No | Frame range mode (default "manual" when frame_start/end given). | |
| update_if_exists | No | If a render data with this name already exists, update it instead of creating. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does disclose the update-if-exists behavior and the returned handle, which is helpful. However, it omits side effects, such as the update_if_exists flag condition, make_active effects, default parent handling, or what happens to unspecified settings during an update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences that front-load the core action, summarize the key parameter groups, and state the return value. There is no fluff or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus the fully documented schema give an agent enough to invoke the tool correctly. The return handle and chaining hint fill the main gap left by the missing output schema, though a note about the update_if_exists condition would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter. The description adds only a high-level grouping of resolution, renderer, fps, and frame range, which is useful but does not materially extend what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (create/update), a specific resource (RenderData), and the key attribute groups (resolution, renderer, fps, frame range). It also states the return value, making the tool's purpose unmistakable and distinguishing it from generic create tools like create_entity or create_take.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames the tool as a one-call setup operation and explains that the returned handle is meant for chaining with create_take or set_params. It does not explicitly name alternatives or exclusions, but the intended workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_takeCreate / Update 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 checked:false to override. Returns the take handle — ideal for building per-shot take stacks programmatically.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Take name (used as handle). | |
| camera | No | Object name to link as the take's camera override. | |
| parent | No | Parent take name (default: Main). | |
| checked | No | Checked state for batch rendering (default true on create). | |
| make_active | No | Make this take the current take. | |
| render_data | No | Render data name to link as the take's render settings override. | |
| clear_camera | No | Explicitly clear the camera override. | |
| update_if_exists | No | If a take with this name already exists, update it instead of creating. | |
| clear_render_data | No | Explicitly clear the render data override. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It does disclose an important non-obvious behavior — new takes are checked by default so they participate in batch renders — and states the return value. However, it does not clarify update semantics, such as whether updating an existing take merges or overwrites camera/render data when the clear flags are not set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, and every phrase earns its place: sub-operations, default behavior, rationale, return value, and intended use case. No filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no output schema, the description covers the core action, default behavior, return value, and the main use case. The schema handles individual parameters, but the description omits details about update-if-exists behavior and error conditions, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All nine parameters are already documented in the schema (100% coverage), so the baseline is 3. The description's `checked:false` mention repeats what the schema already says and adds no new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the core operation precisely — 'Create or update a Take' — and enumerates the bundled sub-operations (AddTake + SetCamera + SetRenderData + SetChecked), so the tool's function is unmistakable. It does not explicitly distinguish itself from the similarly named sibling `take_override`, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by framing the tool as the one-call compound alternative and suggesting a concrete use case: 'building per-shot take stacks programmatically.' It does not name alternatives or state when not to use it, so it lacks the explicit exclusion guidance needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_keyframeDelete KeyframeA
Remove keys selected by full path or legacy param_id/component. Pass an integer frame for an exact-time key, or integer start_frame/end_frame for an inclusive range; fractional key times are not rounded into the selection. Omitting all frame bounds deletes every key on that track. Returns {removed, track}.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Override for BaseTime conversion. | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| frame | No | Single frame to remove. | |
| handle | Yes | Animated target. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. | |
| end_frame | No | Inclusive upper bound. | |
| start_frame | No | Inclusive lower bound. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and handles it well. It reveals the potentially destructive default ('Omitting all frame bounds deletes every key on that track'), the non-obvious matching behavior ('fractional key times are not rounded into the selection'), and the return shape '{removed, track}'. This meaningfully exceeds what the schema alone communicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each earning its place: purpose, selection semantics, default destructive behavior, and return shape. The core purpose is front-loaded and there is zero filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the critical ground: all three selection modes, precision behavior, the all-or-nothing default, and the response format. The 'handle' target parameter is left to the schema, but the schema documents it thoroughly. The only notable gap is the absence of any mention of reversibility/undo, though an undo sibling exists in the toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, setting a baseline of 3. The description adds value beyond the schema by explaining the interplay between frame/start_frame/end_frame — exact match, inclusive range, or full-track deletion — which the individual parameter descriptions ('Single frame to remove', 'Inclusive lower bound') do not convey. It also frames the path vs param_id/component dichotomy up front.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair — 'Remove keys' — and immediately clarifies the two selection mechanisms (full path vs legacy param_id/component). This cleanly distinguishes the tool from siblings like delete_track (removes whole tracks) and set_keyframe (adds keys), though it does so implicitly rather than by naming an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives solid parameter-level usage guidance: integer frame for exact-time, start_frame/end_frame for inclusive range, and omitting all bounds to delete every key. However, it never addresses when to choose this tool over siblings such as delete_track or edit_fcurve_keys, so the tool-vs-alternative selection context is left implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_trackDelete Animation TrackB
Remove an entire CTrack identified by full path or legacy param_id/component. Returns {removed: bool}.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| handle | Yes | Animated target. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return value but does not disclose that the operation is destructive and irreversible, whether keyframes are removed along with the track, or any permission/undo implications. 'Remove' only implies mutation without explaining consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence states the action, identification modes, and return value with no filler. Information is front-loaded and every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential purpose and return shape, and the schema handles parameter details. However, for a destructive mutation tool with no annotations and no output schema, it would benefit from stating that deletion is permanent and affects the associated track data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers all parameters at 100%, so the baseline is 3. The description does add a small grouping distinction between 'full path' and 'legacy param_id/component', but the individual schema descriptions already convey exclusivity and meaning for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove an entire CTrack') and the resource, and differentiates the scope from editing individual keyframes. It does not explicitly name sibling tools like delete_keyframe, but the whole-track wording makes the distinction apparent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to identify a track (full path or legacy param_id/component) but provides no guidance on when to use this tool instead of alternatives like delete_keyframe or remove_entity. There is no explicit when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describeDescribe C4D EntityA
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 | Required | Description | Default |
|---|---|---|---|
| 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",render_data,type_id}, {kind:"shader",owner:<handle>,index}, {kind:"gv_node",tag:<tag handle>,id?|name?} (Xpresso GvNode; use list_xpresso_nodes to discover stable path ids — GvNode inherits BaseList2D so set_params/get_params/describe work on it), {kind:"plugin_options",plugin_id,plugin_type?} (plugin_id accepts an int or a format alias like "abc"/"fbx"/"obj"/"usd"/"gltf"; plugin_type defaults to "scene_saver"; resolves to the plugin's settings BaseList2D — describe+set_params it to configure exporter options before save_document). Prefer `path` over `name` when names are not unique. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It clearly signals a read-only discovery operation through 'Dump', 'current value', and 'before reading/writing'. It also discloses notable behaviors in the handle explanation, such as plugin_options resolving to the plugin's settings BaseList2D and GvNode inheriting BaseList2D so describe works on it. It does not explicitly state side-effect freedom or error behavior, but the read-only nature is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is two concise sentences that front-load the purpose and usage with no filler. The lengthy handle explanation lives in the schema where the complexity justifies it, rather than bloating the top-level description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a discovery/read tool with one parameter, the description is complete: it states the output fields even without an output schema, and the handle schema exhaustively covers all supported entity shapes. No critical calling information is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the handle description adds substantial value beyond the raw schema: alias forms for plugin_id like 'abc'/'fbx', default plugin_type behavior, GvNode path-id discovery via list_xpresso_nodes, and the advice to prefer path over name. This materially improves correct parameter construction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Dump'), a specific resource ('description parameters of a C4D entity'), and explicitly enumerates the returned fields (id, name, cycle enum, current value). The phrase 'discover parameter IDs before reading/writing' separates this from value-reading/writing siblings like get_params and set_params.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear situational guidance: use this tool to discover parameter IDs before reading or writing. The handle schema adds valuable context such as 'describe+set_params it to configure exporter options' and the GvNode stable path ID workflow. However, it names no explicit alternatives or when-not-to-use conditions, leaving some inference about where get_params/set_params fit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dump_shaderDump Shader TreeA
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 | Required | Description | Default |
|---|---|---|---|
| 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",render_data,type_id}, {kind:"shader",owner:<handle>,index}, {kind:"gv_node",tag:<tag handle>,id?|name?} (Xpresso GvNode; use list_xpresso_nodes to discover stable path ids — GvNode inherits BaseList2D so set_params/get_params/describe work on it), {kind:"plugin_options",plugin_id,plugin_type?} (plugin_id accepts an int or a format alias like "abc"/"fbx"/"obj"/"usd"/"gltf"; plugin_type defaults to "scene_saver"; resolves to the plugin's settings BaseList2D — describe+set_params it to configure exporter options before save_document). Prefer `path` over `name` when names are not unique. For this tool, pass a shader handle such as {kind:"shader", owner:<material handle>, index:0}. | |
| max_depth | No | Maximum recursion depth (default 5). 0 returns only the root node. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses recursive JSON output, per-node fields, Xbitmap-to-file promotion, heuristic file_candidates, and linked_shaders expansion. It stops short of explicitly stating that the operation is read-only with no side effects, but the detailed behavior description strongly implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: primary function, critical scope limitation, output transformations, and discovery guidance. It is dense but well-ordered and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two well-documented parameters and no output schema, the description supplies the essential output structure and usage context. It tells the agent when to use the tool, what it returns, how to handle classical vs node materials, and how to find shader handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both handle and max_depth fully. The description adds no parameter-specific semantics beyond what the schema provides, leaving it at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('recursively dump') and resource ('a shader resolved from a handle into JSON'), and immediately distinguishes itself from node-material tools. It also enumerates exactly what data is captured, making the tool's purpose unmistakable even among many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says classical materials only and directs the agent to use list_graph_nodes / apply_graph_description for node materials. It also recommends pairing with list_entities kind=shader, giving clear when-to-use and alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_fcurve_keysEdit F-Curve KeysA
Edit existing REAL keys by snapshot index: values, linear/spline/step interpolation, automatic or manual tangents. Left/right are signed offsets, not absolute control-point positions. Manual takeover splits handles and disables automatic/clamp/auto-weight/overshoot/tangent-lock options; key time/value locks are respected. Read get_fcurve first and avoid simultaneous scene edits. Preflights the complete batch before a single undo-grouped track update. Does not create keys or edit coupled XYZ/time tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Time base, default document FPS. | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| edits | Yes | ||
| handle | Yes | Entity with an existing REAL value track. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. | |
| document_name | Yes | Exact active document name. A mismatch is rejected; this tool never switches documents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers substantial behavioral detail: left/right are signed offsets, manual takeover splits handles and disables several tangent options, locks are respected, the batch is preflighted, and updates are undo-grouped. This is far beyond what the schema alone reveals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place by adding a constraint, a behavioral caveat, or an exclusion. The main action is front-loaded, and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description covers prerequiaites, concurrency, batch semantics, undo grouping, and exclusions. It tells the agent what to read first, what behavior to expect, and what the tool will not do, making it sufficiently complete for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the baseline is already 3. The description adds real value beyond the schema by clarifying non-obvious semantics: left/right are signed offsets rather than absolute positions, manual mode disables automatic/clamp/auto-weight/overshoot/tangent-lock, and key_index refers to a fresh get_fcurve snapshot. This elevates it to a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and target: 'Edit existing REAL keys' and enumerates what can be edited (values, interpolation modes, tangents). It further distinguishes the tool from siblings through explicit exclusions: 'Does not create keys or edit coupled XYZ/time tracks.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear preconditions and concurrency guidance: 'Read get_fcurve first' and 'avoid simultaneous scene edits.' It also clarifies what the tool does not do, but it does not explicitly name an alternative tool or provide a when-not-to-use branch, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capabilitiesGet C4D CapabilitiesB
Report the Cinema 4D runtime, security posture, and available capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. 'Report' implies a read-only, non-mutating operation and the output categories are listed, but the description does not state whether a live C4D connection is required, what 'security posture' covers, or how the output is structured. There is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb and output categories with no filler. Every word earns its place and the structure is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument report tool, the description gives the essential result categories, but because there is no output schema it should say more about the return shape. The large sibling list, especially rs_get_capabilities, also makes some usage differentiation important. Adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics to clarify; the baseline for 0-param tools is 4. The description appropriately focuses on the tool's output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Report' and identifies a concrete resource: the Cinema 4D runtime, security posture, and available capabilities. This is more specific than the title and helps distinguish it from the Redshift-focused rs_get_capabilities sibling, though it does not explicitly name alternatives or clarify what 'capabilities' includes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to call this tool versus siblings such as rs_get_capabilities, describe, ping, or get_document_state. An agent is left to infer the appropriate context, and there is no mention of prerequisites, exclusions, or precedence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_containerDump Raw BaseContainerA
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 | Required | Description | Default |
|---|---|---|---|
| id_to | No | Inclusive upper bound for container keys. | |
| 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",render_data,type_id}, {kind:"shader",owner:<handle>,index}, {kind:"gv_node",tag:<tag handle>,id?|name?} (Xpresso GvNode; use list_xpresso_nodes to discover stable path ids — GvNode inherits BaseList2D so set_params/get_params/describe work on it), {kind:"plugin_options",plugin_id,plugin_type?} (plugin_id accepts an int or a format alias like "abc"/"fbx"/"obj"/"usd"/"gltf"; plugin_type defaults to "scene_saver"; resolves to the plugin's settings BaseList2D — describe+set_params it to configure exporter options before save_document). Prefer `path` over `name` when names are not unique. | |
| id_from | No | Inclusive lower bound for container keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the weight of behavioral disclosure. It communicates that the tool dumps a raw BaseContainer including hidden keys and supports filtering by key range, implying a read-only introspection operation. However, it does not explicitly state that it makes no modifications, describe the output shape, or mention error behavior for invalid handles—gaps that matter given the absence of annotation metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The core action is front-loaded, the distinguishing detail (hidden keys not in `describe`) follows immediately, and the filtering capability is stated economically. Every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The handle schema is complex and well-documented in the input schema, but the tool itself has no output schema and no annotations. The description covers the main purpose and filtering but omits expected output format, potential size of the dump, and explicit guidance on when to prefer it over related tools like `dump_shader` or `get_params`. For a tool with this complexity and no annotations, more contextual guidance would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by linking `id_from`/`id_to` to the practical action of narrowing output and giving a concrete example of hidden keys. This helps an agent understand the value and purpose of the optional key-range parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Dump the raw BaseContainer of a C4D entity.' It immediately differentiates from related tools by noting it includes hidden keys not shown in `describe`, with a concrete example (Octane AOV shader slots at 3740/3741). This unambiguously identifies the tool's distinctive purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool by contrasting with `describe` and suggesting key-range filtering to narrow output. It does not explicitly name alternatives or state when *not* to use it, but the context is clear enough for an agent to choose it for raw, complete container inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_stateGet 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 set_document for the writer side.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses read-only intent via 'one-shot reader' and lists the data it returns, which is strong for a state getter. It does not mention edge cases like an unopened document or failure behavior, but the core behavioral profile is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose ('one-shot reader') and then lists the relevant fields, followed by one short sentence linking to `set_document`. Every phrase earns its place and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description compensates by listing the returned fields and their domain. It does not specify exact types or error behavior, but for a zero-parameter state snapshot the essential information an agent needs to choose and invoke the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters and the schema has 100% coverage with an empty properties object, so there is no parameter documentation burden. The baseline of 4 applies because the description does not need to explain parameter meanings that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a read operation on the active document and enumerates the exact fields returned: fps, frame ranges, current frame, document name/path, and camera/take/render handles. It also distinguishes itself from `set_document` as the writer counterpart, making its purpose unambiguous among the large sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by positioning this as the reader paired with `set_document` for the writer side, implying use when you need a current document snapshot rather than a mutation. It does not explicitly enumerate when not to use it versus other getter-like siblings such as `get_params` or `describe`, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fcurveRead F-CurveA
Read an existing REAL F-Curve: stable key indices for this snapshot, precise frame times, values, interpolation, tangent offsets and pre/post extrapolation. Optionally sample the track. At most 1000 keys. Does not create a track/curve or change document time. Not a scene/constraint evaluation or character-animation reader.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Time base, default document FPS. | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| handle | Yes | Entity with an existing REAL value track. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. | |
| document_name | Yes | Exact active document name. A mismatch is rejected; this tool never switches documents. | |
| sample_frames | No | Optional sample positions, including subframes. Does not move document time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the operation is non-mutating ('Does not create a track/curve or change document time'), adds a hard limit ('At most 1000 keys'), notes the snapshot semantics ('stable key indices for this snapshot'), and clarifies what it is not. This is strong coverage, though it could also mention error behavior when the track does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and dense: the first sentence states the core capability and data returned, the second adds the sampling option and the 1000-key limit, and the third clarifies side effects and exclusions. No sentence is redundant, and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters, no output schema, and no annotations, so the description must communicate both behavior and return content. It lists the returned data categories, the optional sampling behavior, the key limit, and side-effect guarantees. It is not fully complete because it does not describe response format, ordering, or failure modes, but it covers the essential calling context well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter, including exclusions between path/param_id/component and the semantics of sample_frames. The description adds the optional sampling concept and the key limit, but does not substantially expand parameter meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('existing REAL F-Curve'), and enumerates exactly what is returned: key indices, frame times, values, interpolation, tangent offsets, and extrapolation. It also distances itself from other readers ('Not a scene/constraint evaluation or character-animation reader'), making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear this is for reading existing real F-curves only and explicitly states it does not create tracks or change document time. It also excludes scene/constraint evaluation and character-animation reading. It does not name sibling alternatives like get_keyframes or edit_fcurve_keys directly, but the exclusions give enough contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_graph_infoGet Node Material 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_description to confirm the right node_space is addressable on this build / material.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Material handle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It clearly indicates a read/report operation with 'Report' and 'confirm', and it enumerates the returned information. It doesn't discuss error behavior or permissions, but for a read-only inspection tool this is a reasonable and mostly complete disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste: the first states what is reported, the second states when to call it. The key information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description provides the essential return categories (node spaces, active node space, alias table) and frames the tool as a preflight check for apply_graph_description. It doesn't spell out the exact output structure or all handle variants, but for a single-parameter read-only tool the high-level summary is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a 'Material handle' description, and the tool description reinforces that this operates on materials, so the intended parameter is inferable. However, the schema actually permits many handle kinds beyond material, and the description doesn't explicitly restrict to the material variant or explain how to construct it, leaving some ambiguity despite 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and names the exact subject: which node spaces a material exposes a graph in, which one is active, and the alias table. This clearly differentiates it from sibling tools like list_graph_nodes or apply_graph_description, which operate on nodes rather than report node-space availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool before apply_graph_description to confirm the right node_space is addressable, giving a concrete precondition and sequential context. It doesn't name alternative tools or exclusions, but it provides clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyframesGet KeyframesA
Read keys using a full path from list_tracks or legacy param_id/component. Returns [{frame, value, interp}], preserving fractional frame positions. Optional integer start_frame/end_frame clip the exact key times inclusively without rounding subframes.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Override for BaseTime to frame conversion. | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| handle | Yes | Animated entity. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. | |
| end_frame | No | Inclusive upper frame bound. | |
| start_frame | No | Inclusive lower frame bound. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool reads keys, returns a specific data shape, preserves fractional frame positions, and clips inclusively without rounding subframes. This is meaningful behavioral detail, though it does not mention edge cases such as empty results or invalid handles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly written sentences front-load the core action and resource, then provide return format, precision behavior, and optional bounds semantics. Every sentence contributes useful information with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema and no annotations, the description provides the return type and key edge-case behavior, while the fully documented input schema covers all parameters. The addressing modes and clipping semantics are explained well enough for an agent to invoke the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 7 parameters, so the baseline is 3. The description adds value by explaining the relationship between the path and the legacy param_id/component addressing modes, and by clarifying the inclusive clipping semantics of start_frame/end_frame. This goes beyond the schema's simple parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read keys' using either a full path from list_tracks or a legacy param_id/component. It also states the exact return shape [{frame, value, interp}] and clarifies that fractional frame positions are preserved, which distinguishes this from related keyframe tools like set_keyframe, delete_keyframe, and get_fcurve.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on how to invoke the tool: use a full path obtained from list_tracks, or use the legacy param_id/component alternative. It also explains the meaning of optional start_frame/end_frame bounds. It does not explicitly name alternatives or exclusions, but the read-only purpose is sufficiently clear from the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meshGet MeshA
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 | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Target object (must be editable). | |
| include | No | Optional extras. 'normals' adds phong-shaded vertex normals. 'selections' adds `point_selection` / `poly_selection` / `edge_selection` index lists. | |
| max_polys | No | Default 50000. | |
| max_points | No | Default 50000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full transparency burden and discloses meaningful behavior: the editable-object requirement, the C4D triangle storage quirk (c==d), and the default 50,000 count cap to protect JSON payload size. It also describes the return representation for triangles and quads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences cover purpose, prerequisite, output encoding, and limits with no filler. The most important constraint, editable objects and required conversion, appears early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers the key behaviors: readable object types, conversion prerequisite, geometry encoding, and output caps. It stops short of specifying the exact response structure or what happens when a cap is exceeded, but it is sufficient for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already handles parameter definitions. The description adds value by explaining the purpose of the max_points/max_polys caps, how to override them, and reinforces the editable constraint on the handle parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb, 'Read', and a specific resource, 'points and polygons (or spline segments)', scoped to editable PointObject / PolygonObject / SplineObject. It clearly identifies what this tool returns and differentiates it from sibling writers like set_mesh and generic get_params.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit prerequisite: primitives must be converted via modeling_command make_editable, so an agent knows not to call get_mesh directly on a Cube or Sphere. It does not name an alternative geometry-reading tool, but the conversion routing is enough to establish when the tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_object_layerGet Object's LayerA
Return the layer currently assigned to a target entity (object / tag / material), or null if unassigned.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Entity to query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does disclose a key behavior: it returns null if the layer is unassigned. It does not explicitly state that the operation is read-only, nor does it describe error behavior or response format, but these are less critical for a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the operation and includes the key null-if-unassigned behavior. There is no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter getter, the description is mostly sufficient, but it omits the full range of supported target kinds and does not describe the format of the returned layer value. Since there is no output schema and no annotations, these gaps leave some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema's target definition is rich enough to document accepted entity forms. The description adds only a partial, somewhat misleading list of entity types, so it does not meaningfully improve on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the layer currently assigned to a target entity, which distinguishes it from layer mutation or listing tools. However, it only mentions object/tag/material while the schema supports additional entity kinds like render_data, take, video_post, shader, gv_node, and plugin_options, so the scope statement is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when you need to query the current layer assignment of an entity, which is useful context. It does not explicitly name alternatives or state when not to use it, so usage guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paramsGet Parameter ValuesA
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 | Required | Description | Default |
|---|---|---|---|
| ids | Yes | List of parameter paths to read. | |
| 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",render_data,type_id}, {kind:"shader",owner:<handle>,index}, {kind:"gv_node",tag:<tag handle>,id?|name?} (Xpresso GvNode; use list_xpresso_nodes to discover stable path ids — GvNode inherits BaseList2D so set_params/get_params/describe work on it), {kind:"plugin_options",plugin_id,plugin_type?} (plugin_id accepts an int or a format alias like "abc"/"fbx"/"obj"/"usd"/"gltf"; plugin_type defaults to "scene_saver"; resolves to the plugin's settings BaseList2D — describe+set_params it to configure exporter options before save_document). Prefer `path` over `name` when names are not unique. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explicitly states the operation is a read, specifies the exact return shape `{values: [{path, value}]}`, preserves request order, and explains dtype inference and override syntax. This is highly transparent for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, each earning its place: purpose, id grammar, explicit dtype syntax, return contract and discovery hint. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides the return contract even though no output schema exists, explains the parameter path grammar thoroughly, and points to `describe` for id discovery. Combined with the detailed handle schema, an agent has enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds critical semantics beyond the schema: valid id forms, chained DescIDs, 'x'/'y'/'z' vector sub-components, and explicit dtype tuples. This is essential for constructing correct `ids` payloads and is not inferable from the raw schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read parameter values on a C4D entity'. It clearly distinguishes this as a read operation from siblings like set_params, and 'Discover ids via describe' positions it relative to the discovery tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read context is clear, and it explicitly directs the agent to `describe` when ids need to be discovered. However, it does not explicitly state when to avoid this tool or prefer alternatives like set_params, so it lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selectionGet Active 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It clearly indicates this is a non-mutating read operation ('Read') and specifies the kinds of data returned (active object, selected objects, tag/material). It also mentions the crucial behavior of returning 'canonical handles' suitable for piping to other tools. It does not detail error cases or empty-selection handling, but the core behavioral traits are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the first states the core function, the second explains the primary use case, and the third describes the output format and integration. There is no fluff or repetition; each sentence adds distinct value. The most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description adequately explains the main return contents (active object, all selected objects, active tag/material) and their nature (canonical handles). It does not specify the exact response structure or empty-selection behavior, but for a simple zero-parameter getter, this is reasonably complete for an agent to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the schema itself is complete by definition. The description does not need to explain parameters. The baseline for 0 parameters is 4, and the description does not introduce any conflicting or missing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and a precise resource ('the active document's current selection') with enumerated components: active object, all selected objects, and active tag/material. This clearly distinguishes it from sibling tools like set_selection, which mutates selection, and is far from tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when this tool is useful: 'reacting to the user's current focus without asking them to re-pick entities.' It also provides a workflow hint by noting that returned canonical handles can be piped into describe or set_params. It does not explicitly list exclusions or alternative tools, but the provided context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_sceneImport / Merge Scene FileA
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 | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file to merge (abc/fbx/obj/c4d/...). | |
| filter | No | Scene filter (default "all"). | |
| parent | No | Optional parent handle — newly-imported top-level objects are moved under this object. | |
| rename | No | Optional new name for the first imported top-level object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It explains that the tool mutates the active document by merging, returns newly-imported top-level objects, and can optionally reparent and rename. However, it does not mention side effects such as name collisions, whether the operation changes the active document beyond adding objects, or behavior on merge failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. The first sentence names the core operation and formats; the second covers return value and optional behaviors. Every sentence provides useful signal with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description usefully states that the tool returns newly-imported top-level objects for chaining. It also covers file formats and optional parent/rename behavior. It is slightly incomplete regarding prerequisites and side effects, but sufficient for an agent to understand the tool's role and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so a baseline of 3 applies. The description adds meaningful semantics for parent and rename, clarifying that imported objects are reparented and the first root is renamed. It also explains the return value in relation to the filter. Path and filter remain schema-described, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: merge an external file into the active document via MergeDocument. It also clarifies the return value and optional behaviors, making it clearly distinguishable from sibling tools like open_document or reset_scene.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this when importing/merging an external scene file into the active document. It also mentions chainability with set_params / create_entity / create_take, which helps the agent understand the workflow. It does not explicitly name alternatives or exclusion conditions, but the intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_documentsList DocumentsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It communicates that this is a read-only enumeration and details the entry fields: index, name, path, and active status. It also notes that the index is the handle accepted by set_active_document, which is useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The first sentence states the core purpose; the second defines the output; the third points to the relevant alternative. Every sentence earns its place and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description fully enumerates what each entry contains. It also places the tool in the larger workflow by connecting the returned index to set_active_document and contrasting with get_document_state. Nothing critical is missing for a zero-parameter read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description needs to explain no inputs, and it does so implicitly by focusing entirely on the output. The schema coverage is effectively complete, and there is no parameter meaning missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Enumerate the documents currently open in Cinema 4D.' It clearly distinguishes itself from related siblings like get_document_state and set_active_document by identifying what it lists and how the index is used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool instead of get_document_state: get_document_state only reports the active document, while list_documents reveals the others before switching. This is direct, actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entitiesList C4D EntitiesA
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 | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Entity kind to list. | |
| owner | No | Owner handle (required for kind=shader). | |
| object | No | Filter tags to this object name (only for kind=tag). Omit to list tags on all objects. | |
| type_ids | No | (kind=object) Keep only objects whose GetType() is in this set (e.g. [5159] for cubes). | |
| max_depth | No | (kind=object) Skip objects deeper than this (root=0). Default: unlimited. | |
| tag_types | No | (kind=object) Keep only objects carrying a tag whose type id is in this set (e.g. [5616] for Ttexture). | |
| object_path | No | Filter tags to this object path (only for kind=tag). Use when the name is not unique. | |
| render_data | No | Render data name (required for kind=video_post). | |
| include_tags | No | (kind=object) Attach `tags: [{type_id, type_name, name}, ...]` to each match. | |
| name_pattern | No | Optional regex to filter results by name (e.g. "^VFX_Shot00[2-9]$"). | |
| include_params | No | (kind=object) Parameter ids to read per match. Returned under `params: {param_id: value}`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it discloses the return format, kind-specific fields (is_active for take/material/render_data), the inline data-reading behavior of include_tags/include_params, and the shader-chain vs node-graph behavioral caveat. It stops short of explicitly stating read-only semantics and any result limits, but the return-shape and per-kind behavior disclosure goes well beyond the bare minimum.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, roughly 85 words, with zero filler. The core purpose and return shape are front-loaded, followed by the object-kind capabilities, then the usage ordering guidance, then the shader caveat. The example and the list_graph_nodes pointer each earn their place by preventing a likely mis-selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is an 11-parameter, kind-dependent tool with no output schema and no annotations, so the description has a heavy burden. It covers the return format, the most confusing behavioral trap (shader vs node-material), and the tool's role in the discovery workflow. The main gap is that the return-value disclosure is partial — fields are enumerated for only some kinds — but 100% schema coverage on parameters and the explicit shader caveat keep this complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so per-parameter documentation already exists, establishing a baseline of 3. The description adds genuine value beyond that by showing how parameters compose in a real query: 'all cubes with a Ttexture tag and their position in one call' demonstrates the combined use of type_ids, tag_types, and include_params. This composition insight is absent from the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Enumerate scene entities of a given kind') and immediately describes the return shape ('compact summaries (name, type_id, type_name, plus kind-specific fields...)'). It differentiates from siblings by name-dropping the closest alternative (list_graph_nodes) and clarifying that shader enumeration covers classical chains only, so an agent can distinguish this from list_graph_nodes and list_xpresso_nodes without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit sequencing guidance: 'Use this first to find what exists before describe/set_params.' It also names concrete alternatives with selection conditions — 'without falling back to exec_python' and 'for node-material graphs use list_graph_nodes.' This is exactly the when/alternative routing the dimension asks for, with nothing left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_graph_node_assetsList Node Graph Asset TypesA
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 | Required | Description | Default |
|---|---|---|---|
| node_space | No | Alias 'standard' | 'redshift' | 'scenenodes' (a.k.a. 'neutron') or a fully-qualified maxon.Id. Default 'standard'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses that results are filtered to templates actually addable in the scene-nodes space and that supported:false is returned when the maxon framework is absent. This adds meaningful behavior beyond the name and schema. It doesn't describe the full response shape, but the read-only enumeration nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each contributing distinct value: what the tool returns, how the IDs are used, and how the scene-nodes case differs from list_graph_nodes. The main purpose is front-loaded and the examples make the distinction concrete without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter, no annotations, and no output schema, the description covers the core semantics: what is enumerated, how node_space affects results, and the supported:false edge case. It does not explicitly state the output structure (e.g., array of strings vs. object with supported flag), but enough is conveyed for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents node_space aliases and the default value well, so the baseline is 3. The description adds extra meaning by linking node_space behavior to the scene-nodes (neutron) case and clarifying how the results relate to apply_graph_description and list_graph_nodes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Enumerate registered node-template asset ids for a node space.' It also distinguishes this from the sibling list_graph_nodes by explaining that these IDs differ from the net.maxon.corenode:* IDs reported for existing nodes, so an agent can tell the tools apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the primary use case: these IDs are what you pass to apply_graph_description as $type. It also contrasts the scene-nodes filtering behavior with list_graph_nodes, giving useful selection context, though it stops short of an explicit 'use this instead of X when...' formulation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_graph_nodesList Node Material Graph NodesA
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 | Required | Description | Default |
|---|---|---|---|
| scope | No | Set to 'document' to target the scene-nodes (neutron) graph. | |
| handle | No | Material handle. Required unless `scope:'document'`. | |
| node_space | No | Alias 'standard' | 'redshift' | 'scenenodes' / 'neutron' or a fully-qualified maxon.Id. Default 'standard' (materials) or 'scenenodes' (document). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses a list-like behavior, the flat-list result shape, and the `supported:false` failure condition when the maxon framework is unavailable or no graph exists. It does not detail the node object structure or other error modes, but for a list operation this is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: the core purpose, the two targeting modes, and the key failure signal. It is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema, the description covers the invocation modes and the main unsupported case. It could be more explicit about the shape of the returned node items, but it is sufficient for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains `scope`, `handle`, and `node_space` defaults/aliases. The description repeats the handle-vs-scope relationship but does not add significant parameter meaning beyond the schema, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Walk a node graph and return a flat list of nodes') and specifies two target scopes: a material handle or the active document's scene-nodes graph. It does not explicitly distinguish this from sibling tools like list_graph_node_assets or list_xpresso_nodes, but its function is concrete and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable context on when to use each target: use `handle` for node-based materials and `scope:'document'` for the active scene-nodes graph. It doesn't mention exclusions or alternative sibling tools, so it stops short of a full when-not-to-use comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_layersList 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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool enumerates all LayerObjects and describes the per-entry return contents: name, optional color, and flag dict. It stops short of explicitly stating that it has no side effects or how it behaves with no active document, but the term 'Enumerate' strongly implies a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It front-loads the primary purpose and follows with the relevant return details. Every phrase contributes information, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description is complete: it names the resource scope, the enumeration behavior, and the exact fields returned per layer. An agent has enough information to invoke the tool and interpret its result without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty with zero parameters, so the baseline is 4. No parameter-level description is needed because there is nothing for the agent to populate or disambiguate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Enumerate') with a clear resource ('every LayerObject') and scope ('in the active document'). It clearly differentiates this listing tool from the layer-related siblings like create_layer, assign_to_layer, and set_layer_flags, since they are all about mutation or assignment rather than enumeration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied: if an agent needs to inspect all layers in the active document, this is the tool. However, there is no explicit guidance about when not to use it or which alternative to choose, such as get_object_layer for a single layer or set_layer_flags for modifying flags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mograph_clonesList 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 {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 | Required | Description | Default |
|---|---|---|---|
| handle | Yes | MoGraph generator (e.g. Omgcloner). | |
| max_count | No | Cap on clones returned. Default 2048. | |
| include_matrix | No | Include the 4x3 matrix per clone. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It transparently discloses a non-obvious side effect: 'The bridge forces a scene pass so the MoData array is populated before sampling.' It also states the exact failure modes and the supported/unsupported return flag. This is more than most tool descriptions provide, though it doesn't mention performance cost or mutation risk (there is no mutation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, behavioral note, and return format/failure modes. The key verb and resource appear in the first sentence, and the return shape is compactly specified inline. No redundancy with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, behavior, return shape, and failure conditions. With no output schema, the inline return shape `{count, returned, clones: [{index, pos, matrix?}]}` is essential and present. It doesn't explain what 'pos' contains or the matrix format, but those are minor given the tool's narrow scope and the parameter defaults already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all three parameters (handle, max_count, include_matrix). The description adds minimal parameter-level detail, but it does clarify that max_count defaults to 2048 and that include_matrix controls the optional matrix field, which is mildly helpful. Baseline 3 is appropriate given full schema coverage and no required extra semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Read') and resource ('per-clone transforms from a MoGraph generator'), explicitly names supported generators (Cloner / Matrix / Tracer), and is distinguishable from sibling tools like sample_transform or get_mesh. The return format is also stated, which further clarifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the primary use case (reading per-clone transforms) and gives a conditional fallback ('supported:false when the build lacks c4d.modules.mograph or when the handle isn't a MoGraph generator'). It does not explicitly name alternative sibling tools or when-not-to-use scenarios, but the context is clear enough for an agent to decide when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pluginsList C4D Plugins (Any Type)A
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 | Required | Description | Default |
|---|---|---|---|
| plugin_type | No | Plugin category: string alias or raw c4d.PLUGINTYPE_* integer. Defaults to 'command'. | command |
| name_pattern | No | Optional regex applied to plugin display name (e.g. "octane|convert"). | |
| plugin_pattern | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does a solid job by explaining the output entry shape (plugin parent folder and plugin_file basename) and the regex filtering behavior. It doesn't explicitly state that enumeration is side-effect-free or describe error behavior, but the enumerator framing makes the behavior predictable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences with no wasted words. The lead sentence states the tool's purpose, and each subsequent sentence adds a distinct functional detail about input, output, and filtering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple enumerator with three optional parameters and no output schema, the description is sufficiently complete: it covers input modes, output entry fields, and filter behavior. Minor gaps such as result ordering and behavior for unknown plugin_type are unlikely to block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful value by clarifying plugin_pattern semantics (matched against folder/binary and useful when the command display name lacks the plugin brand) and by explaining the plugin/plugin_file output attribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a generalized C4D plugin enumerator covering any plugin type, with concrete examples such as material, shader, video_post, and command. This distinguishes it from sibling list_* tools that target documents, layers, tracks, or graph nodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: pass plugin_type to enumerate plugins, and optionally narrow results with name_pattern and plugin_pattern. It doesn't explicitly name alternatives or exclusions, but no sibling tool appears to be a direct plugin-listing alternative, so the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracksList Animation TracksA
Enumerate CTracks. Each entry includes name, full path ([[id,dtype,creator],...]), legacy param_id/component, dtype and key_count. Pass path alone with the entity handle to get/set/delete keyframes or delete_track. Vector channels have separate entries per component.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Entity whose animation tracks to enumerate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses non-obvious behavior such as vector channels producing separate entries per component and describes the path encoding format. It does not explicitly state that the operation is read-only, but 'enumerate' and the output-focused wording strongly imply a non-mutating list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: first the action, then the returned fields, then the vector-channel caveat and downstream usage. Every sentence earns its place and there is no filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately compensates by specifying each entry field, the full-path structure, and the vector-channel behavior. It also explains how the returned paths are consumed by sibling keyframe and track tools, which is enough context for a simple one-parameter enumeration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, handle, is already documented in the schema as 'Entity whose animation tracks to enumerate,' and the schema coverage is 100%. The description adds no additional input semantics beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb-resource pair 'Enumerate CTracks' and then lists exactly what each entry contains: name, full path, legacy param_id/component, dtype, and key_count. This makes it clearly distinct from track-editing siblings like set_keyframe, get_keyframes, and delete_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful workflow context by explaining that the returned path is meant to be passed with the entity handle to get/set/delete keyframes or delete_track. This clearly positions list_tracks as the discovery step before track/keyframe operations, though it does not explicitly state when not to use it or name a direct alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_dataList User DataA
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 | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Target to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It discloses the return record fields and the downstream use of desc_id, which is meaningful. However, it does not explicitly state that this is a read-only, non-destructive operation or describe any error/edge-case behavior, leaving the safety profile implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The primary action is front-loaded, the return shape is specified in a compact inline object, and the follow-up instruction about desc_id earns its place by connecting this tool to its siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description correctly takes responsibility for explaining the return values, which it does by listing the entry fields. It also explains how the output should be consumed. It could go further by noting the absence of side effects or behavior on targets with no User Data, but for a simple listing tool the provided context is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage for the single handle parameter is 100%, and the schema already describes it as 'Target to inspect.' The prose description adds no new parameter-level semantics beyond restating the target concept, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Enumerate') and a precise resource ('User Data slots on a target'), and immediately states the shape of each returned entry. This cleanly separates it from sibling tools like add_user_data or remove_user_data without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: you call this to inspect User Data slots on a target. It also tells the agent how to use the returned desc_id with remove_user_data, get_params, and set_params. However, it does not explicitly state when to prefer this over get_params or when not to use it, so the guidance is useful but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_xpresso_nodesList Xpresso Graph 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_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 | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Xpresso tag handle or host object handle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It discloses that the operation walks a tag, returns a flat list, provides stable dotted-index path ids, includes port summaries, and handles two input kinds with a defined fallback for object handles. It stops short of describing error cases or output ordering, but for a read-only listing tool the behavior is well specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core action, the second defines the output's key field and stable path semantics, and the third covers both input variants and downstream usage. The most critical scoping information is front-loaded, and there is zero filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description adequately explains what is returned (flat list, dotted-index id, port summaries) and how to use the output. It also handles the input flexibility. The main gaps are lack of detail on what exactly 'port summaries' includes and no mention of edge cases (e.g., missing tag or object without a Texpresso tag), but the essential calling contract is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema documents the 'handle' parameter at 100% coverage, the description adds critical meaning: it clarifies that both tag handles and object handles are accepted, defines exactly what an object handle does (uses that object's first Texpresso tag), and explains the id format plus downstream consumption via `{kind:'gv_node', tag, id}`. This transforms a generic union type into an actionable parameter contract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Walk an Xpresso ... tag and return a flat list of its GvNodes.' It names the domain (Xpresso), the aliases (Texpresso / GvNodeMaster), and the exact output (GvNodes), which clearly separates it from generic graph tools like list_graph_nodes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly says the tool accepts either a tag handle or an object handle and explains the object-handle behavior ('uses that object's first Texpresso tag'). It also tells the agent how to use the returned ids from downstream Xpresso tools. However, it does not explicitly name when not to use this tool versus a sibling like list_graph_nodes, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modeling_commandModeling 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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | MODELINGCOMMANDMODE_* selector. Default 'all'. | |
| params | No | Optional BaseContainer params for the command (e.g. subdivision level). | |
| command | Yes | Alias (see description) or raw MCOMMAND_* integer. | |
| targets | Yes | Target object handles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does substantial work: it names the underlying API and discloses the key return distinction — new-geometry commands (Current State to Object, Connect/Join, Split, Explode Segments) return handles to inserted results, while in-place commands (Make Editable, Subdivide, Triangulate) return the mutated targets. It stops short of covering error conditions, destructiveness, or potential dialog behavior, but the return semantics are the critical unknown for an agent calling this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two information-dense sentences front-load the operation and return behavior before a functional alias list. There is no filler; the list length is inherent to supporting 16 command aliases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The return-value disclosure partially compensates for the missing output schema and the highly nested targets schema. Gaps remain: no guidance on which aliases support which mode values, no error behavior for invalid command/target combinations, and no indication of whether operations are destructive or undoable — notable for a mutation tool with zero annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description is genuinely additive by expanding the command parameter into its full alias set and hinting at params usage with the 'subdivision level' example. This enriches what the schema's terse one-line descriptions provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Run a Cinema 4D modeling operation via c4d.utils.SendModelingCommand on one or more target objects.' It goes further than most by disclosing the return-behavior split between geometry-producing and in-place commands and enumerating 16 aliases, which clearly separates it from the generic call_command sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The alias list and 'modeling operation' phrasing imply this is the tool for C4D modeling commands, but there is no explicit statement of when to use it over siblings like call_command, nor any exclusions, prerequisites, or target-type caveats. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_entityMove / Reparent / Reorder NodeA
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 | Required | Description | Default |
|---|---|---|---|
| after | No | Insert immediately after this sibling. | |
| before | No | Insert immediately before this sibling. | |
| handle | Yes | Node to move (object / take / render_data). | |
| parent | No | Insert as last child of this parent. | |
| to_root | No | Promote to the top of the hierarchy (objects → doc root, takes → under Main, render_data → top level). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden — and it delivers. It discloses the take-specific edge case ('the Main take itself cannot be moved'), the mutual-exclusivity validation rule, and the return behavior ('Returns the node's new canonical handle so follow-up edits remain stable'). For a mutation tool with zero annotation coverage, this is genuinely rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: the first states operations, the second states scope and the kind-matching constraint, the third states the one-of rule, and the fourth covers the take edge case plus return value. Purpose is front-loaded with no filler, though it is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by stating the return value (canonical handle). Given the tool's complexity — 5 params, a one-of rule, and multi-kind support — all critical operational facts are present. The remaining gap is error/failure behavior for invalid moves (e.g., what happens if the Main take is targeted), which would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each of the 5 properties described, so baseline is 3. The description adds value the schema cannot express: the mutual-exclusivity constraint across parent/before/after/to_root ('Exactly one destination field must be provided') and the per-kind semantics of to_root for takes. This exceeds baseline but the schema still does substantial heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reparent a node under a new parent, promote it to the top of its hierarchy, or reorder it relative to a sibling') and scopes it to objects/takes/render_data. This clearly distinguishes it from sibling mutation tools like create_entity, remove_entity, and clone_entity, which create or destroy rather than restructure hierarchy, and from set_transform, which changes position rather than hierarchy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: the supported node kinds, the constraint that siblings/parents must share the moved node's kind, and the one-of destination rule. It does not explicitly name alternative tools to use instead, but the operational constraints effectively bound when the tool applies. A named exclusion would push this to 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_documentNew 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional display name for the new document. | |
| make_active | No | Switch the active document to the new one. Default true. False is refused when the current document is blank because Cinema 4D would destroy it during insertion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the main side effects: a new document is inserted into the document list and focus switches by default. The edge case about make_active=false being refused on a blank document is covered in the parameter schema, and the description adds the non-destructive context. It does not discuss return values, but none are expected for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The action and the primary use case are front-loaded, and each sentence contributes meaningful information about behavior and purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with two optional parameters and a well-covered schema, the description is complete. It tells the agent what the tool does, the default behavior, and why it is useful. No output schema is needed to understand the call, and there are no hidden prerequisites that would block correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description reinforces that make_active defaults to switching focus but adds little beyond what the schema states. Baseline 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Insert a fresh empty BaseDocument'), a precise resource (C4D's document list), and a key behavior (switch focus by default). It also distinguishes itself from destructive alternatives by noting it does not overwrite the current document, which separates it from reset_scene and similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this to start a clean scene without overwriting the current one. It does not explicitly name alternative tools or exclusion conditions, but the 'without overwriting' phrasing provides enough situational guidance for an agent to pick it over destructive scene operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_documentOpen DocumentA
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 | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to a loadable scene file. | |
| make_active | No | Switch the active document to the newly loaded one. Default true. False is refused when the current document is blank because Cinema 4D would destroy it during insertion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the disclosure burden. It reveals the load-as-new-document behavior, the default focus switch, and the refusal when `make_active:false` would cause destruction of a blank document. It does not fully explain what happens to other open documents, but the central side-effect behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose. However, the comparison with `import_scene` is stated twice ('Unlike `import_scene`' and 'Differs from `import_scene`'), which is slightly redundant and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter, no-output-schema tool, the description covers the core purpose, the distinguishing behavior, parameter defaults, and an important edge case. It is complete enough for selection and invocation, though it omits details about file format support or return behavior, which are not essential here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds minimal extra semantic value, mainly reinforcing the default and purpose of `make_active` and the contrast with import. This meets the baseline for well-covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Load a Cinema 4D scene file as a new document.' It explicitly distinguishes this tool from `import_scene`, so an agent can tell them apart based purely on the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives direct usage guidance by contrasting with `import_scene`: use `open_document` when you need the file as its own document, not merged into the current one. It also explains the behavior of the `make_active` parameter and the rejection condition, which is strong invocational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingPing C4DA
Check connectivity to the Cinema 4D bridge plugin.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. 'Check connectivity' conveys a read-only, non-mutating intent, but it does not state what the result looks like, whether it sends a fresh request or reports a cached state, or whether any state changes occur. This is acceptable for a simple ping but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word earns its place and directly conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter connectivity check, the description is largely complete. It could mention what a successful or failed response indicates, but the simplicity of the tool makes the absence of that detail a minor gap rather than a critical omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema already fully covers this dimension. The description adds no parameter information, but none is needed; the baseline of 4 for a no-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('check') and a specific resource ('connectivity to the Cinema 4D bridge plugin'). It clearly distinguishes this from the many sibling tools, none of which is described as a connectivity check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to verify bridge connectivity, but it does not explicitly say when to prefer it over alternatives or when not to use it. The use case is reasonably inferable from the verb, but no exclusions or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_renderPreview Render (Viewport, Constant Lines)A
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 | Required | Description | Default |
|---|---|---|---|
| take | No | Optional take name to switch to before rendering. Restored afterward. | |
| view | No | 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. | |
| frame | No | Optional frame number; defaults to the current document time. | |
| width | No | Output width in pixels (default 1024, max 4096). | |
| camera | No | Optional scene camera object name. Mutually exclusive with a non-'current' view. | |
| height | No | Output height in pixels (default 1024, max 4096). | |
| save_path | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to fall back on, the description carries the full burden, and it delivers thoroughly. It discloses that the active editor view is temporarily switched to Constant Shading, that it is built freestanding and never inserted, that BaseDraw/camera/time/take are restored in `finally`, and that the result is returned as base64 PNG. This gives the agent an accurate mental model of side effects and safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but information-dense, with every sentence earning its place: purpose, renderer mode, independence, cleanup, return type, and parameter usage. The most important fact (quick verification render) is front-loaded, and the parameter guidance is packed efficiently without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description fully covers the return format (base64 PNG inline), side effects (state restoration), and parameter semantics. It explains the key limitations (max 4096, parent directory must exist) implicitly through schema descriptions, and the description itself covers the behavioral contract completely. Nothing an agent needs to decide whether to call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description only needs to add value beyond the schema, and it does. It explains the behavior of 'view' presets (auto-framed temp camera), the meaning of 'current', and clarifies that save_path still returns the base64 PNG inline. The only minor gap is that the description does not restate the default/range behavior, but the schema already covers that fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('preview render') and resource ('Viewport renderer with Constant Shading Lines'), and characterizes it as a quick agent-friendly verification render. It also differentiates itself from the sibling `render` tool by emphasizing freestanding, non-inserted rendering and inline base64 return, so an agent can distinguish when to use this instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool—for quick verification renders—and contrasts it implicitly with other render tools. It provides concrete usage options: 'view' presets for auto-framed temp cameras, 'camera' for named scene cameras, and 'save_path' for disk output, giving clear conditions for each path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_entityRemove C4D EntityB
Delete the resolved entity (wrapped in an undo step).
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Entity to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does add one useful behavioral trait: the deletion is 'wrapped in an undo step,' implying reversibility. However, it does not disclose side effects such as whether deleting an entity cascades to children, associated data, or dependent references.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence: the action 'Delete' comes first, followed by the object and a brief parenthetical about undo behavior. Every word contributes meaning, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a complex polymorphic handle schema and no annotations or output schema, the description is too thin. It omits guidance on when to choose this tool over related removal tools, what side effects to expect, and how the entity resolution works. An agent would need to infer most operational context from the schema and sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the handle parameter is described as 'Entity to delete' and its schema enumerates the supported entity kinds. The description's phrase 'resolved entity' adds mild semantic value by indicating that the handle is resolved to an entity, but it does not go beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Delete') and a resource ('the resolved entity'), making the core purpose clear. It is not a tautology and adds the 'resolved' qualifier, which hints at how the handle works. However, it does not explicitly distinguish this from sibling removal tools like remove_graph_node or remove_xpresso_node, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus the many sibling tools that also remove or delete things, such as remove_graph_node, remove_user_data, or delete_track. The description simply says what the tool does, leaving the agent to infer appropriate usage from the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_graph_nodeRemove Node 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).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Target the scene-nodes graph on the active document. | |
| handle | No | Material handle. Required unless `scope:'document'`. | |
| node_id | Yes | The id of the node to remove. | |
| node_space | No | Alias 'standard' | 'redshift' | 'scenenodes' or maxon.Id. Default 'standard'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It does clearly state the destructive action 'Delete', but it does not mention what happens to connected ports, whether deletion is irreversible, or error behavior for an invalid/missing id. The stable-id note is useful but mostly parameter semantics rather than tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the operation and target, the second adds the one critical id constraint. The most important information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema already documents all parameter meanings, including handle/scope behavior and node_space, and the description supplies the critical id-provenance context. It is mostly complete for a simple deletion tool, though explicit guidance about the document/scene-nodes scope versus material handle path would remove the remaining ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is met. The description adds important meaning beyond the schema by explaining that node_id must be a stable maxon.Id and by naming the exact sources for it (list_graph_nodes or apply_graph_description's $id), preventing the common mistake of passing a display name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action, 'Delete a node by id from a node-material graph', naming the verb, target resource, and identifier type. It also distinguishes this tool from the sibling remove_xpresso_node by scoping it to node-material graphs and references the id's provenance via list_graph_nodes and apply_graph_description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an actionable prerequisite: node_id must be a stable maxon.Id obtained from list_graph_nodes or assigned via $id in apply_graph_description. This tells the agent how to obtain valid input, though it does not explicitly state when not to use the tool or call out remove_xpresso_node as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_user_dataRemove User Data SlotA
Delete a User Data slot by its DescID path (as returned by list_user_data or add_user_data). Wrapped in undo.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Target. | |
| desc_id | Yes | DescID path — list of [id, dtype, creator?] levels. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly identifies the operation as destructive ('Delete') and adds a key mitigating behavior ('Wrapped in undo'), which tells the agent the action is reversible. It does not cover failure modes or permissions, but for a straightforward delete operation the essential behavioral transparency is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence leads with the action and resource, the second immediately discloses the undo behavior. Every part earns its place, and the most important operational cue (where to get the DescID) is embedded naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool, the description covers the core call-time needs: what is deleted, how the target identifier is obtained, and that the operation is undoable. The sibling tools (add/list_user_data) complete the workflow picture. Missing explicit return-value or error handling is a minor gap, especially given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, setting a baseline of 3. The description adds meaningful provenance by stating the `desc_id` path is exactly the one returned by `list_user_data` or `add_user_data`, clarifying how to obtain and reuse that parameter. The `handle` parameter is only described as 'Target' in the schema, but the detailed kind-union in the schema compensates. Overall, the description adds a useful layer beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('Delete'), a specific resource ('a User Data slot'), and the exact method ('by its DescID path'). It also references the source tools (`list_user_data`/`add_user_data`), which disambiguates this from sibling tools like `remove_entity` and makes the operation immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by telling the agent that the DescID path must come from `list_user_data` or `add_user_data`, which effectively sequences the workflow. It does not explicitly mention when not to use the tool or name alternatives like `remove_entity`, so it falls slightly short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_xpresso_nodeRemove Xpresso Graph NodeA
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 | Required | Description | Default |
|---|---|---|---|
| handle | Yes | gv_node handle for the node to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explicitly discloses that the node is deleted and that all incoming/outgoing connections are severed automatically, which are the critical behavioral side effects. It does not mention return values or invalid-handle behavior, but for a one-parameter destructive tool this is reasonable coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action is front-loaded, followed by the handle requirement and the key side effect, all in minimal space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter destructive operation, the description covers the action, how to source the handle, and the important connection-severing behavior. It does not state whether the deletion is undoable or what is returned, but the absence of an output schema and the single-parameter design keep this gap small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the 'handle' parameter with 100% coverage, but the description adds meaningful semantics by explaining that the handle must point at the target and by pointing the agent to list_xpresso_nodes to discover the path id. This goes beyond the bare schema property text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Delete a GvNode from an Xpresso graph.' This clearly defines the tool and distinguishes it from the sibling 'remove_graph_node' by naming the Xpresso graph context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides actionable guidance: the handle must be a gv_node handle and the user should use list_xpresso_nodes to discover the target's path id. It does not explicitly contrast with remove_graph_node or state when not to use this tool, so there is slight ambiguity among graph-deletion siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renderRender Active DocumentA
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 | Required | Description | Default |
|---|---|---|---|
| output_path | No | Optional absolute path to write the rendered image. Defaults to a temp file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does disclose that rendering 'may take up to 60 seconds' and that it uses the currently active render data. However, it does not mention whether the call blocks, what it returns, or how it handles existing files at the output path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two sentences, with the core action and scope front-loaded. The prerequisite guidance and timeout note are included without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the primary action, configuration prerequisite, and expected runtime, but no output schema or annotations exist. It does not state the return value or completion behavior after rendering, nor does it guide the agent between this tool and similar siblings like preview_render and rs_render.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single output_path parameter, so the schema already fully documents it. The tool description adds no additional parameter-specific meaning, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb ('Render') and resource ('active Cinema 4D document') and scopes it to 'currently-active render data settings.' However, it does not explicitly differentiate this tool from sibling render-related tools like preview_render or rs_render, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides helpful context: rendering uses the active RenderData, and users should change settings first via create_render_data or set_params. It does not state when to prefer this tool over alternatives such as preview_render or rs_render, leaving the comparison to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_sceneReset Active SceneA
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 | Required | Description | Default |
|---|---|---|---|
| prefix | No | Only remove entities whose name starts with this prefix. Omit for full reset. | |
| keep_active_rd | No | Prefix-mode only: protect the currently-active RenderData from deletion. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and handles it well. It discloses the destructive nature with 'flushes the undo buffer', 'swaps the active document for a fresh empty BaseDocument (everything goes)', and carefully enumerates what prefix mode does and does not remove. This is unusually transparent for a reset-type operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and every sentence adds critical information: the main action, the prefix-mode behavior, and the performance rationale. It is front-loaded with the primary purpose and avoids redundant wording. The density of technical terms is justified by the complexity of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the core behavior, both modes, a usage example, and the key side effect (undo flush). The keep_active_rd parameter is only alluded to, and the return value/error behavior is not mentioned, but the 100% schema coverage compensates for the parameter gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3. The description adds value beyond the schema by providing a concrete prefix example ('e2e_'), specifying the exact categories affected (objects, materials, non-active render data, non-main takes), and explaining the undo-buffer side effect. The keep_active_rd parameter is only implicitly referenced via 'non-active render data', but the schema fully documents it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource, 'Clear scene state in one RPC', and then precisely defines two distinct modes (prefix-based partial cleanup and full document reset). It also distinguishes itself from the sibling remove_entity by stating it is 'Much faster than chained remove_entity calls', making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names a clear use case ('cheap cleanup for test suites') and an explicit alternative condition ('Much faster than chained remove_entity calls when cleanup involves animated objects'). It does not provide explicit when-not-to-use guidance, but the context implies it is the bulk-reset choice rather than for fine-grained per-entity removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_clear_aovsClear Redshift AOVsC
Clear all Redshift AOVs from one explicitly named document.
| Name | Required | Description | Default |
|---|---|---|---|
| force | Yes | ||
| document_name | Yes | Unique open document name. | |
| render_data_name | No | RenderData name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Clear' signals destructive deletion, but the description never explains the required force=true safety gate, whether the operation is undoable, error behavior for unknown documents, or how the optional render_data_name scopes the operation. The only added context is that a document must be explicitly named.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero wasted words: active verb first, then object, then scope qualifier. It is efficient and well-structured, though the length is arguably thinner than 'appropriate' for a destructive tool with a safety gate, preventing a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, no output schema, and an unexplained required force parameter, the description is incomplete. Missing: what force confirms, what render_data_name scopes, whether clearing is undoable, and what happens on failure. A 3-parameter mutating tool needs more than one sentence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds no parameter meaning. The required 'force' parameter is semantically opaque — no schema description, no mention in the description, only const:true. render_data_name's optional scoping behavior is also unexplained, and 'explicitly named document' merely restates document_name's existing schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Clear'), resource ('Redshift AOVs'), and scope ('all... from one explicitly named document'). The 'all' qualifier distinguishes it from rs_remove_aov (single-AOV removal), and 'explicitly named document' distinguishes it from active-document operations. An agent can identify the tool and its differentiation from AOV siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternatives are named even though rs_remove_aov and rs_list_aovs are natural routing candidates. The 'explicitly named document' phrase weakly implies the tool does not act on the active document, but that is an unstated implication rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_configure_renderConfigure Redshift RenderDataC
Create or update a validated Redshift RenderData without implicit activation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | RenderData name. | |
| frame | No | ||
| width | No | ||
| height | No | ||
| beauty_path | No | ||
| make_active | No | ||
| document_name | No | Open document name. | |
| output_format | No | ||
| multipass_path | No | ||
| redshift_params | No | ||
| update_if_exists | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does disclose that the tool can both create and update, that the RenderData is 'validated,' and that activation is not implicit. However, it omits important behavioral details such as failure semantics, whether existing RenderData is overwritten, access requirements, or what happens if update_if_exists is false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the core action and a critical behavioral qualifier. It is appropriately concise, though the term 'validated' is somewhat vague and could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, nested objects, no output schema, and many related sibling tools), the description is insufficient. It does not address the configuration workflow, the role of update_if_exists, the meaning of validation, or how this compares to closely related tools such as create_render_data. An agent would need substantial additional context to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18%, and the description does not compensate by explaining any of the 11 parameters. The phrase 'validated Redshift RenderData' gives a general sense of purpose but no concrete detail about fields like frame, width, height, beauty_path, make_active, output_format, or redshift_params. An agent would have to infer parameter meaning mostly from names and the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation as 'Create or update' a Redshift RenderData and adds the key qualifier 'without implicit activation,' which distinguishes it from simple creation or render tools. However, it does not explicitly name or differentiate itself from sibling tools such as create_render_data, so some ambiguity remains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives like create_render_data, rs_render, or other Redshift tools. The 'without implicit activation' phrase hints at a use case but does not explain when activation would or would not be desired, and no exclusions or alternative tool names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_create_lightCreate Redshift LightB
Create or update a native Redshift light using only runtime-supported properties.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Light name. | |
| type | Yes | ||
| color | No | ||
| exposure | No | ||
| position | No | ||
| rotation | No | ||
| intensity | No | ||
| dome_texture | No | Absolute dome texture path. | |
| document_name | No | Open document name. | |
| update_if_exists | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose that the operation creates or updates and only supports runtime properties, but it omits key behavioral details such as what happens when the light already exists and update_if_exists is false, whether an open document is required, and what side effects or return values to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes either the action, the target resource, or a constraint, making it an economically written definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with ten parameters, no output schema, and no annotations, yet the description provides almost no contextual coverage. Missing details include required parameter semantics, update behavior, return format, and document prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 30%, so the description needs to compensate. It does not explain any of the ten parameters or their roles, and the phrase 'runtime-supported properties' is too generic to clarify which properties are actually settable or how they behave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (create or update) and a specific resource type (native Redshift light), which distinguishes it from generic creation tools and other Redshift-specific siblings. The qualifier 'using only runtime-supported properties' adds a clear scope constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use it when creating or updating a native Redshift light. However, there is no explicit guidance about when not to use it or which alternative sibling to choose for other light-related or entity creation operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_create_materialCreate Redshift MaterialA
Create a Redshift node material, or reuse one exact-name match when requested.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Material name. | |
| document_name | No | Open document name; defaults to the active document. | |
| update_if_exists | No | Reuse an existing material only when its name is unique. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does disclose one non-trivial behavior: it can reuse an exact-name match if requested, which goes beyond the bare create semantics in the title. However, with no annotations available, it leaves important behavior undisclosed, such as what happens when an exact-name match exists but reuse is not requested.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the primary create action and then adds the conditional reuse behavior. There is no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple create tool, but because there are no annotations and no output schema, the agent is left uncertain about duplicate-name conflict behavior and return values. The schema covers parameters, but the operational contract is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description lightly echoes the update_if_exists behavior with 'reuse one exact-name match when requested', but it does not add significant meaning beyond the schema's own parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: create a Redshift node material, with a conditional reuse behavior for exact-name matches. This distinguishes it from sibling tools like assign_material, which attaches materials, and rs_set_material_pbr, which sets PBR material properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided, and no alternatives are named. The only usage hint is the conditional phrase 'when requested', which is vague and does not tell the agent how to decide between this tool and related material tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_get_capabilitiesGet Redshift CapabilitiesA
Report exact Redshift renderer, module, node-space, AOV, light, camera, and render support without mutating the scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses the key behavioral trait of non-mutation ('without mutating the scene'), which is valuable. However, it does not mention any other behavioral aspects like whether the tool requires a scene, whether it can fail, or what form the report takes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the core action ('Report exact') and packs all relevant details into a compact list. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only capability-reporting tool, the description clarifies what areas are covered and promises non-mutation. It doesn't describe the output structure, but with no output schema this is a minor gap; the tool appears complete enough for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is nothing for the description to add. The baseline of 4 for zero-parameter tools applies, and the description does not need to compensate for any parameter documentation gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Report') and a specific resource ('Redshift ... capabilities'), enumerating exact areas of support (renderer, module, node-space, AOV, light, camera, render). It clearly distinguishes itself from the generic sibling 'get_capabilities' by scoping to Redshift and from 'rs_list_aovs' by describing support rather than listing AOVs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without mutating the scene' implies this is a safe introspection call, but there is no explicit guidance about when to use it over other tools such as 'get_capabilities' or 'rs_list_aovs'. Usage context is only implied, not stated with alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_list_aovsList Redshift AOVsB
List Redshift AOVs from the active or named RenderData.
| Name | Required | Description | Default |
|---|---|---|---|
| document_name | No | Open document name. | |
| render_data_name | No | RenderData name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. The 'active or named RenderData' clause usefully reveals the fallback/default targeting semantics, and 'List' implies a read-only operation. However, it does not disclose failure behavior (missing active RenderData, unknown name), return format, or whether an empty list versus an error is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that wastes no words: verb first, resource second, scope last. Every element earns its place and the sentence is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two optional parameters and a complete schema, the description is mostly adequate, covering the core scope. However, with no output schema and no annotations, it leaves two meaningful gaps: what the invocation returns (a flat list of names versus structured objects) and error behavior when no RenderData is active or the named one does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, giving a baseline of 3, but the description adds genuine semantic value by clarifying that omitting render_data_name targets the active RenderData. The schema merely labels the parameter as 'RenderData name,' while the description conveys the defaulting behavior that actually determines how the optional parameter should be used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a precise resource ('Redshift AOVs'), and a scope ('from the active or named RenderData'), which clearly separates it from mutation siblings like rs_upsert_aov, rs_remove_aov, and rs_clear_aovs. It is clear and accurate, though it does not explicitly name a sibling it is not, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. The phrase 'active or named RenderData' implies a targeting behavior, but there is no explicit when/when-not guidance, no prerequisites (e.g., must a document or RenderData exist first?), and no mention of related AOV mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_remove_aovRemove Redshift AOVA
Remove one indexed Redshift AOV when its expected name and type still match.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | ||
| document_name | No | Open document name. | |
| expected_name | Yes | ||
| expected_type | Yes | ||
| render_data_name | No | RenderData name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry behavioral disclosure. It discloses the conditional nature of the removal (only if name/type match), which is useful, but does not explain what happens when the condition fails (error vs no-op) or that the operation is irreversible. More behavioral detail would be expected for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and condition, with zero fluff. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and five parameters, the description is adequate but not complete. It conveys the core behavior and precondition, but leaves out error semantics, return value, and the purpose of the optional document_name and render_data_name. Given the presence of schema descriptions for those optional params, this is a moderate gap rather than a severe one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40%, leaving the required parameters (index, expected_name, expected_type) undocumented. The description indirectly clarifies their roles by mentioning 'indexed', 'expected name', and 'type', but does not explain optional parameters or value conventions. It partially compensates for the low coverage but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Remove') and resource ('one indexed Redshift AOV') with a clear condition. It distinguishes itself from siblings like rs_clear_aovs (bulk removal) and rs_upsert_aov (add/update) by emphasizing single indexed, conditional removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'when its expected name and type still match' gives a clear precondition for use, implying a guarded removal workflow. It doesn't explicitly name alternatives or when-not-to-use scenarios, but the conditional context is strong enough to guide selection among AOV-manipulation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_renderRender Redshift OutputsA
Run a guarded synchronous Redshift render, optionally at an explicit frame with time restoration. sequence_frame restricts output to PNG Beauty without enabled AOVs. The client timeout does not cancel Cinema 4D rendering.
| Name | Required | Description | Default |
|---|---|---|---|
| force | Yes | ||
| frame | No | Explicit frame at the document FPS; restores time after rendering. | |
| overwrite | No | ||
| output_path | Yes | Absolute Beauty output path. | |
| document_name | Yes | Unique open document name. | |
| sequence_frame | No | Require an explicit frame, PNG Beauty output, and no enabled AOVs for sequence jobs. | |
| render_data_name | Yes | Unique Redshift RenderData name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does a good job: it discloses that the render is synchronous and guarded, that time is restored after an explicit frame render, that sequence_frame limits output to PNG Beauty without AOVs, and that client timeout does not cancel the Cinema 4D render. It does not specify failure modes or whether the call blocks until completion, but the core behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no filler. It front-loads the primary action and then adds the most decision-relevant details: sequence_frame restrictions and timeout behavior. Every sentence earns its place, making this an efficient, well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, no annotations, no output schema), the description covers the main operational behavior and a critical timeout caveat, but it omits necessary context for reliable invocation: what 'guarded' actually prevents, why force is required and what it does, overwrite semantics, and what the response/return value looks like. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mostly restates what the input schema already says about frame ('restores time after rendering') and sequence_frame ('PNG Beauty output' and 'no enabled AOVs'). It adds no meaningful semantics for the undocumented or under-documented parameters like force, overwrite, output_path, document_name, or render_data_name, leaving 29% of parameters without schema description and without compensation in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (run a Redshift render) with meaningful qualifiers: 'guarded synchronous', optional explicit frame, and time restoration. It is not a tautology and conveys what the tool does, but it does not explicitly differentiate itself from sibling tools like rs_render_sequence or preview_render, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: for a guarded synchronous render, and sequence_frame is described as restricting output for sequence jobs. However, it provides no explicit when-to-use vs when-not-to-use guidance and names no alternative tools, so the agent must infer routing from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_render_sequenceStart Redshift PNG SequenceA
Start a bounded background Beauty-only PNG sequence (1..300 unique frames), returning job_id immediately. Requires an updated bridge, a uniquely named open document/RenderData with PNG format and no enabled AOVs, and a new output directory whose parent exists. Never overwrites. Do not edit the scene during rendering. Use rs_sequence_status and rs_sequence_control on this same MCP server. Manifest and SHA-256 checks persist beside the frames; job control does not survive server restart.
| Name | Required | Description | Default |
|---|---|---|---|
| force | Yes | ||
| frames | Yes | ||
| document_name | Yes | ||
| output_directory | Yes | ||
| render_data_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses rich non-obvious behavior: returns job_id immediately, background execution, Beauty-only, never overwrites, job control does not survive server restart, manifest and SHA-256 checks persist. This goes far beyond the schema and gives the agent accurate expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences place the core action first, then prerequisites, then constraints and follow-up tools. Every clause carries operational value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting background job with no output schema, the description covers prerequisites, result (job_id), limitations, persistence, and monitoring tools. It could offer a bit more on the return envelope or error cases, but it is largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates for document_name, render_data_name, output_directory, and frames by adding requirements such as unique naming, PNG format, no AOVs, new parent-existing directory, and 1..300 unique frames. It does not explicitly explain the 'force' parameter, which remains a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Start a bounded background Beauty-only PNG sequence (1..300 unique frames)', and states the immediate return of a job_id. This clearly distinguishes it from siblings like rs_render or preview_render by emphasizing an asynchronous bounded sequence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description enumerates concrete prerequisites (updated bridge, uniquely named open document/RenderData with PNG format, no AOVs, new output directory with existing parent) and explicitly routes follow-up actions to rs_sequence_status and rs_sequence_control. It also warns not to edit the scene during rendering, giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_sequence_controlCancel or Resume Redshift SequenceA
Cancel stops scheduling after the in-flight frame finishes; it does not abort a C4D render. Resume is allowed only after clean cancellation in this same MCP session, verifies completed-file hashes, and never overwrites. Do not resume after modifying the scene. Failed or uncertain jobs require inspection; their output files remain intact.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that cancel is non-aborting, that resume hash-verifies completed files and never overwrites, and that failed jobs' outputs remain intact. This is rich side-effect and safety context beyond what the schema offers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each adding a distinct layer: cancel behavior, resume preconditions, and failure handling. There is no filler, no repetition of schema fields, and the most important safety caveats are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateful control tool with no annotations and no output schema, the description covers the key constraints and side effects well. It falls short only by not stating return/error behavior or the source of job_id, though those are partially inferable from the schema enums and sibling tool names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for both parameters. Cancel and resume semantics are clearly explained and map well onto the action enum. However, job_id is only implicitly described through phrases like 'same MCP session' and 'completed-file hashes'; the description never states where job_id comes from or how it identifies a sequence render.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with concrete behavioral statements: cancel stops scheduling after the in-flight frame, resume is conditional. It clearly distinguishes cancel from aborting a C4D render, which makes the tool's purpose specific. However, it never names a sibling like rs_sequence_status or rs_rer_sequence, so the agent must infer tool boundaries from title/name rather than explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when/when-not conditions: resume only after clean cancellation in the same session, never after scene modification, and failed or uncertain jobs require inspection. These are genuinely useful routing constraints. It does not explicitly point to alternative tools for inspection or for starting a new sequence, leaving some routing implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_sequence_statusRead Redshift Sequence ProgressA
Read this MCP session's sequence state, current frame, verified completed outputs, and any error without querying or modifying C4D. An uncertain state means a timed-out render may still be running; do not retry it automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides key behavioral disclosure: the operation is non-invasive and reading state does not query or modify C4D. It also warns about the semantic meaning of an uncertain state, which is essential for safe automation. This exceeds a bare read-only statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry all necessary information with no fluff. The main action and scope are front-loaded, and the warning is placed where it will be noticed. Nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter status tool, the description covers return contents (state, frame, verified outputs, error), the non-modifying guarantee, and the retry caution. It omits behavior for invalid/missing job IDs, but this does not block correct invocation in the common case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never explains the sole parameter, job_id. Although the name and UUID format hint at its role, the description does not state which session or job the ID refers to, leaving an agent to infer the mapping between 'this MCP session' and the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('read') and names a clear resource: the MCP session's sequence state, including current frame, verified completed outputs, and any error. This cleanly differentiates it from control-oriented siblings like rs_sequence_control.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says when to use the tool (to check session state without touching C4D) and adds an important caveat: an uncertain state may mean a timed-out render is still running and should not be auto-retried. It does not explicitly name alternative tools, but the read-vs-control distinction is implicit and sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_set_cameraSet Redshift CameraB
Create or update a native Redshift camera and report unavailable requested settings.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Camera name. | |
| f_stop | No | ||
| exposure | No | ||
| position | No | ||
| rotation | No | ||
| shutter_time | No | ||
| document_name | No | Open document name. | |
| shutter_angle | No | ||
| depth_of_field | No | ||
| focus_distance | No | ||
| update_if_exists | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool can create or update camera settings and that it reports unavailable requested settings, which is a useful behavioral trait. However, it does not mention side effects, whether updates are destructive, error handling, or what the report looks like. Some behavioral context is present, but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that front-loads the core action and resource, then adds the distinguishing reporting behavior. There is no wasted words and every phrase adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, no annotation, and no output schema, the one-sentence description is insufficient. It does not explain what 'report unavailable requested settings' means, whether the document must be active, what the required name parameter controls, or what the return format is. An agent would struggle to use this tool correctly without inspecting the schema or experimenting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 18%, so the description must compensate for 11 parameters, but it provides no parameter-specific information. The phrase 'requested settings' is a vague reference and does not explain any of the fields like f_stop, position, or shutter_time. This is a significant gap for tool selection and invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create or update') on a specific resource ('native Redshift camera') and adds a distinctive behavior ('report unavailable requested settings'). This clearly differentiates it from sibling tools like rs_create_material or rs_create_light without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: use this tool to create or update a native Redshift camera. However, it provides no explicit guidance on when not to use it, no alternative sibling tools are named, and there are no conditions or exclusions. The usage context is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_set_material_pbrSet Redshift PBR MaterialB
Patch supplied Redshift Standard Material PBR channels. Texture paths are prevalidated; replace_graph requires an explicit document and reliable rollback support.
| Name | Required | Description | Default |
|---|---|---|---|
| normal | No | ||
| material | Yes | Target Redshift material handle. | |
| metalness | No | ||
| roughness | No | ||
| base_color | No | ||
| displacement | No | ||
| document_name | No | Open document name. | |
| replace_graph | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that texture paths are prevalidated and that replace_graph requires an explicit document and reliable rollback support. However, it does not explain what replace_graph actually does, what failure modes exist, or whether the operation is undoable, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with little wasted text, and the most important constraint (replace_graph needs document and rollback support) gets its own sentence. Some phrasing such as 'reliable rollback support' is vague, but overall the size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 8 parameters, deeply nested channel objects, no annotations, and no output schema, this description is not complete enough. An agent would need external knowledge or schema inference to understand what each PBR channel accepts and what actually happens when replace_graph is true or false.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description needed to compensate for the many undocumented parameters. It does not define base_color, roughness, metalness, normal, or displacement beyond the generic 'PBR channels' phrase. It adds a small amount of meaning around replace_graph and the document requirement, but not enough to make 8 nested parameters understandable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Patch') and resource ('supplied Redshift Standard Material PBR channels'), making it clear this edits an existing material rather than creating or assigning one. It does not explicitly name a sibling alternative, but the wording itself delineates the purpose from rs_create_material and assign_material.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance. 'Supplied' implies the tool targets an existing material, but it does not tell the agent when to choose this over set_params, rs_create_material, or assign_material. The replace_graph requirement is a constraint, not a routing guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs_upsert_aovCreate or Update Redshift AOVB
Create or update one exact Redshift AOV type/name pair.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | AOV name. | |
| type | Yes | ||
| params | No | ||
| enabled | No | ||
| document_name | No | Open document name. | |
| direct_file_path | No | Absolute output path. | |
| render_data_name | No | RenderData name. | |
| multipass_enabled | No | ||
| direct_file_enabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description alone must convey safety and side effects. The text discloses that the operation can create or update, but it doesn't state whether the update overwrites existing settings, whether other AOVs are untouched, what preconditions exist, or what response the caller should expect. This is very thin for an annotation-free mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core verb and resource, with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema and no annotations, this description is not complete enough. It explains the identity pair but leaves the update semantics, optional parameters, effect on existing AOVs, and return behavior unspecified, so an agent would struggle to invoke it correctly with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 44%, so the description needs to explain the remaining parameters. It adds value by clarifying that type and name together form the identity pair, but it says nothing about the 'params' object or other optional fields such as enabled, document_name, render_data_name, direct_file_path, multipass_enabled, or direct_file_enabled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Create or update') and the target ('Redshift AOV type/name pair'), and the word 'exact' distinguishes it from bulk AOV tools like rs_clear_aovs or rs_configure_render. However, it does not explicitly name sister tools, so it isn't fully differentiated on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Create or update one exact... pair' implies this is the tool to call when you want to ensure a single AOV exists with a specific identity. But it gives no explicit guidance about when not to use it, nor does it mention alternatives such as rs_list_aovs, rs_remove_aov, or batch-oriented tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sample_transformSample Object Transform at FramesA
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 | Required | Description | Default |
|---|---|---|---|
| fps | No | Time base override (default: doc fps). | |
| space | No | Transform space (default "global"). | |
| format | No | Output format: "off_rot" returns pos+rot(HPB radians); "matrix" returns 4x3 rows. | |
| frames | 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 | No | Restore the original playhead after sampling (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It does describe the core behavior: evaluate at each requested frame and return the transform. However, it does not mention potential side effects such as playhead movement or scene-evaluation cost, despite the existence of the restore_time parameter, and it does not clarify return structure in the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first states the operation and scope, and the second provides a concrete use case. The key information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema with all six parameters documented, enums, and constraints, plus a clear two-sentence description, the agent has enough context to invoke the tool correctly. The lack of an output schema and explicit side-effect disclosure is a minor gap, but the overall context is sufficient for this read-style sampling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-specific detail, instead relying on the schema descriptions for frames, handle, fps, space, format, and restore_time. This is adequate but not additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Evaluate the scene at each requested frame and return the object's transform.' This clearly conveys a sampling/read operation. However, it does not explicitly name or contrast a sibling tool such as set_transform, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful to verify alembic / constraint / xpresso-driven animation' provides concrete when-to-use context, and 'without writing a bespoke exec_python sampler' identifies an alternative approach to avoid. It does not explicitly state when not to use the tool or compare it to a named sibling, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_documentSave 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 copy:true the document's internal name/path is left unchanged (Save-As-Copy behaviour).
| Name | Required | Description | Default |
|---|---|---|---|
| copy | No | Save as copy — document's active path/name stays unchanged. Default false. | |
| path | Yes | Absolute output path. | |
| format | No | Export format alias. Default 'c4d'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does well by stating absolute-path requirements, parent-directory existence, supported formats with defaults, and the side-effect that copy:true leaves the internal name/path unchanged. It does not state overwrite behavior or error return, but the most critical behaviors are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary action is front-loaded, followed by essential constraints, then format details, then the copy nuance. Every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no output schema and no annotations, the description covers the essential context: what is saved, path requirements, format options, and copy semantics. Minor gaps like return values and overwrite behavior exist, but they do not prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by listing format aliases (abc / alembic), identifying c4d as the default, and elaborating on the copy parameter's Save-As-Copy behavior. This extra context helps the agent choose correct values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Save the active document to disk.' This clearly distinguishes the tool from file-related siblings like open_document, new_document, and import_scene. The additional scope qualifier 'active' pinpoints exactly which document is affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete preconditions: the path must be absolute and the parent directory must exist. It also clarifies format selection and the Save-As-Copy semantic for copy:true. It does not explicitly contrast with alternative tools, but since no other sibling performs saving, the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_active_documentSet Active DocumentA
Switch focus to an already-open document, identified by its list index (from list_documents) or name. Pass exactly one of the two. name errors if it matches zero or several open documents — use index to disambiguate. This only switches between documents already open; use open_document to load a file from disk.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Document name; errors if it matches zero or several open documents. | |
| index | No | 0-based position in the document list (see `list_documents`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does well: it explains the one-of requirement, the exact error condition for ambiguous/absent names, and the fact that only already-open documents can be targeted. It does not describe what happens after success or how an invalid `index` behaves, but the key behavioral traps are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the main purpose, and every sentence contributes either a usage rule or a critical distinction from `open_document`. There is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with 2 optional parameters and no output schema, the description is complete: it states the action, the acceptable identifiers, the error behavior, and the boundary against `open_document`. Nothing necessary for an agent to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value by explicitly stating that exactly one of the two parameters must be passed and that `index` is the disambiguation mechanism. This goes beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Switch focus to an already-open document," and clarifies what the tool is not by pointing to `open_document` for loading files. This cleanly distinguishes it from the sibling tool most likely to be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: pass exactly one of `index` or `name`, use `index` to disambiguate when `name` matches multiple documents, and use `open_document` instead when the file is not yet open. It does not mention the sibling `set_document`, but the core decision of when to use this vs. the closest alternative is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_documentSet Document SettingsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Document FPS (also mirrored to active render data). | |
| frame_end | No | Document max time / loop-max in frames. | |
| active_take | No | Name of the take to make current (Main is always valid). | |
| frame_start | No | Document min time / loop-min in frames. | |
| active_camera | No | Name of the camera object to set as scene camera. | |
| current_frame | No | Move playhead to this frame. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses a meaningful side-effect: FPS and frame range are mirrored onto the active render data. However, it does not mention validation behavior, whether invalid camera or take names error out, or any other mutation consequences beyond the mirroring.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The action and scope are front-loaded, the affected fields are listed compactly, and the key side-effect is stated separately without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description together with the fully documented schema covers the tool's purpose, parameters, and the notable render-data mirroring side-effect. Missing details are limited to error behavior for invalid take or camera names and any return value, which is a minor gap for an optional-parameter settings update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by grouping frame_start and frame_end as 'frame range' and by stating that both FPS and frame range are mirrored to active render data—a cross-parameter interaction not explicitly documented on the frame range parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource—'Update document-level settings'—and enumerates exactly which settings are affected: fps, frame range, current frame, active camera, active take. This makes it easy to distinguish from sibling 'set' tools like set_transform or set_keyframe based on scope and field list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use case via 'document-level settings' and the listed fields, but it does not explicitly say when to prefer this tool over siblings such as set_params or when not to use it. An agent can infer the boundary from the field list, yet the guidance is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_graph_portSet Node Graph Port ValueA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | Port path, e.g. 'Base/Metalness' or 'Image/Custom Gamma'. | |
| scope | No | Target the scene-nodes graph on the active document. | |
| value | Yes | New port value. [x,y,z] is passed as maxon.Vector. | |
| handle | No | Material handle. Required unless `scope:'document'`. | |
| node_id | Yes | The $id assigned to the target node. | |
| node_space | No | Alias 'standard' | 'redshift' | 'scenenodes' or maxon.Id. Default 'standard'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It reveals that this is a convenience wrapper, shows the internally constructed payload, and documents the array-to-maxon.Vector coercion. It does not cover error handling or side effects, but the wrapper transparency compensates substantially.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first front-loads the action and scope, the second adds the implementation and coercion details. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no output schema and no annotations, the description sufficiently explains the addressing scheme, the relationship to apply_graph_description, and the value coercion. It does not describe error behavior or prerequisites, but the provided context is enough for an agent to select and invoke the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 because every parameter already has a description. The description adds extra semantic value by explaining the exact {$query:{$id:node_id}, port: value} payload and the maxon.Vector coercion for 3-number lists, going beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update'), a specific resource ('a single port on a node'), and the context ('node material graph'). It also distinguishes itself from apply_graph_description by explicitly calling itself a thin convenience wrapper over that operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly positions the tool relative to apply_graph_description ('Thin convenience over... internally builds') and implies this is the right choice for single-port updates. It does not enumerate exclusions versus other sibling tools like set_xpresso_port, but the node-material-graph context provides sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_keyframeSet KeyframeA
Create or update one keyframe. Use a full DescID path (including user data) or legacy param_id/component. Supports real/long/bool scalar channels and individual vector components. Creates the CTrack on first use.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Time base override (default: doc fps). | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| dtype | No | Legacy param_id dtype override; omit with full path. | |
| frame | Yes | Frame number. | |
| value | Yes | Value at this frame (rotations in radians). | |
| handle | Yes | Entity whose parameter gets the keyframe. | |
| interp | No | Key interpolation (default "spline"). | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral transparency burden. It discloses create-or-update semantics, supported scalar and vector-component channel types, and the important side effect that the CTrack is created on first use. It does not describe overwrite behavior or return values, but for a single-keyframe write tool this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: purpose, parameter-addressing strategy, and side-effect disclosure are each given one sentence. The most important information is front-loaded, and nothing is unnecessarily repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema already covers parameters, handle selection, units, and defaults in detail. The description adds operation scope, path-vs-legacy guidance, supported channel types, and CTrack creation. It does not describe the return value or explicitly contrast against edit_fcurve_keys, but for this tool's complexity the definition remains largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds conceptual grouping by contrasting full DescID paths with legacy param_id/component and clarifying that vector values are set per individual component. This goes slightly beyond the schema descriptions, though most parameter detail is already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description begins with a specific action, 'Create or update one keyframe', clearly identifying the operation and resource. It distinguishes itself from siblings like get_keyframes, delete_keyframe, and edit_fcurve_keys by emphasizing single-keyframe mutation. Additional detail about DescID paths and legacy param_id/component further clarifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool: to create or update one keyframe. It also provides practical guidance on choosing between a full DescID path and legacy param_id/component. It does not explicitly name alternative tools or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layer_flagsSet 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. flags returned in the response reflects the post-update state.
| Name | Required | Description | Default |
|---|---|---|---|
| solo | No | ||
| view | No | ||
| xref | No | ||
| color | No | Optional color update as [r,g,b] in 0..1. | |
| layer | Yes | Layer name (required). | |
| locked | No | ||
| render | No | ||
| manager | No | ||
| animation | No | ||
| deformers | No | ||
| generators | No | ||
| expressions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two critical behaviors: only explicitly passed fields are modified, and the response's flags reflect the post-update state. It does not clarify whether passing false disables a flag or whether the operation is truly a toggle, but the partial-update and response semantics are well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences each serve a clear purpose: what the tool does, how partial updates behave, and what the response contains. The key behavioral constraint is front-loaded before the response semantics. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation tool with no output schema and no annotations, the description is too thin. It explains the update model and response field but leaves most flag semantics undefined, so an agent cannot confidently know what each boolean controls or what values to pass for a desired outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description had to compensate for the 12 parameters, but it does not enumerate or explain them. It vaguely refers to 'visibility / render / lock flags' without mapping parameters like solo, view, xref, manager, animation, or generators to their effects. The partial-update rule is useful but not sufficient parameter-level guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('toggle') and a target ('layer's visibility / render / lock flags'), and distinguishes this from layer creation/assignment siblings by emphasizing a single-call flag update. However, 'toggle' contradicts the set-to-given-value semantics described later, and the listed flag categories omit many actual parameters like solo, view, xref, animation, and expressions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when to use the tool: when you need to update layer flags in one call and preserve omitted flags. But there is no explicit guidance about when not to use it or which sibling tools to prefer, such as create_layer or assign_to_layer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_meshSet 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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Target editable object. | |
| points | Yes | New point positions. | |
| polygons | No | New polygon indices. [a,b,c] = triangle, [a,b,c,d] = quad. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the operation overwrites existing points, expands triangles into C4D's quad storage, requires point-count matching when polygons are omitted, and is wrapped in a single undo entry. This is strong behavioral disclosure, though it could mention failure behavior on count mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tightly written sentences, front-loaded with the core purpose and followed by necessary behavioral detail. Every sentence carries useful information and there is no padding or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers the key requirements: what gets overwritten, the optional polygon behavior, the triangle expansion rule, topology constraints, and undo wrapping. An agent has enough information to invoke the tool correctly without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining triangle-to-quad storage conversion, the optionality of polygons, and the topology constraint when polygons are omitted. The 'handle' parameter is not elaborated beyond the schema's 'Target editable object,' but the other parameters gain real clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Overwrite the points (and optionally polygons) of an editable object.' This clearly identifies the tool as a geometry-replacement operation and distinguishes it from nearby siblings like set_mesh_selection or get_mesh, which are about selecting or reading rather than rewriting mesh data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: it states when only points are rewritten, when polygons are optional, and the topology-match requirement. It does not explicitly name alternatives or when-not-to-use scenarios, but the context ('editable object', 'overwrite') is clear enough for an agent to decide this is the wholesale mesh-replacement tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_mesh_selectionSet Mesh SelectionA
Replace the point / polygon / edge BaseSelect on an editable mesh. Existing selection of the specified kind is cleared first. Pair with get_mesh using include:['selections'] to read the same channels back.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which selection channel to replace. | |
| handle | Yes | Editable target (PointObject / PolygonObject). | |
| indices | Yes | Indices to mark selected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and explicitly discloses the destructive clear-first behavior, the editable-mesh precondition, and which channels are affected. This adds meaningful context beyond the schema: selection is replaced wholesale, not additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences deliver the action, the behavioral caveat, and the read-back workflow with no filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a small 3-parameter tool: it states what is modified, the precondition, and how to read the result. It does not cover edge cases like invalid indices or non-editable meshes, but those are minor against the otherwise clear workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description is not obligated to restate parameters, but it adds key semantic context: `indices` form the new selection set after the existing selection of that kind is cleared. It also links `handle` to 'editable mesh' and `kind` to the three channel types, though it does not detail handle reference syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Replace') on a precise resource (point/polygon/edge BaseSelect on an editable mesh), and the 'cleared first' behavior distinguishes it from broader selection tools like set_selection. The three channel kinds match the schema enum, so an agent can map description to parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The pairing guidance with `get_mesh` using `include:['selections']` is explicit and establishes a clear workflow for reading the result back. However, it does not explicitly state when to prefer this over alternatives like `set_selection` or `set_mesh`, so it lacks full when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_paramsSet Parameter ValuesA
Write parameter values in one undo group. Each entry is {path, value} where path is either an int id or a DescID path (e.g. [903, 'x'] = position.x). Lists of 3 numbers auto-coerce into c4d.Vector for vector-typed destinations. For DTYPE_BASELISTLINK parameters only, use {link: <handle>} to reference an entity or {link: null} to clear it. Link targets and destination types are validated before any writes. Returns {applied: [{path, value}], errors: [{path, error}]}; inspect errors for rejected writes.
| Name | Required | Description | Default |
|---|---|---|---|
| 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",render_data,type_id}, {kind:"shader",owner:<handle>,index}, {kind:"gv_node",tag:<tag handle>,id?|name?} (Xpresso GvNode; use list_xpresso_nodes to discover stable path ids — GvNode inherits BaseList2D so set_params/get_params/describe work on it), {kind:"plugin_options",plugin_id,plugin_type?} (plugin_id accepts an int or a format alias like "abc"/"fbx"/"obj"/"usd"/"gltf"; plugin_type defaults to "scene_saver"; resolves to the plugin's settings BaseList2D — describe+set_params it to configure exporter options before save_document). Prefer `path` over `name` when names are not unique. | |
| values | Yes | Writes to apply. Wrapped in an undo group. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the disclosure burden and does so thoroughly: it reveals atomicity via 'one undo group', the auto-coercion of number lists into c4d.Vector, pre-write validation of link targets and destination types, and the exact return shape with applied and errors arrays. This goes far beyond a terse 'set parameters' statement and gives the agent a clear model of side effects and failure handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with no filler; each sentence earns its place by covering a distinct requirement: the operation, path/value format, coercion, link handling, validation, and return contract. The core write action is front-loaded, and edge cases are compactly grouped afterward.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description compensates by explicitly stating the return shape '{applied: [{path, value}], errors: [{path, error}]}'. It also covers undo grouping, vector coercion, link clearing, pre-validation, and the need to inspect errors, while the schema's handle union supplies the entity-targeting detail. No essential calling information is missing for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters with 100% coverage, so the baseline is 3. The description adds meaningful interpretative value by giving a concrete path example ([903, 'x'] = position.x), explaining vector coercion, and specifying the {link: handle} syntax for DTYPE_BASELISTLINK parameters. These details clarify the intended semantics beyond what raw JSON Schema types alone convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Write parameter values in one undo group,' a specific verb+resource pairing that clearly identifies the operation. It is distinct from read-oriented siblings like get_params and describe, though it does not explicitly name write-oriented alternatives such as set_transform or set_keyframe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance or references to alternatives, so an agent must infer when set_params is appropriate versus sibling write tools. The conditional note about DTYPE_BASELISTLINK parameters is an internal formatting rule, not a selection guideline. It lacks even implicit routing such as 'use this for generic parameters, use set_transform for transforms.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_selectionSet Active SelectionA
Replace or extend the active document's selection. Pass objects (first becomes the active object), tag, or material. With mode:'add' the listed objects are added to the existing selection; with mode:'replace' (default) the prior selection is cleared first. clear:true deselects everything and ignores other fields.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag handle to set as active. | |
| mode | No | Applies to `objects`. Default 'replace'. | |
| clear | No | If true, deselect everything and ignore other fields. | |
| objects | No | Object handles to select. The first becomes the active object. | |
| material | No | Material handle to set as active. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the replace-versus-add distinction, the active-object behavior, and the edge case that clear:true ignores other fields. This goes well beyond the schema and gives the agent a realistic model of side effects, though it does not mention return values or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly written sentences with no filler. The core purpose is front-loaded, and each subsequent sentence adds a distinct behavioral rule. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no output schema and no annotations, the description covers the main invocation paths, modes, and the clear edge case. It is slightly implicit about the mutual exclusivity of objects, tag, and material, but overall it gives an agent enough context to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful relationships between parameters: the first object becomes the active object, mode only applies to objects, and clear overrides all other fields. This clarifies how the parameters interact beyond their individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Replace or extend the active document's selection.' It clearly distinguishes this from sibling read tools like get_selection by stating its write-like role, and from set_mesh_selection by scoping to the active document selection. The supported selection kinds (objects, tag, material) further clarify what the tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance for modes and the clear flag, but it does not explicitly state when to use this tool versus alternatives such as get_selection or set_mesh_selection. Usage context is implied rather than stated, and there are no exclusions or references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_track_extrapolationSet Track ExtrapolationA
Set pre/post behavior for an existing REAL track: off, hold constant, continue (linear), repeat, offset repeat or oscillate. Omitted side is preserved. Does not duplicate keys, extend the document frame range or bake loops.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Time base, default document FPS. | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| after | No | Behavior after the last key; omit to preserve. | |
| before | No | Behavior before the first key; omit to preserve. | |
| handle | Yes | Entity with an existing REAL value track. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. | |
| document_name | Yes | Exact active document name. A mismatch is rejected; this tool never switches documents. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does well by stating side effects ('sets pre/post behavior'), preservation behavior ('omitted side is preserved'), and non-actions ('does not duplicate keys, extend the document frame range or bake loops'). It could go further by noting whether changes are reversible or what happens when both sides are omitted, but the core mutation behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: one states the operation and modes, one clarifies preservation semantics, and one lists explicit non-behaviors. The description is front-loaded with the core action and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given eight parameters, no annotations, and no output schema, the description is largely sufficient: it identifies the target entity type, lists the available behaviors, and states key exclusions. It could be more complete by explaining how to source/validate the 'REAL track' handle or by clarifying relationship to fcurve-related siblings, but the schema covers the remaining parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents all parameters. The description adds no significant parameter-level meaning beyond what the enum and per-parameter descriptions already provide; it repeats the mode list and the omit-to-preserve behavior. Baseline 3 is appropriate given the schema carries the semantic load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('set') and resource ('pre/post behavior for an existing REAL track'), and enumerates the exact modes. It also disambiguates from key-editing siblings by emphasizing 'existing' and noting it does not duplicate keys or bake loops.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context about the target (existing REAL track) and the constraint that omitted sides are preserved, but it does not explicitly name sibling alternatives or state when to prefer this tool over set_keyframe, edit_fcurve_keys, or transform_fcurve. Usage context is present but exclusions are only implied through non-goals like 'does not duplicate keys.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_transformSet Object TransformA
Write an object's transform in local or global space. Pass any combination of pos/rot (HPB radians)/scale to patch individual components — unspecified parts keep their current value. Or pass a full 4x3 matrix (rows: offset, v1, v2, v3) to replace the whole transform; matrix is mutually exclusive with the decomposed fields. Space defaults to 'local' (SetMl). Use 'global' (SetMg) to write world coordinates through a parent.
| Name | Required | Description | Default |
|---|---|---|---|
| pos | No | [x, y, z]. | |
| rot | No | [heading, pitch, bank] in radians. | |
| scale | No | [sx, sy, sz]. | |
| space | No | Default 'local'. | |
| handle | Yes | Target object. | |
| matrix | No | 4x3 matrix as [offset, v1, v2, v3]. Exclusive with pos/rot/scale. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the safety and behavior burden. It clearly signals mutation, discloses that unspecified fields retain their current values, and explains that matrix is mutually exclusive with decomposed fields plus the space default. It doesn't address return values or failure modes, but those are not essential for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the core purpose and then unpack the two modes. Every sentence carries distinct useful information, and none of the schema's detail is needlessly repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers all invocation-relevant choices: parameter combinations, partial update semantics, matrix exclusivity, space behavior, and defaults. The rich input schema supplies the remaining structural constraints, so nothing needed to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the schema entries are minimal; the description adds real meaning: HPB radians, 4x3 row order, mutual exclusivity, and the local/global default. This exceeds the baseline 3 expected from full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Write an object's transform' — and immediately distinguishes the two operating modes: partial patch via pos/rot/scale versus full replacement via matrix. This makes the tool's purpose unmistakable even among write-oriented siblings like set_params and set_keyframe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear decision guidance on when to use patch fields versus a matrix, and when to choose local versus global space, including the underlying SetMl/SetMg mapping. It does not explicitly exclude alternatives such as sample_transform or set_params, but the tool-specific usage context is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_xpresso_portEdit Xpresso PortA
Low-level Xpresso port primitive — covers cases apply_xpresso_graph can't express. action:'add' adds a new input/output port via GvNode.AddPort(port_id). connect wires this node's port to target (on a peer node identified by target.node_handle); output-vs-input direction is auto-detected. disconnect removes incoming connections from port. set_value writes the port's default. remove deletes the port. Use list_xpresso_nodes first to discover node path ids and existing ports.
| Name | Required | Description | Default |
|---|---|---|---|
| io | No | Direction for `add`. | |
| node | Yes | gv_node handle for the operated-on GvNode. | |
| port | No | Target port selector. Required for remove / connect / disconnect / set_value. | |
| value | No | New default value for `set_value`. [x,y,z] is coerced to c4d.Vector. | |
| action | Yes | Operation to perform. | |
| target | No | Peer port selector (with its node_handle). Required for connect. | |
| port_id | No | Port main id passed to GvNode.AddPort (required for `add`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does well: it names the underlying operation (GvNode.AddPort), explains that connect wires this node's port to a peer target, notes direction auto-detection, specifies disconnect removes incoming connections, and clarifies set_value writes the port default. It omits edge behaviors like error conditions and whether connections are replaced, but core mutating behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: an opening positioning sentence, followed by a terse action-by-action breakdown. Every sentence contributes meaning, and the prerequisite note is placed at the end without bloating the core content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter tool with nested objects and no output schema, the description covers all five actions, required parameters, the peer-node relationship, and the discovery prerequisite. It could additionally mention return values or error behavior, but it gives an agent enough to invoke the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds useful mapping: `port_id` is required for add, `target` is the peer selector for connect, `port` is the selector for remove/connect/disconnect/set_value, and `io` is the direction for add. It also clarifies the semantics of `connect` beyond the raw schema, which helps prevent misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a low-level Xpresso port primitive and enumerates five distinct operations (add, connect, disconnect, set_value, remove) with the resource and effect of each. It explicitly distinguishes itself from `apply_xpresso_graph`, so an agent can tell this tool apart from related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use this tool ('covers cases apply_xpresso_graph can't express') and names a prerequisite discovery step ('Use list_xpresso_nodes first'). It does not enumerate specific exclusions versus `set_graph_port` or other sibling tools, but the context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_overrideWrite Take Parameter OverridesA
Write per-Take parameter overrides onto a target node (object / tag / material / render_data / video_post / shader). Wraps take.OverrideNode + UpdateSceneNode + override[descid] = value. Use this for shot-by-shot variations that share a single scene (e.g. override Focal Length per Take while one Camera is reused). Paths use the same syntax as set_params.
| Name | Required | Description | Default |
|---|---|---|---|
| take | Yes | Take name (must not be Main). | |
| clear | No | Paths to drop from the override (parameter reverts to scene value). | |
| params | No | Shorthand {pid: value} for flat writes (applied after `values`). | |
| target | Yes | Handle of the node to override. | |
| values | No | Override writes — same path syntax as set_params. | |
| remove_all | No | Drop the entire override for this target on this Take. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. It does reveal that the tool wraps take.OverrideNode + UpdateSceneNode + override[descid] = value, indicating a mutating operation on take data and scene state. However, it omits constraints like the Take must not be Main and leaves clear/remove_all semantics to the schema rather than the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: action and scope, use case with example, and path-syntax clarification. Every sentence contributes, and the definition is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex write tool with six parameters, nested target definitions, and no output schema, the description covers what is written, to which node types, and in which workflow context. It is adequate for an agent to select and invoke the tool, though exclusion criteria and clearing semantics are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds the useful note that paths use the same syntax as set_params and a Focal Length example, but much of this is already stated in the schema for values. It does not add meaningful guidance for the complex target handle union.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Write per-Take parameter overrides onto a target node' and enumerates accepted node kinds (object / tag / material / render_data / video_post / shader). This clearly distinguishes it from ordinary parameter-setting tools like set_params, though it does not explicitly name that sibling as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this for shot-by-shot variations that share a single scene' provides an explicit intended context, reinforced by the concrete example of overriding Focal Length per Take while reusing one Camera. It stops short of stating exclusions or directly naming when to prefer set_params, so it is clear but not fully prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transform_fcurveTransform F-CurveA
Retime/scale selected or all REAL keys. Manual tangents scale with the keys; AUTO remains automatic and is recalculated by Cinema 4D. New time = pivot + (old time - pivot) * scale + offset; value uses the analogous formula. Supports subframes, rejects collisions with all keys and out-of-range results before writing. Read the curve again afterward because sorted key indices can change. No time reversal or cross-track bake.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Time base, default document FPS. | |
| path | No | Full DescID as [[id,dtype,creator],...], from list_user_data desc_id or list_tracks path. For a vector append a REAL x/y/z DescLevel. Exclusive with param_id/component/dtype. | |
| handle | Yes | Entity with an existing REAL value track. | |
| param_id | No | Legacy top-level parameter id; exclusive with path. | |
| component | No | Legacy vector component with param_id; HPB rotation maps to x/y/z. Omit with path. | |
| time_scale | No | Positive time scale, default 1. Time reversal is not supported. | |
| key_indices | No | Snapshot indices to transform; omit to transform all keys (at most 1000). | |
| pivot_frame | No | Time scaling pivot, default 0. | |
| value_pivot | No | Value scaling pivot, default 0. | |
| value_scale | No | Value scale, default 1. Zero and negative values are allowed. | |
| value_offset | No | Value shift after scaling, default 0. | |
| document_name | Yes | Exact active document name. A mismatch is rejected; this tool never switches documents. | |
| time_offset_frames | No | Time shift after scaling, default 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so exceptionally well. It discloses manual vs AUTO tangent behavior, the exact transform equation, subframe support, collision/out-of-range rejection before writing, post-write key index changes, and unsupported operations like time reversal and cross-track bake.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but tight: the action is front-loaded, the formula is compact, and each sentence adds either a behavioral caveat or a limitation. There is no filler or unnecessary restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 parameters and no annotations or output schema, the description covers the essential operation, formula, failure behavior, and post-read advice. It could be slightly more explicit about when not to use it relative to edit_fcurve_keys, but it is largely sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema coverage is 100%, the description adds substantial meaning beyond the schema by defining the mathematical relationship between pivot, scale, and offset for both time and value. It also clarifies the semantics of 'selected or all' keys, which maps to key_indices, and reinforces that time reversal is unsupported.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and target: 'Retime/scale selected or all REAL keys.' It clearly describes the resource (f-curve keys) and the operation (retime/scale), and adds a precise formula. It does not explicitly distinguish itself from the similar sibling edit_fcurve_keys, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance about when to use this tool versus alternatives like edit_fcurve_keys or get_fcurve. It implies usage via the transform formula and 'selected or all REAL keys,' but there are no when-to-use conditions, exclusions, or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undoPop Undo StackA
Pop up to steps entries off the active document's undo stack via doc.DoUndo. Stops early if the stack empties. Returns steps_performed so callers can tell when fewer steps were available than requested. Default: 1 step.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | Number of undo steps to perform (default 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and largely delivers: it discloses bounded execution ('up to steps'), early termination ('Stops early if the stack empties'), return-value semantics ('steps_performed'), and the default step count. It stops short of stating failure cases or side effects on document state, but the core behavioral traits are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the primary action, the boundary condition, and the return/default. Information is front-loaded with the verb and resource, and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, this is nearly complete: it names the return field (steps_performed), which compensates for the missing output schema, and covers the default. The main omission is behavior when no active document exists or when DoUndo fails, which is acceptable for a tool this simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes steps as 'Number of undo steps to perform (default 1)'. The description adds meaning beyond the schema by clarifying the 'up to' bounded semantics and by explaining how the return value lets callers detect when fewer steps were available than requested.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Pop'), a precise resource ('the active document's undo stack'), and the execution mechanism ('via doc.DoUndo'). The title 'Pop Undo Stack' reinforces the action, and no sibling tool performs undo, so it is unambiguously distinguishable from reset_scene, set_params, and the rest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description identifies the operating context (the active document's undo stack) but does not give explicit when-to-use guidance or name alternatives. Usage is implied: this is the obvious tool for undoing. Given there are no sibling undo-like tools, the lack of explicit routing is a minor gap, not a source of confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
82 tool updates
v0.5.0- First observed
add_user_data - First observed
apply_graph_description - First observed
apply_xpresso_graph - First observed
assign_material - First observed
assign_to_layer - First observed
batch - First observed
call_command - First observed
clone_entity - First observed
close_document - First observed
create_entity - First observed
create_layer - First observed
create_render_data - First observed
create_take - First observed
delete_keyframe - First observed
delete_track - First observed
describe - First observed
dump_shader - First observed
edit_fcurve_keys - First observed
get_capabilities - First observed
get_container - First observed
get_document_state - First observed
get_fcurve - First observed
get_graph_info - First observed
get_keyframes - First observed
get_mesh - First observed
get_object_layer - First observed
get_params - First observed
get_selection - First observed
import_scene - First observed
list_documents - First observed
list_entities - First observed
list_graph_node_assets - First observed
list_graph_nodes - First observed
list_layers - First observed
list_mograph_clones - First observed
list_plugins - First observed
list_tracks - First observed
list_user_data - First observed
list_xpresso_nodes - First observed
modeling_command - First observed
move_entity - First observed
new_document - First observed
open_document - First observed
ping - First observed
preview_render - First observed
remove_entity - First observed
remove_graph_node - First observed
remove_user_data - First observed
remove_xpresso_node - First observed
render - First observed
reset_scene - First observed
rs_clear_aovs - First observed
rs_configure_render - First observed
rs_create_light - First observed
rs_create_material - First observed
rs_get_capabilities - First observed
rs_list_aovs - First observed
rs_remove_aov - First observed
rs_render - First observed
rs_render_sequence - First observed
rs_sequence_control - First observed
rs_sequence_status - First observed
rs_set_camera - First observed
rs_set_material_pbr - First observed
rs_upsert_aov - First observed
sample_transform - First observed
save_document - First observed
set_active_document - First observed
set_document - First observed
set_graph_port - First observed
set_keyframe - First observed
set_layer_flags - First observed
set_mesh - First observed
set_mesh_selection - First observed
set_params - First observed
set_selection - First observed
set_track_extrapolation - First observed
set_transform - First observed
set_xpresso_port - First observed
take_override - First observed
transform_fcurve - First observed
undo
TDQS
Most tools are individually well-described, but several groups overlap: render/preview_render/rs_render, create_entity vs rs_create_material, describe vs get_container, and create_render_data vs rs_configure_render can all be reasonable choices for the same task. The descriptions usually resolve the ambiguity, but the boundaries are not always crisp.
The dominant verb_noun snake_case pattern is consistent, and subsystem prefixes like rs_, list_, get_, and set_ are used predictably. Minor deviations exist: remove_ vs delete_, bare verbs like render/undo/batch, and outliers such as new_document, describe, dump_shader, and take_override.
82 tools is well beyond the 25+ threshold and creates a heavy selection surface for agents, even for a broad Cinema 4D automation domain. Several specialized groups, especially the 13 Redshift tools and multiple node-graph/Xpresso variants, could likely be consolidated.
The surface is unusually broad: document lifecycle, scene entity CRUD, params, animation, meshes, layers, selection, rendering, Redshift, node graphs, and Xpresso are all covered, with few dead ends. Minor gaps exist, such as no explicit active-RenderData switcher and no generic Python escape hatch, but most workflows can be assembled from existing tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Bounded tools for rendering, extraction, RAG, enrichment, local discovery and review analysis.
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Cloud Blender for AI agents: scenes, assets, renders, MP4, STL, GLB — over hosted remote MCP.
Create and manage cinematic AI video renders through the Future Video Studio Agent API.
Related MCP Servers
- AlicenseBqualityDmaintenanceConnects Cinema 4D to Claude, enabling AI-assisted 3D modeling and scene manipulation through natural language commands.25120MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to programmatically control Autodesk Maya via natural language using over 30 tools for 3D modeling, lighting, and animation. It connects through Maya's command port to facilitate procedural scene generation and complex production-ready workflows.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to directly control SideFX Houdini, including creating nodes, setting parameters, executing Python, capturing viewports, and rendering frames, via 57 MCP tools.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control SideFX Houdini 3D software, providing tools for scene management, node operations, rendering, and more through the Model Context Protocol.1MIT
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/YihonW/mcp-c4d-2025'
If you have feedback or need assistance with the MCP directory API, please join our Discord server