Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add dcc-mcp/dcc-mcp-3dsmax --skill 3dsmax-scenegit clone --depth 1 https://github.com/dcc-mcp/dcc-mcp-3dsmaxWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dcc-mcp/dcc-mcp-3dsmax/3dsmax-scene)<a href="https://agentmods.dev/skills/dcc-mcp/dcc-mcp-3dsmax/3dsmax-scene"><img src="https://agentmods.dev/badge/skills/dcc-mcp/dcc-mcp-3dsmax/3dsmax-scene/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dcc-mcp/dcc-mcp-3dsmax/3dsmax-scene"><img src="https://agentmods.dev/badge/skills/dcc-mcp/dcc-mcp-3dsmax/3dsmax-scene.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00062 | $0.03860 |
| Opus 5.5 | $0.00025 | $0.01544 |
| Sonnet 5.5 | $0.00012 | $0.00772 |
| Haiku 4.5 | $0.00006 | $0.00386 |
Grade A, and why
3dsmax-scene scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 277 lines — stays where its author put it; the contents beside it link to each section on GitHub.
3ds Max Scene and Object Skill
Inspect and manage scene-level objects through pymxs. Tool contracts live in
tools.yaml; every tool declares affinity: main because even read-only
queries enter the 3ds Max host API.
Use get_scene_status before and after file operations. new_scene and
open_scene reject dirty scenes unless force=true; that flag explicitly
authorizes discarding unsaved changes. Use save_scene for the current file,
save_scene_as for an explicit path, and merge_file for bounded no-prompt
merges. Each lifecycle mutation returns native post-condition readback rather
than treating the native API return value as sufficient proof.
File operations run on the 3ds Max main thread. Open, save, save-as, and merge are monolithic async jobs because the native calls are indivisible: poll the returned Core job instead of retrying after a transport timeout. No lifecycle tool opens a file dialog or falls back to UI automation or arbitrary scripts.
Use the remaining tools to inspect nodes and cameras and perform targeted selection, duplication, deletion, grouping, parenting, visibility, pivot, and transform operations.
Use get_object_properties and set_object_property for generic property
access instead of falling back to execute_python or execute_maxscript.
set_object_property writes one property and confirms it by readback, so a
value the host rejected is reported as a failure rather than a success. Use
batch_rename_objects for bulk naming, create_object for classes beyond
the four modeling primitives, transform_object for rotate and scale in
world or local space, and clone_objects when a copy, instance, or reference
relationship matters. set_visibility also covers freeze and unfreeze.
analyze_node_orientation reports pivot, local axis drift, and the world
matrix for orientation checks.
create_object calls a runtime symbol, so it always requires that symbol to
be provable as a creatable 3ds Max class: superClassOf succeeds for classes
and fails for bare global functions. This requirement is unconditional and
independent of DCC_MCP_3DSMAX_DISABLE_ARBITRARY_SCRIPT — that variable
neither tightens nor loosens the check, and is named in the rejection message
only so operators can locate the refusal. A denylist of destructive global
functions remains as defense in depth. When the runtime exposes no
creatable-class predicate, no symbol can be proven, so the tool refuses every
call rather than leaving an ungated symbol-call path. A symbol that is proven
to be a creatable class stays available regardless of the variable, because
the variable gates arbitrary script execution, not typed class construction.
External .max files are inspected without opening them. inspect_max_file
reports the objects and metadata of one file, batch_file_info does the same
for a batch of up to 20 files, and search_max_files finds objects by name
pattern across a batch of up to 20 files. Both batch tools read one path at a
time on the 3ds Max main thread, so the per-call limit is deliberately small
and a batch above 10 paths answers with a warning that asks for a smaller
batch; split a larger inventory into several calls instead of issuing one long
request. All three fail closed: a file that is missing, unreadable, or not a
scene file is reported as an explicit per-file error with a stable reason,
never as an empty object list. Host functions used to read external files are
probed rather than assumed, so a host that lacks a reader reports
external_scene_reader_unavailable instead of returning no objects.
merge_from_file merges objects selected by exact name or by name pattern
from an external .max file. The selection is resolved against the source
file before anything is merged, so a name or pattern that matches nothing
fails the call, and names that could not be resolved are always returned in
unresolved_object_names; pass require_all=true to make them fail the call.
Both merge tools probe getLastMergedNodes before they merge. A host
without that readback is rejected with merge_readback_unavailable and no
scene change at all, because "merged but unconfirmed" is the one state where a
retry would duplicate objects. When the host does accept the merge but the
readback does not confirm it, the response reports scene_modified and tells
the caller to undo once before retrying.
It shares the verified readback and the fixed no-prompt conflict policies of
merge_file, so use merge_file when the exact source node names are already
known and merge_from_file when the selection has to be resolved by pattern.
One call merges N nodes: undo once and re-check the node list, then repeat
while merged nodes are still present, because 3ds Max may or may not group
them into a single entry.
What ships with it
48 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- action_analyze_node_orientation.py 4.8 KB runs code
- action_attach_to_group.py 1021 B runs code
- action_batch_file_info.py 3.5 KB runs code
- action_batch_rename_objects.py 5.8 KB runs code
- action_center_pivots.py 998 B runs code
- action_clone_objects.py 6.2 KB runs code
- action_create_object.py 10.0 KB runs code
- action_create_selection_set.py 856 B runs code
- action_delete_nodes.py 898 B runs code
- action_delete_selection_set.py 383 B runs code
- action_detach_from_group.py 740 B runs code
- action_duplicate_nodes.py 1.3 KB runs code
- action_freeze_transforms.py 1.0 KB runs code
- action_get_bounding_box.py 671 B runs code
- action_get_dependencies.py 3.1 KB runs code
- action_get_hierarchy.py 2.9 KB runs code
- action_get_instances.py 3.2 KB runs code
- action_get_node_visibility.py 763 B runs code
- action_get_object_properties.py 2.6 KB runs code
- action_get_scene_info.py 2.2 KB runs code
- action_get_scene_metadata.py 2.0 KB runs code
- action_get_scene_status.py 497 B runs code
- action_get_selection.py 588 B runs code
- action_group_nodes.py 1.2 KB runs code
- action_inspect_max_file.py 1.8 KB runs code
- action_list_cameras.py 556 B runs code
- action_list_scene_nodes.py 1.1 KB runs code
- action_list_selection_sets.py 426 B runs code
- action_merge_file.py 4.7 KB runs code
- action_merge_from_file.py 8.6 KB runs code
- action_new_scene.py 1.8 KB runs code
- action_open_scene.py 2.5 KB runs code
- action_parent_node.py 1.3 KB runs code
- action_query_scene.py 2.9 KB runs code
- action_replace_selection_set.py 786 B runs code
- action_save_scene_as.py 484 B runs code
- action_save_scene.py 1019 B runs code
- action_scene_patch.py 21 KB runs code
- action_search_max_files.py 5.1 KB runs code
- action_select_selection_set.py 434 B runs code
- action_set_group_open.py 689 B runs code
- action_set_object_property.py 4.9 KB runs code
- action_set_selection.py 2.6 KB runs code
- action_set_visibility.py 4.5 KB runs code
- action_transform_object.py 12 KB runs code
- action_ungroup_nodes.py 719 B runs code
- action_unparent_node.py 1.0 KB runs code
- tools.yaml 89 KB
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago Changed · +27 lines 45e7c6fe09d4
- 1mo ago Changed · +35 lines c87375e5cb56
- 1mo ago Changed · +84 lines 851be65badd7
- 1mo ago Changed · +65 lines 1c364fa152b1
- 1mo ago First seen · 66 lines · 62 tokens per session scan A 7c6c531d6b28
3dsmax-scene is a skill published in the GitHub repository dcc-mcp/dcc-mcp-3dsmax (9 stars, last pushed today), licensed MIT. It adds 62 tokens to every session and 3,860 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
maya-render
Pipeline stage — render globals, final-frame rendering, and viewport capture: configure render settings, query them, render frames, capture playblasts. Use for producing final or preview imagery. Not for modeling (maya-mesh-ops), animation editing (maya-animation), generic file import/export (maya-geometry), or render…
maya-scripting
Bootstrap stage — escape hatch for Maya work that has no packaged skill yet. Agents should prefer searchskills / dcccapabilitymanifest → loadskill → typed tools (inputSchema + annotations) from domain skills; use executepython or executemel only when no skill matches, for bulk in-process loops, or for API…
maya-import-to-scene
Pipeline stage — structured asset import. Consume an AssetDescriptor produced by maya-asset-source and import the asset (FBX, OBJ, USD) into the current Maya scene via cmds.file(). Handles axis/unit conversion, MaterialMode, PlacementHint, and optional target collection grouping. Returns an ImportToSceneResult with…
dcc-mcp-maya-setup
Set up dcc-mcp-maya for an agent or operator: install Maya Python dependencies with mayapy, generate MCP host configuration, guide the user through loading the Maya plugin, and run a first live-tool smoke prompt.
maya-asset-source
Pipeline stage — asset discovery and resolution. Search local asset libraries, resolve paths to structured AssetDescriptor records, and surface candidate assets for downstream import. Use before maya-import-to-scene to locate what to import.
maya-mock-async
Synthetic async skill for gateway integration tests. Sleeps for N seconds and reports progress every 500 ms. No actual Maya installation required — uses MayaStandaloneDispatcher.