dcc-mcp-zbrush
ZBrush adapter for the DCC Model Context Protocol ecosystem.
Requires ZBrush 2026.1+ with the official Python SDK (CPython 3.11 embedded in ZBrush).
Quick install
1. Install the Python package
pip install dcc-mcp-zbrush
This installs the dcc-mcp-zbrush Python package — the MCP HTTP server that bridges AI agents to ZBrush. It does not include ZBrush plugin files (see step 2).
2. Install the ZBrush plugin
The plugin files (auto-start script, socket bridge) are distributed separately. Download the plugin ZIP from the latest GitHub Release:
dcc-mcp-zbrush-plugin-<version>.zip
Then run the install script inside the ZIP:
Windows (PowerShell):
.\install\install-windows.ps1
macOS (Terminal):
chmod +x install/install-macos.sh && ./install/install-macos.sh
The installer resolves the ZBrush Asset Directory and installs the recommended
sidecar bridge as Python/init.py. It fails instead of reporting success when
no valid Asset Directory is available; pass -Target explicitly in that case.
3. Restart ZBrush
Launch or restart ZBrush, then start the external MCP sidecar:
dcc-mcp-zbrush --mode sidecar --port 8765 --socket-port 9876
4. Health check
Verify the server is running:
curl http://127.0.0.1:8765/mcp
5. Configure your AI client
Add the MCP server to your AI client config (Cursor, Claude Desktop, etc.):
{
"mcpServers": {
"zbrush": {
"url": "http://127.0.0.1:8765/mcp"
}
}
}
How it works
ZBrush does not ship a built-in HTTP REST server. The pre-alpha scaffold that assumed Preferences > Network > Enable HTTP Server was incorrect.
The supported integration paths are:
| Mode | When to use | Stack |
|---|---|---|
| Sidecar + socket plugin (recommended) | Production GUI and CI clients | External Python → TCP :9876 → main-thread bridge inside ZBrush |
| Embedded (advanced) | Pure-Python experiments only | Python plugin inside ZBrush → zbrush.commands |
Rust is not loaded inside ZBrush. The dcc-mcp-core wheel (PyO3) runs
in the external sidecar process; importing its extension module into the ZBrush
2026 embedded VM is not a supported runtime path. The ZBrush-facing bridge is
Python only and executes requests serially on the host main thread while
pumping UI updates.
GoZ C++ SDK is for mesh exchange between DCC apps, not general MCP automation — we do not build the primary adapter on GoZ.
Recommended sidecar mode:
AI Agent → MCP HTTP :8765 → ZBrushMcpServer (external Python)
→ TCP :9876 → mcp_socket_bridge.py (inside ZBrush) → zbrush.commands
Features (v0.2.0)
DccServerBaseadapter with progressive skill loading- Bundled skills:
zbrush-scripting,zbrush-scene,zbrush-subtool,zbrush-interchange - In-process executor for ZBrush's embedded Python VM
- Optional socket bridge plugin for sidecar deployments
- Gateway election compatible with
dcc-mcp-core
Requirements
- ZBrush 2026.1+
- Python 3.9+ on the sidecar host (ZBrush itself ships 3.11)
dcc-mcp-core >= 0.18.7
Environment variables
| Variable | Default | Purpose |
|---|---|---|
DCC_MCP_ZBRUSH_PORT |
8765 |
MCP HTTP port |
DCC_MCP_ZBRUSH_MODE |
auto | embedded or sidecar |
DCC_MCP_ZBRUSH_AUTOSTART |
1 |
Auto-start embedded server from plugin |
DCC_MCP_ZBRUSH_SOCKET_PORT |
9876 |
Socket bridge port (sidecar) |
DCC_MCP_GATEWAY_PORT |
9765 |
Gateway election port |
DCC_MCP_MINIMAL |
1 |
Progressive skill loading |
Bundled skills
| Skill | Tools |
|---|---|
zbrush-scripting |
execute_python, get_session_info |
zbrush-scene |
get_scene_info, list_subtools |
zbrush-subtool |
select_subtool, get_subtool_status |
zbrush-interchange |
export_active_subtool_obj |
Path concepts
- PYTHONPATH — where Python looks for packages (
pip installhandles this) - ZBRUSH_USER_ASSETS_DIR / ZBRUSH_PLUGIN_PATH — plugin scan roots used by ZBrush 2026.1+
pip install dcc-mcp-zbrush puts the Python package on PYTHONPATH.
The plugin ZIP goes into ZBRUSH_PLUGIN_PATH (handled by the install scripts above).
Skill authoring
Skills lazy-import zbrush.commands and run on the main thread (affinity: main).
from dcc_mcp_core.skill import skill_entry
from dcc_mcp_zbrush.api import import_zbc, with_zbrush, zb_success
@skill_entry
@with_zbrush
def my_tool(**kwargs) -> dict:
zbc = import_zbc()
count = zbc.get_subtool_count()
return zb_success(f"{count} subtool(s)", count=count)
Sidecar mode
- The plugin ZIP includes
sidecar/mcp_socket_bridge.py; install it as<Asset Directory>/Python/init.py(install-windows.ps1 -Mode sidecar). - Start ZBrush.
- Run the MCP server outside ZBrush:
dcc-mcp-zbrush --mode sidecar --port 8765 --socket-port 9876
Development
See docs/development.md for source-based setup, testing, and contribution workflow.
References
- ZBrush Python SDK 2026.1
- ZBrush Python environment
- GoZ SDK (mesh exchange only)
- Community reference: newsbubbles/zbrush-mcp (socket bridge pattern)
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dcc_mcp_zbrush-0.2.17.tar.gz.
File metadata
- Download URL: dcc_mcp_zbrush-0.2.17.tar.gz
- Upload date:
- Size: 61.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
254fe0ed362d4cdfb8097ee4ff627ab3196cb7ed7ec2f77d4919dc99d82a8080
|
|
| MD5 |
e0abc3eac81c0e8b3036dc21ef07a899
|
|
| BLAKE2b-256 |
e7c41cdd2aa5276fed24db1d0fe7d32f48c343653877f3497516a00f005772b9
|
Provenance
The following attestation bundles were made for dcc_mcp_zbrush-0.2.17.tar.gz:
Publisher:
release.yml on dcc-mcp/dcc-mcp-zbrush
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dcc_mcp_zbrush-0.2.17.tar.gz -
Subject digest:
254fe0ed362d4cdfb8097ee4ff627ab3196cb7ed7ec2f77d4919dc99d82a8080 - Sigstore transparency entry: 2168157581
- Sigstore integration time:
-
Permalink:
dcc-mcp/dcc-mcp-zbrush@4cec09a1010a3b4e02bb8775868247d2e9cdd52a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dcc-mcp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4cec09a1010a3b4e02bb8775868247d2e9cdd52a -
Trigger Event:
push
-
Statement type:
File details
Details for the file dcc_mcp_zbrush-0.2.17-py3-none-any.whl.
File metadata
- Download URL: dcc_mcp_zbrush-0.2.17-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0e7affb6771812f1cce8dea9ffb67dcd29f8b2ae9f72d2b449c1ca6b6b42228
|
|
| MD5 |
ca07978853ecba80e8b3259b0dfe4d3e
|
|
| BLAKE2b-256 |
776648920beec91ad65f0015a3ea361dec2940b7f7676f2aa063b385bbecc383
|
Provenance
The following attestation bundles were made for dcc_mcp_zbrush-0.2.17-py3-none-any.whl:
Publisher:
release.yml on dcc-mcp/dcc-mcp-zbrush
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dcc_mcp_zbrush-0.2.17-py3-none-any.whl -
Subject digest:
b0e7affb6771812f1cce8dea9ffb67dcd29f8b2ae9f72d2b449c1ca6b6b42228 - Sigstore transparency entry: 2168157603
- Sigstore integration time:
-
Permalink:
dcc-mcp/dcc-mcp-zbrush@4cec09a1010a3b4e02bb8775868247d2e9cdd52a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dcc-mcp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4cec09a1010a3b4e02bb8775868247d2e9cdd52a -
Trigger Event:
push
-
Statement type: