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.
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
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()
Sidecar Bridge
Start the sidecar bootstrap inside 3ds Max:
python.ExecuteFile @"C:\path\to\dcc-mcp-3dsmax\examples\start_sidecar_bridge.py"
This starts the random-port /dispatch bridge for main-thread scene edits, a
random-port qtserver:// bridge for the sidecar process, and registers the
3ds Max instance with the stable gateway at http://127.0.0.1:9765/mcp.
See docs/SIDECAR.md.
The bootstrap also installs a DCC MCP menu with Start Sidecar, Stop Sidecar,
Open Gateway Admin, and Print Status commands. 3ds Max shutdown triggers the
same stop path via #preSystemShutdown, so the sidecar process 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 |
Sidecar bridge localhost port | random |
DCC_MCP_REGISTRY_DIR |
Optional shared gateway/sidecar registry override | core default |
Requirements
- 3ds Max 2017 or later (Python 3.x with pymxs support)
- Python >= 3.7
- dcc-mcp-core >= 0.17.19
- dcc-mcp-server >= 0.17.19
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.2.tar.gz.
File metadata
- Download URL: dcc_mcp_3dsmax-0.1.2.tar.gz
- Upload date:
- Size: 61.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03f34e36cfb413eed495016bfbafdbacbfaff9d7c09e02496c94a8a03dd18dde
|
|
| MD5 |
a7837e7cb3304e0609dd3a73acb43042
|
|
| BLAKE2b-256 |
40d8310384c478c20f8ba0384f83e579bc057548a2e4098e54e6e2a1b48a64e7
|
Provenance
The following attestation bundles were made for dcc_mcp_3dsmax-0.1.2.tar.gz:
Publisher:
release.yml on loonghao/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.2.tar.gz -
Subject digest:
03f34e36cfb413eed495016bfbafdbacbfaff9d7c09e02496c94a8a03dd18dde - Sigstore transparency entry: 1589513240
- Sigstore integration time:
-
Permalink:
loonghao/dcc-mcp-3dsmax@e39af7826030af0bb282eb94984913989fbf4e9a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e39af7826030af0bb282eb94984913989fbf4e9a -
Trigger Event:
push
-
Statement type:
File details
Details for the file dcc_mcp_3dsmax-0.1.2-py3-none-any.whl.
File metadata
- Download URL: dcc_mcp_3dsmax-0.1.2-py3-none-any.whl
- Upload date:
- Size: 53.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 |
bf9c3325e194a8bae67a46246a249c4081b21ea010fe3c34759384ffc0cd9099
|
|
| MD5 |
4b66f9bd9fb9373e714ce0e122b88355
|
|
| BLAKE2b-256 |
3181213d4c72fee98fa504bf6da5ccdfefe978e85d82c7450fa1684617ad7318
|
Provenance
The following attestation bundles were made for dcc_mcp_3dsmax-0.1.2-py3-none-any.whl:
Publisher:
release.yml on loonghao/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.2-py3-none-any.whl -
Subject digest:
bf9c3325e194a8bae67a46246a249c4081b21ea010fe3c34759384ffc0cd9099 - Sigstore transparency entry: 1589513342
- Sigstore integration time:
-
Permalink:
loonghao/dcc-mcp-3dsmax@e39af7826030af0bb282eb94984913989fbf4e9a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/loonghao
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e39af7826030af0bb282eb94984913989fbf4e9a -
Trigger Event:
push
-
Statement type: