ZBrush adapter for the DCC Model Context Protocol (MCP) ecosystem — embedded Python SDK + optional socket bridge
Server has 15 tools with significant definition gaps. Most tools lack proper input validation descriptions, parameter constraints (enums, ranges), and output schema documentation. Naming is generally verb-first and clear (export_, list_, bake_, get_, etc.), but descriptions are inconsistent in depth. Critical tool 'execute_python' has no input validation guidance despite accepting arbitrary code. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Schemas are present but incomplete, many parameters lack type constraints and validation rules.
Bake and atomically export one map from the active ZBrush subtool.
Capture a turntable sequence of the active model.
Create a wrinkle brush from the active subtool.
Execute arbitrary Python code in the ZBrush context.
Export the active subtool to OBJ using the ZBrush SDK export pattern.
Get current ZBrush scene information.
Get ZBrush session and adapter information.
Read subtool visibility/lock flags.
execute_python lacks input validation and safety constraints. No description of what code can/cannot do, no sandboxing guidance, no error recovery hints. Accepts arbitrary Python with 'context' object but provides no schema for context structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Tools marked WRITE and IRREVERSIBLE in metadata but not exposed to LLM via schema annotations. LLM cannot distinguish safe reads from destructive writes.
Output schemas not documented. Tools return dicts with fields like 'output_path', 'active_tool_path', 'subtool_name' but LLM has no schema to understand structure. bake_active_subtool_map returns complex nested validation errors but no success schema documented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Import a file into the ZBrush scene.
Inspect the active mesh geometry and topology.
List subtools on the active ZBrush tool.
Load a wrinkle brush into ZBrush.
Apply a bounded subdivision and deformation pass to the active subtool.
Create a lower-density copy of the active subtool with ZRemesher.
Select the active subtool by index.
Parameter descriptions lack validation rules and constraints. 'width' and 'height' in bake_active_subtool_map state 'power of 2, 256-8192' in description but no enum or pattern in schema. 'map_type' accepts 'normal' or 'displacement' but not declared as enum.
Error handling lacks recovery guidance. bake_active_subtool_map returns structured errors (UNSUPPORTED_MAP_TYPE, OUTPUT_DIR_MISSING) but no hint on what to do next. LLM receives error code but no actionable next step.