3dsmax-mcp
Connect AI agents to Autodesk 3ds Max through the Model Context Protocol. Ask in natural language; the agent creates objects, builds materials, inspects plugins with dedicated MCP tools instead of MAXScript/Python feedback loops.
Built-in installer works with Cursor, Claude, Codex and Gemini.
Current release: 1.3.0 — see CHANGELOG.md.
Features
- 138 MCP tools — (83 in core profile) for scene reads, materials, modifiers, controllers, viewport capture, procedural graphs, and plugin workflows.
- Native Bridge — only 2023-2027 versions.
- Introspection — discover arbitrary Max classes for all kinds of automation and scripting purposes.
- Bundled agent skill — There is a bundled maxscript documentation if you want to create your own tools.
Requirements
Quick start
git clone https://github.com/cl0nazepamm/3dsmax-mcp.git
cd 3dsmax-mcp
uv sync
uv run python install.py
Restart 3ds Max, then connect your MCP client. The installer registers the server where it can; see Advanced configuration for manual client setup.
I personally use Cursor and Codex.
Update an existing install:
git pull
uv sync
uv run python install.py
Tools
Bridge & session
| Tool |
Description |
get_bridge_status |
Ping the MCP bridge when diagnosing connection errors |
get_session_context |
Bundle bridge status, capabilities, scene summary, and selection in one call |
get_plugin_capabilities |
Max version, renderers, installed plugins, and class counts |
Scene query
| Tool |
Description |
query_scene |
Unified reads: overview, filter, class, property, selection, delta |
get_hierarchy |
Recursive child tree for an object |
get_instances |
All instances sharing the same base object |
get_dependencies |
Reference graph via dependents / dependent nodes |
Objects
| Tool |
Description |
create_object |
Create geometry with spatial placement feedback |
delete_objects |
Delete objects by name |
get_object_properties |
Compact properties for one object |
set_object_property |
Set a single object property |
transform_object |
Move, rotate, and/or scale by offset |
analyze_node_orientation |
Pivot, bbox, local axes, and world matrix for rigging and placement |
clone_objects |
Copy, instance, or reference clones |
set_parent |
Parent or unparent objects |
select_objects |
Change the current selection |
set_visibility |
Show, hide, freeze, or unfreeze |
batch_rename_objects |
Rename many objects in one call |
Modifiers
| Tool |
Description |
add_modifier |
Add a modifier to an object |
remove_modifier |
Remove a modifier by name |
set_modifier_state |
Enable/disable with viewport/render granularity |
set_modifier_property |
Set a modifier parameter on one or many objects |
collapse_modifier_stack |
Collapse the stack |
make_modifier_unique |
De-instance a shared modifier |
Materials & textures
| Tool |
Description |
get_materials |
List materials assigned in the scene |
get_material_library |
Inspect currentMaterialLibrary and Material Editor scratch slots |
backup_material_library |
Save temporary/scratch material libraries to .mat files |
get_material_slots |
Compact slot/property readback for a material |
inspect_material_network |
Semantic material graph, wired slots, texture manifest, health checks |
replicate_material |
Preview/apply structure-preserving material clone and texture remap |
assign_material |
Create a material and assign it to objects |
set_material_property |
Set one property on an object's material |
set_material_properties |
Set multiple material properties at once |
set_sub_material |
Create or assign a Multi/Sub-Object slot |
create_texture_map |
Create a texture map (stored as a MAXScript global) |
set_texture_map_properties |
Edit a texture map global |
create_material_from_textures |
Build a fully wired PBR material from texture files |
create_shell_material |
Wrap any render + export materials in Shell Material (dual pipeline) |
write_osl_shader |
Write OSL to disk and compile an OSLMap |
replace_material |
Swap one material for another on all users |
batch_replace_materials |
Batch material replacement |
palette_laydown |
Fill Material Editor palette slots from a texture folder |
smart_import |
Batch-import meshes from a folder with auto PBR assignment |
Inspection
| Tool |
Description |
inspect_object |
Deep exploratory object summary |
inspect_properties |
Deep property dump (`target="object" |
introspect_osl |
API surface for OSLMap and shader classes |
walk_references |
Full reference dependency walk |
learn_scene_patterns |
Analyze class usage patterns in the live scene |
map_class_relationships |
ParamBlock2 reference relationships between classes |
watch_scene |
Live event watcher for interactive sessions |
isolate_and_capture_selected |
Per-selection isolated viewport captures |
Plugins & introspection
| Tool |
Description |
discover_plugin_surface |
Find plugin-related classes and entry points |
discover_plugin_classes |
Enumerate registered SDK classes |
list_plugin_classes |
List classes for a plugin or superclass family |
inspect_plugin_class |
Runtime class scan + showClass reflection |
inspect_plugin_constructor |
Creation notes for a plugin class |
inspect_plugin_instance |
Live instance inspection with plugin context |
get_plugin_manifest |
Structured manifest (classes, workflows, gotchas) |
refresh_plugin_manifest |
Rebuild manifest from live runtime |
introspect_class |
Full C++ SDK API surface for a class |
introspect_instance |
Deep SDK introspection with live values |
MCP resources: resource://3dsmax-mcp/plugins/{name}/manifest|guide|recipes|gotchas
Controllers & animation
| Tool |
Description |
assign_controller |
Create and assign a controller to a sub-anim track |
inspect_controller |
Inspect one controller track |
inspect_track_view |
Track View-style controller hierarchy |
set_controller_props |
Edit script text or controller properties |
add_controller_target |
Add a target to script/expression/constraint controllers |
Parameter wiring
| Tool |
Description |
list_wireable_params |
Discover wireable sub-anims on an object |
wire_params |
Connect parameters with a wire expression |
get_wired_params |
List existing wire connections |
unwire_params |
Remove a wire |
Organization
| Tool |
Description |
manage_layers |
Create, delete, list, and configure layers; move/select objects |
manage_groups |
Create, ungroup, open, close, attach, detach groups |
manage_selection_sets |
Named selection sets |
manage_scene |
Hold, fetch, reset, save, scene info |
Viewport & render
| Tool |
Description |
capture_viewport |
Capture the active viewport as an image |
capture_multi_view |
Front/right/back/top grid stitched into one image |
capture_screen |
Fullscreen capture (explicit opt-in) |
render_scene |
Render the current view |
External .max files
| Tool |
Description |
inspect_max_file |
Read metadata and object names without loading |
merge_from_file |
Selective merge with duplicate handling |
search_max_files |
Scan a folder for objects matching a pattern |
batch_file_info |
Parallel metadata from many .max files |
Effects & state sets
| Tool |
Description |
get_effects |
List atmospheric and render effects |
toggle_effect |
Enable or disable an effect by index |
delete_effect |
Remove an effect by index |
get_state_sets |
State Sets with camera assignments |
get_camera_sequence |
Camera-assigned State Sets sorted by frame |
Data Channel
| Tool |
Description |
list_dc_operators |
Search the live version-specific operator catalog |
list_dc_presets |
List installed Data Channel presets |
add_data_channel |
Append operators to a Data Channel modifier stack |
inspect_data_channel |
Read the active stack in visible processing order |
set_data_channel_operator |
Edit one visible operator with rollback on failure |
manage_data_channel_stack |
Delete, enable, disable, or safely reorder operators |
load_dc_preset |
Load a preset into the stack |
add_dc_script_operator |
Add executable MAXScript with explicit authorization |
Max Creation Graph
| Tool |
Description |
mcg_get_context |
Compiler, temporary workspace, templates, samples, and safety state |
mcg_list_graphs |
List temporary, installed, or bundled sample graphs |
mcg_inspect_graph |
Normalize graph metadata, nodes, connections, and parameters |
mcg_search_operators |
Search live typed operators and offline compound references |
mcg_create_graph |
Fork a read-only source into the temporary workspace |
mcg_apply_patch |
Patch, compile, verify, checkpoint, and roll back transactionally |
mcg_compile_graph |
Validate and compile one temporary graph with diagnostics |
mcg_test_tool |
Create, inspect, and remove a disposable generated instance |
mcg_resolve_class |
Resolve the exact generated modifier class descriptor |
mcg_apply_modifier |
Compile and apply a typed MCG modifier safely |
mcg_inspect_instance |
Verify graph identity and inspect a live MCG modifier |
mcg_set_node_parameter |
Retarget one supported scalar node parameter |
mcg_restore_checkpoint |
Restore an opaque checkpoint with hash protection |
mcg_cleanup_workspace |
Remove one graph family or the temporary MCG workspace |
mcg_reload_operators |
Explicitly refresh Max's global MCG operator depot |
Work in progress — the plugin and layout integrations below (tyFlow, Forest Pack, RailClone, Floor plan) are early-stage and may be incomplete or change between releases. Everything listed above is stable.
tyFlow (WIP)
| Tool |
Description |
list_tyflow_operator_types |
Available operator names for this install |
create_tyflow |
Create tyFlow with events and operators |
create_tyflow_preset |
Presets: rain, snow, fountain, burst, debris |
get_tyflow_info |
Deep flow/event/operator readback |
modify_tyflow_operator |
Edit operator properties |
set_tyflow_shape |
Configure Shape operator |
set_tyflow_physx |
Object-level PhysX settings |
add_tyflow_collision |
Collision operator + collider list |
add_tyflow_event |
Add an event |
connect_tyflow_events |
Wire Send Out destinations |
remove_tyflow_element |
Remove operator or event |
get_tyflow_particle_count |
Particle count at a frame |
get_tyflow_particles |
Particle data rows |
reset_tyflow_simulation |
Reset one or all tyFlow sims |
Forest Pack (WIP)
| Tool |
Description |
scatter_forest_pack |
Create a Forest Pack scatter with surfaces and source geometry |
RailClone (WIP)
| Tool |
Description |
get_railclone_style_graph |
Read style-editor bases, segments, and parameters |
Floor plan (WIP)
| Tool |
Description |
build_floor_plan |
Generate a 2D floor plan from grid-based room definitions |
Standalone chat (WIP)
Experimental in-Max chat — see Advanced configuration — Standalone chat. Prefer external MCP for production use.
| Tool |
Description |
send_to_chat |
Send a message to the in-Max chat and wait for the reply |
chat_status |
Chat window status and model info |
chat_reload |
Reload config without restarting Max |
chat_clear |
Clear conversation history |
Scripting & diagnostics
| Tool |
Description |
execute_maxscript |
Run MAXScript when no dedicated tool exists (respects safe mode) |
invoke_tool |
Call any registered tool from inside Max (testing) |
run_tool_smoke |
Run live smoke cases against the bridge |
Skill & reference
The installer builds an agent skill from skills/3dsmax-mcp-dev/SKILL.md with tool-choice rules, material pipeline notes, and MAXScript reference files. Rebuild manually with python scripts/build_skill.py — see Advanced configuration.
Further reading
No comments yet
Be the first to share your take.