3ds Max plugin for the DCC Model Context Protocol (MCP) ecosystem — embeds a Streamable HTTP MCP server directly inside 3ds Max
Project description
dcc-mcp-3dsmax
3ds Max plugin for the DCC Model Context Protocol (MCP) ecosystem.
Status: This project is under active development. APIs, packaging, and 3ds Max integration details may change quickly while the adapter tracks the latest
dcc-mcp-corereleases.
Direct image link:3dsmax-mcp-readme-hero.png
Features
- Sidecar MCP Server: Starts
dcc-mcp-server.exe sidecarand keeps 3ds Max scene edits on the main thread - Progressive Skill Loading: Discover skills without loading them immediately
- Shared Gateway: Registers with the stable gateway at
http://127.0.0.1:9765/mcp - Job Persistence: SQLite-based job storage for long-running operations
- Prometheus Metrics: Optional
/metricsendpoint for monitoring
Agent install (recommended)
The fastest way to install is to let your AI agent do it. In Cursor, Claude, or any MCP-capable agent host, ask:
Please install and verify dcc-mcp-3dsmax.
First clone or locate the dcc-mcp-3dsmax repository and resolve its absolute
path as REPO_ROOT. Then read these absolute-path files before making changes:
- <REPO_ROOT>\install.md
- <REPO_ROOT>\skills\dcc-mcp-3dsmax-setup\SKILL.md
Follow the setup skill exactly:
1. Locate my 3dsmaxpy.exe. If it cannot be found, ask me for the absolute path.
2. Install dcc-mcp-3dsmax and dependencies. Prefer PyPI for end-user installs;
use the local checkout only when I am already working from REPO_ROOT.
3. Install the 3ds Max startup hook so opening or restarting 3ds Max starts
the runtime automatically.
4. Generate MCP Streamable HTTP config pointing to http://127.0.0.1:9765/mcp.
5. Ask me to open or restart 3ds Max, then run the generated smoke prompt to
prove the agent can discover and call typed 3ds Max tools.
The agent reads install.md, runs the setup script against your
3ds Max 3dsmaxpy.exe, installs a startup hook, generates the MCP host config,
asks you to open or restart 3ds Max, and runs a live smoke prompt to confirm
the connection.
Installation
pip install dcc-mcp-3dsmax
Quickstart (inside 3ds Max MAXScript Listener)
import dcc_mcp_3dsmax
# Start on a random instance port; the public gateway stays fixed.
server = dcc_mcp_3dsmax.start_server()
# Progressive loading — discover skills without loading them immediately
n = server.discover_skills() # scan paths, register tool metadata
server.load_skill("3dsmax-scene") # lazy-load a specific skill
dcc_mcp_3dsmax.stop_server()
Runtime Bridge
Start the runtime bootstrap inside 3ds Max:
python.ExecuteFile @"C:\path\to\dcc-mcp-3dsmax\examples\start_sidecar_bridge.py"
This starts the agent-callable embedded MCP runtime, registers bundled 3ds Max
skills/tools, and routes main-affinity scene edits through the shared
dcc-mcp-core 0.17.47 UI dispatcher and pump abstractions. The legacy
random-port /dispatch bridge remains available for local diagnostics. The
3ds Max instance is registered with the stable gateway at
http://127.0.0.1:9765/mcp.
See docs/SIDECAR.md and the bundled skill index in
docs/BUNDLED_SKILLS.md.
The bootstrap also installs a DCC MCP menu with Start Server, Stop Server,
Open Gateway Admin, and Print Status commands. 3ds Max shutdown triggers the
same stop path via #preSystemShutdown, so the runtime and local bridges are
cleaned up when the host exits.
Skill Development
Create a skill with SKILL.md metadata file and Python scripts:
# my_skill/action_create_box.py
from dcc_mcp_3dsmax.api import max_success, with_max
@with_max
def main(width: float = 100.0, height: float = 100.0, depth: float = 100.0) -> dict:
import pymxs
rt = pymxs.runtime
box_obj = rt.Box(width=width, height=height, depth=depth)
return max_success("Created box", object_name=str(box_obj))
Environment Variables
| Variable | Description | Default |
|---|---|---|
DCC_MCP_3DSMAX_METRICS |
Enable Prometheus /metrics endpoint |
0 |
DCC_MCP_3DSMAX_JOB_STORAGE |
Path to SQLite job database | platform default |
DCC_MCP_3DSMAX_DISABLE_EXECUTE_PYTHON |
Disable execute_python tool |
0 |
DCC_MCP_3DSMAX_DISABLE_ARBITRARY_SCRIPT |
Disable all arbitrary script execution | 0 |
DCC_MCP_3DSMAX_ENABLE_GATEWAY_FAILOVER |
Enable gateway failover | 1 |
DCC_MCP_3DSMAX_SKILL_PATHS |
Extra skill search paths (semicolon-separated) | None |
DCC_MCP_3DSMAX_BRIDGE_PORT |
Runtime bridge localhost port | random |
DCC_MCP_3DSMAX_BOOTSTRAP_PATHS |
Extra package Python roots for startup bootstrapping | None |
DCC_MCP_PYTHONPATHS |
Shared package Python roots for Rez/pipeline launchers | None |
DCC_MCP_3DSMAX_ROOT |
Adapter package root; startup probes python, python37, src, and root |
None |
DCC_MCP_CORE_ROOT |
dcc-mcp-core package root; startup probes python, python37, src, and root |
None |
DCC_MCP_SERVER_ROOT |
Fallback dcc-mcp-server package root for Rez/pipeline launches |
None |
DCC_MCP_SERVER_BIN |
Explicit dcc-mcp-server executable path for sidecar mode |
bundled payload |
DCC_MCP_REGISTRY_DIR |
Optional shared gateway/sidecar registry override | core default |
Normal MZP installs do not need DCC_MCP_3DSMAX_PORT or
DCC_MCP_GATEWAY_PORT: the adapter uses an internal ephemeral MCP port and the
shared gateway default.
For Rez-style deployment, launch 3ds Max with package roots in the environment
instead of copying packages into the user scripts folder. A pipeline package
cache can expose paths such as <package-cache>/dcc_mcp_core,
<package-cache>/dcc_mcp_3dsmax, and <package-cache>/dcc_mcp_server
through the root variables above.
The MZP installer uses isolated version directories under
<user scripts>/dcc_mcp_3dsmax/versions/, so installing a new payload does not
delete the version that may already be loaded by the running 3ds Max process.
After install, the active payload is added to sys.path, obsolete payload
directories are cleaned up where possible, and the runtime is started. The
generated startup script repeats that activation on future 3ds Max launches, so
the bridge comes back automatically after restart.
Uninstall cleanup uses the import-light lifecycle helpers from dcc-mcp-core
when available, so locked native files are reported as restart-required instead
of disappearing into a generic PermissionError.
Requirements
- 3ds Max 2017 or later (Python 3.x with pymxs support)
- Python >= 3.7
- dcc-mcp-core >= 0.17.47
- dcc-mcp-server >= 0.17.47
License
MIT
Project details
Release history Release notifications | RSS feed
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_3dsmax-0.1.12.tar.gz.
File metadata
- Download URL: dcc_mcp_3dsmax-0.1.12.tar.gz
- Upload date:
- Size: 1.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b525df24e37b0f64b4357cae8b32110ebcfd6949592e2c46eeedd9428ed80a30
|
|
| MD5 |
1666f24d4725fe754fcfac8b6f76e417
|
|
| BLAKE2b-256 |
96e999ff6604450c63e0a51df0c4fc7c05ea5d6a31fcf33756775cb5cb482ab3
|
Provenance
The following attestation bundles were made for dcc_mcp_3dsmax-0.1.12.tar.gz:
Publisher:
release.yml on dcc-mcp/dcc-mcp-3dsmax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dcc_mcp_3dsmax-0.1.12.tar.gz -
Subject digest:
b525df24e37b0f64b4357cae8b32110ebcfd6949592e2c46eeedd9428ed80a30 - Sigstore transparency entry: 1708196755
- Sigstore integration time:
-
Permalink:
dcc-mcp/dcc-mcp-3dsmax@76113ea994f6dab157d41dc124ae7badfbbe495e -
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@76113ea994f6dab157d41dc124ae7badfbbe495e -
Trigger Event:
push
-
Statement type:
File details
Details for the file dcc_mcp_3dsmax-0.1.12-py3-none-any.whl.
File metadata
- Download URL: dcc_mcp_3dsmax-0.1.12-py3-none-any.whl
- Upload date:
- Size: 224.2 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 |
fb6c394223b43fe5e6492433267ee35cf0536befd4824f0f82e8e4d945826d8a
|
|
| MD5 |
179de3612d2b96e2d7ba16a12f5e25a4
|
|
| BLAKE2b-256 |
f3290981faef01feb7553b1d08dc6e739ac80314d4163624ca65bab90a189c02
|
Provenance
The following attestation bundles were made for dcc_mcp_3dsmax-0.1.12-py3-none-any.whl:
Publisher:
release.yml on dcc-mcp/dcc-mcp-3dsmax
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dcc_mcp_3dsmax-0.1.12-py3-none-any.whl -
Subject digest:
fb6c394223b43fe5e6492433267ee35cf0536befd4824f0f82e8e4d945826d8a - Sigstore transparency entry: 1708196840
- Sigstore integration time:
-
Permalink:
dcc-mcp/dcc-mcp-3dsmax@76113ea994f6dab157d41dc124ae7badfbbe495e -
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@76113ea994f6dab157d41dc124ae7badfbbe495e -
Trigger Event:
push
-
Statement type: