mcp-for-maya
mcp-for-maya lets AI agents drive Autodesk Maya: perceive scene layout, plan/modify 3D content, audit quality, manage assets, and verify results visually.
Spatial awareness: one-call scene overview (
scene_snapshot), deep object/zone inspection (scene_inspect), measurements (scene_measure), node discovery/introspection (scene_nodes,scene_describe).Engineering audit: 11-check scene review with 0-100 score (
scene_review), constraint validation (scene_validate), state assertions (scene_assert).Aesthetic analysis: 5-dimension design scoring (
scene_aesthetics) covering color, composition, scale, lighting, flow.Scene planning: holistic health check, zone/layout suggestions, conflict prevention, optional auto-fix (
scene_plan).Camera planning: create industry-standard shots (
camera_create) and animated orbits (camera_orbit).Code execution: run arbitrary Python/MEL (
execute_code) and inject reusable in-memory modules (write_module).Transactional safety: save/restore in-memory scene snapshots (
scene_checkpoint,scene_rollback,scene_checkpoint_list).Asset library: search/import Poly Haven CC0 models with texture wiring, polycount guards, and dedup (
asset_search,asset_import).Scene export: export whole scene or selected objects to FBX/OBJ/USD (
scene_export).Visual loop: WYSIWYG viewport captures and clean single-frame playblast previews in GUI sessions (
scene_viewport_snapshot,scene_render_preview).Session management: discover/attach Maya sessions and diagnose or install connection setup (
list_sessions,add_session,maya_setup_guide).Trust/safety: localhost-only command port, zero telemetry, rate limits/audit log, optional policy flags to disable execute/write_module.
Enables AI agents to directly drive Autodesk Maya for 3D modeling, scene planning, and engineering-grade delivery. Provides tools for spatial scene awareness, inspection and measurement, aesthetic analysis, camera planning, checkpoint/rollback, engineering audits, arbitrary Python execution inside Maya, viewport snapshots and render previews, session management, asset import, and FBX/OBJ/USD export.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-for-mayainspect my current Maya scene and measure the tabletop thickness"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
English | 简体中文
mcp-for-maya
MCP server giving AI agents spatial awareness of Autodesk Maya scenes
What Is This
mcp-for-maya is a Model Context Protocol (MCP) server that lets LLM agents (Codex, Claude, etc.) directly drive Autodesk Maya for 3D modeling, scene planning, and engineering-grade delivery.
Forked from chadrik/maya-mcp-server, it adds a scene-intelligence layer on top of the upstream connection stack: spatial awareness, deterministic auditing, transactional safety, and a visual loop.
Key capability: the agent stops "writing blind" — it can perceive spatial state, materials, and object relationships, then verify changes against engineering rules.
This server executes arbitrary Python inside Maya — that is a designed capability, not a bug. The built-in validation / rate-limit / audit pipeline is asafety net for accidents and injected instructions, not a boundary against a malicious client; the connected agent is trusted. See docs/threat-model.md.
Every asset below is a real capture produced by this project's own tool chain — no mockups: scenes were built procedurally through execute_code / write_module (plus one live asset_import), frames rendered through scene_render_preview, the audit pair via scene_review + scene_viewport_snapshot, and the orbit sequence captured frame-by-frame with playblast (Maya 2024 GUI session).
Prompt | Result |
| |
| |
| |
| |
| |
|
Reproduce every frame with the scripts in .github/assets-src/.
Related MCP server: Maya MCP Server
vs blender-mcp
An honest three-tier comparison with ahujasid/mcp-for-blender (measured 2026-09):
Tier | Contents |
Unique to this project | ICEV enforced workflow (in server instructions), CoS notation output, checkpoint/rollback transactional safety, scene_plan holistic planning (zone mapping + layout suggestions), multi-session management, 11 deterministic audit checks, playblast render preview with metadata |
Unique to blender-mcp | Asset ecosystem breadth (Sketchfab/Hyper3D/Hunyuan3D), first-class object CRUD tools, AI-generated-model integrations, community scale |
Shared | MCP tool surface, Poly Haven asset source, viewport screenshot feedback, arbitrary Python execution, local socket connection |
Poly Haven model search + import shipped in 0.2.0 (issue #2 thin slice: FBX + texture wiring; HDRIs and texture packs remain roadmap). AI generation and first-class object CRUD are explicitly out of scope — the latter is already covered by execute_code.
On the shared asset-download path, this project's controls are enforced in code rather than conventional: downloads happen host-side only — https + host allowlist, per-file md5, size caps, filenames sanitized from the URL's last segment (polyhaven.py) — and Maya itself never touches the network. Enforcement detail: docs/threat-model.md.
Capability | Tools | Notes |
🧊 Spatial awareness |
| One-call full-scene spatial model; precise distance/overlap/gap measurement |
🎨 Aesthetic analysis |
| 5 dimensions: color theory (60-30-10), spatial composition (golden ratio / rule of thirds), proportion & scale (ergonomics), lighting quality (three-point / fill ratio / temperature / decay), visual flow |
🎬 Camera planning |
| 8 industry-standard shot types + orbit animation |
🛡️ Disaster recovery |
| exportAll in-memory snapshots; rollback explicitly rebinds the original path |
🧠 Scene planning |
| Organization health, zone balance, layout suggestions, conflict prevention, natural-language planning |
📋 Engineering audit |
| 11 deterministic checks (0-100 score) + custom constraint validation + state assertions |
⚡ Code execution |
| Run arbitrary Python in Maya / inject reusable modules |
👁️ Visual loop |
| WYSIWYG viewport capture + single-frame playblast preview (GUI sessions only) |
🔌 Session management |
| Multi-session discovery/attach + connection diagnosis/install/fallback guidance |
📦 Asset library |
| Poly Haven CC0 models — host-side HTTPS download (host allowlist, md5 verify, size caps, platformdirs cache), Maya-side FBX import with texture wiring, polycount/dims guards, |
📤 Scene export |
| FBX/OBJ/USD export — whole scene or named objects; format inferred from extension (conflict is an error, never a guess), parent dirs auto-created, overwrite opt-in, selection restored |
🔎 Scene-graph introspection |
| API-level node self-description (exact type, per-attribute metadata: keyable/connectable/enum/ranges, connection wiring — size-bounded, |
25 MCP tools in total.
1. Install
# Install from PyPI (recommended)
pip install mcp-for-maya
# or run straight away with uvx
uvx mcp-for-maya
# alternative: install from git with uv
uv tool install git+https://github.com/Xxx91n/mcp-for-maya.git
# or clone the source
git clone https://github.com/Xxx91n/mcp-for-maya.git
cd mcp-for-maya
pip install -e .Three-layer naming: dist name mcp-for-maya (PyPI shelf name) → installs import package maya_mcp_server (kept from upstream); script name mcp-for-maya (old name maya-mcp-server remains as a compat alias). uvx mcp-for-maya resolves precisely because the command name matches the dist name.
2. Connect Maya
Option A: automatic (recommended)
With the MCP server running, the agent calls maya_setup_guide to walk the connection:
Make sure Maya is running
Give the agent any instruction (e.g. "look at my Maya scene")
If unconnected, the agent runs diagnostics and can install
userSetup.py(idempotent marker-block merge, timestamped backup before writing)After restarting Maya, the command port opens automatically
Option B: manual
In Maya's Script Editor (Python mode, not MEL):
import maya.cmds as cmds
cmds.commandPort(name=":7001", sourceType="python")Option C: persistent auto-connect
Save this as userSetup.py in your Maya scripts directory:
Platform | Path |
Windows |
|
Linux |
|
macOS |
|
import maya.cmds as cmds
cmds.evalDeferred('cmds.commandPort(name=":7001", sourceType="python")', lowestPriority=True)Multiple Maya instances
A commandPort is a single listening socket bound to one host:port — a second instance fails to bind the same port, so each Maya instance needs its own port. Typical topology:
Maya instance | commandPort | Notes |
Instance A |
| primary |
Instance B |
| second instance |
Instance A |
| MEL port (auto-detected and exempted — no error spam) |
Run cmds.commandPort(name=":<port>", sourceType="python") inside each instance (its Script Editor or its own userSetup.py). Auto-scan is the primary path — the server periodically enumerates listening Maya ports and bootstraps them; if a session is missed, add_session(host, port) is the manual fallback. If scanning probes a non-Maya TCP service on the box, bound the probe set with MAYA_MCP_INCLUDE_PORTS=7001,7002 (comma-separated, 7005-7010 ranges allowed) or exclude offenders via MAYA_MCP_EXCLUDE_PORTS=<port>.
Note: a commandPort does not persist across sessions — it dies with Maya; for persistence write it into userSetup.py (Option C).
Troubleshooting
Problem | Fix |
| call |
Port in use | close other Maya instances or pick another port |
userSetup.py not loading | check it sits in the right scripts dir, restart Maya |
Firewall blocks | ensure localhost:7001 is reachable |
Second Maya instance not listed | each instance needs its own |
Script Editor spams syntax errors | legacy symptom of probing a MEL port — current versions auto-exempt non-Python ports; if it persists, exclude the port via |
3. Configure the MCP client
Codex ~/.codex/config.toml:
[mcp_servers.maya]
command = "uvx"
args = ["mcp-for-maya"]
tool_timeout_sec = 120For the git source use args = ["--from", "git+https://github.com/Xxx91n/mcp-for-maya.git", "mcp-for-maya"]; for a source checkout use command = "python", args = ["-m", "maya_mcp_server"], and point PYTHONPATH at <repo>/src under env.
4. Use it
Talk naturally:
"Look at what's in my Maya scene, then create a display shelf at the entrance"
The agent calls scene_snapshot() → understands the scene → models → scene_review() audits the result.
Every scene modification follows the ICEV loop (also shipped as an agent process card, see skills/icev-workflow):
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ INSPECT │ ──→ │ COMPUTE │ ──→ │ EXECUTE │ ──→ │ VERIFY │
│ snapshot │ │ plan │ │ apply │ │ audit │
└──────────┘ └──────────┘ └──────────┘ └──────────┘INSPECT:
scene_snapshot()for full-scene spatial dataCOMPUTE: plan positions, sizes, clearances from that data
EXECUTE:
execute_code()applies Maya PythonVERIFY:
scene_assert()+scene_review()confirm the result; on GUI sessions the visual tools give pixel-level confirmation
Tools Reference
Spatial
scene_snapshot(detail="compact", format="cos") # full scene in one call
scene_inspect(target="wall_entrance", include_neighbors=True)
scene_measure(obj_a="wall_north", obj_b="counter_A", mode="clearance")
scene_assert(expectations='{"wall": {"exists": true, "position": [0,0,500]}}')Audit
scene_review() # 11 deterministic checks, 0-100 score
scene_validate(rules='[{"type": "min_clearance", "value": 180}]')Cameras
camera_create(target="product_display", shot_type="medium", azimuth=30, elevation=15)
# extreme_wide / wide / medium / close / extreme_close / bird_eye / low_angle / over_shoulder
camera_orbit(center=[0, 100, 0], radius=500, frames=120)Disaster recovery
scene_checkpoint(name="before_renovation") # exportAll in-memory snapshot; no undo history
scene_checkpoint_list()
scene_rollback(filename="cp_before_renovation.ma")
# auto safety snapshot first, then rebinds the scene name to the original path
# call scene_snapshot() after a rollback — snapshots carry no undo history
# self-contained: references are flattened (no write-back); one scene file per session assumedAssets (Poly Haven, host-side download)
asset_search(query="camera", asset_type="models", limit=20) # Poly Haven index
asset_import(asset_id="Camera_01", resolution="1k")
# HTTPS-only download into a platformdirs cache (per-file md5 verify + sha256 audit),
# then Maya imports the local FBX under GRP_asset_<asset_id> (repeat calls dedup;
# force=True re-imports). Textures auto-wire by filename suffix
# (diff/rough/metal/nor_gl/ao/disp...) with sRGB/Raw color spaces and bump2d normals.
# Single-part assets ship bare map names (Diffuse/Rough/Metal...) — those are
# recognised too and wired onto the asset's single material.
# Guards: 100k-face polycount cap (allow_high_polycount override), dims sanity report.Scene export
scene_export(path="D:/out/scene.fbx") # whole scene; format inferred from .fbx
scene_export(path="/tmp/kit", format="obj") # missing extension is appended -> kit.obj
scene_export(path="D:/out/kit.usd", objects=["GEO_box"]) # exportSelected; prior selection restored
# format {fbx,obj,usd}: an extension/format conflict is an error, never a guess.
# An existing file is rejected unless overwrite=True. prompt=False is forced
# (no modal can hang the channel); the scene's modified flag is untouched.
# Alembic is not supported — AbcExport is not a cmds.file surface.Visual loop (GUI sessions only)
scene_viewport_snapshot(
max_size=800, format="jpeg"
) # HUD/selection included — what the artist sees
scene_render_preview(camera="CAM_hero", width=640, height=360) # clean single-frame playblast
# both return [image, JSON metadata]; headless sessions get a gui_session_required error
# prefer format="png" for wireframe/line-art review; trust returned metadata for actual sizeCoS Notation
Default output uses Chain-of-Symbol notation to compress scene data. The format's paper reports ~65% token savings vs JSON on its demo scenes (arXiv:2305.10276, −65.8%) — this project implements the notation; that figure is the paper's measurement, not a benchmark of this project.
SCENE[164obj, 5zones] UNIT=cm UP=y
shell (23obj) @(-11.8,178.8,145.7)
GRP_floor[mesh]@(0,0,0) 1121.5x20x1530.5Agent Skills
Two Experimental process cards ship in skills/:
Skill | Purpose |
| ICEV discipline: every scene mutation goes through Inspect→Compute→Execute→Verify |
| Audit playbook: what the 11 checks weigh and how to map findings to fixes |
Evaluated on Claude Code only; untested on Codex/Gemini CLI/Cursor. Cross-model evaluation is tracked in issue #3.
scene_review() provides 11 universal checks (score normalized to 0-100):
Check | Max pts | What it looks at |
spatial | 10 | object/camera/light presence |
overlaps | 10 | bbox collisions (parent-child excluded) |
conflicts | 10 | penetration between unrelated objects |
zones | 5 | naming-rule zone coverage |
naming | 5 | production naming convention |
components | 10 | GRP_ grouping + nesting depth ≤ 4 |
orphans | 5 | empty groups / default names |
aesthetics | 15 | 5-dimension aesthetics (color/composition/scale/lighting/flow) |
lighting | 10 | three-point setup, fill ratio, decay |
organization | 10 | overall hierarchy health |
constraints | 5 | custom rule violations |
Trust & Privacy
Zero telemetry: no phone-home — the project ships no telemetry or unsolicited outbound traffic; verify in source. The ONLY outbound calls are the two asset tools: HTTPS to
api.polyhaven.com/dl.polyhaven.org|.com(host allowlist + md5 + size caps inpolyhaven.py), and only when you call them.Local, single-user: the command port binds localhost only; the connected MCP client is trusted.
Safety net: a unified pipeline (
pipeline.py+security.py) validates arguments + token-bucket rate limits (~100/60s reads, ~20/60s writes, per session) + pattern scan (warn-only by default) + an independent JSONL audit log across all 25 tools. It catches accidents, not malicious clients — full model in docs/threat-model.md.Transactional safety:
scene_checkpoint/scene_rollbackgive in-memory snapshots and explicit rollback (no undo history; references flattened).Strict policy mode (optional): set
MAYA_MCP_DISABLE_EXECUTE=1,MAYA_MCP_DISABLE_WRITE_MODULE=1, orMAYA_MCP_DISABLE_ARBITRARY=1(all three) to remove the escape-hatch tools fromtools/listand deny the call with[policy_disabled]. Read-only tools are unaffected. These are misuse guardrails, not a hostile-agent boundary — an agent that still holdsexecute_codeis already inside the trust boundary; what they buy is a smaller blast radius for a demo, a mistake, or a CI sandbox. Rationale: docs/threat-model.md. Per-code reference: docs/guide/error-codes.md.Vulnerability reporting: SECURITY.md.
Versioning
This project follows Semantic Versioning:
0.x (through 0.3.x, Alpha): the tool surface could still change; minor bumps carried features, no compatibility freeze.
Beta (0.4.0): feature-complete tier — external testing begins here (classifier
4 - Beta).1.0.0: public API freeze — tool surface and output schemas stable per semver; breaking changes require 2.0.0. Promoted together with the
5 - Production/Stableclassifier in one commit; gated by the #7 real-machine checklist (Pass-set green + explicit waived items with owner/expiry — three-state gate, D-163).
The public API is the MCP tool surface: tool names, their input/output shapes, the two-layer error contract (host isError failures vs {error:{code,message,suggestion}} domain results), and tool-annotation semantics (docs/threat-model.md §5). Additive changes (new tools, new optional response fields) ship as minor releases; breaking changes ship as a major bump. 1.0.0 is a freeze commitment on this surface — not a quality certification: the remaining real-machine verification surface is tracked explicitly in #7 rather than implied away.
Releases are milestone-driven — no fixed cadence promised. Roadmap lives in GitHub issues: #2 Poly Haven integration (model slice shipped in 0.2.0; scene_plan recommendation residual split to #31), #3 Skills program (v1.x), #4 security & permission model (v1.x), #5 scene export + introspection (scene_export shipped in 0.3.0: FBX/OBJ/USD; scene_describe/scene_nodes introspection shipped in the same 0.3.0), #6 more asset sources (exploratory), #7 real-machine checklist + v1.0 feedback (pinned).
Requirements
Environment | Requirement |
Host (runs the MCP server) | Python >= 3.10 ( |
Injected helper (runs inside Maya) | Maya >= 2023 (bundled Python >= 3.9; relies on |
Verified against | Maya 2024 GUI |
The two visual-loop tools need a GUI session (headless/mayapy returns a structured capability error). On the first capture the server probes the VP2 readback direction per-session (a disposable scene probe, net-zero side effects); MAYA_MCP_VP2_BOTTOM_UP=0|1 forces it when a driver misreports.
Development
uv sync --frozen # locked dev env from uv.lock (alt: pip install -e . --group dev, pip>=25.1)
python -m pytest tests/ -q # tests
ruff check src tests # lint
mypy src # typecheck
python -m maya_mcp_server -vv # run with DEBUG logs (-v=INFO, -vv=DEBUG)See CONTRIBUTING.md for the PR flow and CHANGELOG.md for the change log.
Credits
Forked from chadrik/maya-mcp-server — upstream MIT copyright retained (see LICENSE); this project adds the scene-intelligence layer on top of its connection stack.
How each upstream open issue maps to a disposition and release version in this fork: docs/upstream-issue-status.md.
Available Tools
25 toolsadd_sessionAdd SessionA
Manually add a Maya session at a specific host and port.
Use this when auto-discovery doesn't find your Maya session, or to connect to a Maya instance on a specific port.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | The session host (default: "127.0.0.1") | 127.0.0.1 |
| port | No | The session port number (default: 7001) |
Output Schema
| Name | Required | Description |
|---|---|---|
| pid | Yes | |
| host | Yes | |
| port | Yes | |
| user | Yes | |
| scene_name | No | |
| scene_path | No | |
| session_key | Yes | |
| maya_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the agent knows this creates state. The description adds the useful framing that this is a manual override to auto-discovery, but says nothing about persistence, session lifetime, or what happens on duplicate adds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, rationale second. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple 2-parameter tool with full schema coverage, annotations, and an output schema, so return values need not be explained. The description gives enough to call it correctly; only edge-case behavior (duplicate sessions, failure modes) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented with defaults in the schema. The description only names host/port generically, adding no format or valid-range detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (a Maya session) plus the scoping detail of host and port. It is clearly distinct from list_sessions and the scene_* tools, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use: 'when auto-discovery doesn't find your Maya session, or to connect to a Maya instance on a specific port.' The fallback condition relative to auto-discovery is spelled out, though no other tool (e.g. list_sessions) is named as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_importAsset ImportAIdempotent
Import a Poly Haven CC0 model into Maya (find ids via asset_search).
Pipeline: host downloads FBX + textures from the Poly Haven whitelist (https-only, size caps, per-file md5 verify) into the platformdirs cache -> Maya imports the local FBX (explicit meters unit handling) -> texture maps auto-wire by PH naming convention (diff/albedo -> color sRGB; rough/metal -> Raw single-channel; nor_gl -> bump2d normal) -> polycount gate -> group as GRP_asset_ -> bbox/metadata report.
Idempotent by default: a second call with the same asset_id reports the existing group instead of duplicating (force=True re-imports).
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Re-import even when GRP_asset_<id> already exists. | |
| asset_id | Yes | Poly Haven asset id (case-sensitive, e.g. 'Camera_01'). | |
| resolution | No | Texture tier '1k' (default), '2k', '4k', '8k'. | 1k |
| session_key | No | Maya session key. | |
| max_polycount | No | Face-count guard (default 100000); imports over the limit are deleted and rejected. | |
| allow_high_polycount | No | Override the polycount guard (the override is disclosed in the audit log). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, and destructiveHint=false. The description adds rich behavioral context beyond those flags: download safety (https-only, size caps, md5 verification), cache location, local FBX import with meter handling, automatic texture wiring rules, polycount gating, grouping, and bbox/metadata reporting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the tool's purpose. The pipeline is expressed as a compact arrow chain, and the idempotency behavior is stated without wasted words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with an output schema, annotations covering safety and idempotency, and full parameter descriptions, the definition is complete enough for an agent to call it correctly. The pipeline, safeguards, and idempotency contract are all disclosed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by directing agents to resolve asset_id via asset_search and by explaining that over-limit imports are deleted and rejected, which contextualizes max_polycount and allow_high_polycount.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Import a Poly Haven CC0 model into Maya.' It also explicitly names the sibling tool used to find ids ('asset_search'), so an agent can distinguish this import tool from the search tool immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: find ids via asset_search first, then use this tool to import. It also specifies when to set force=True by explaining the default idempotent behavior and what happens on repeated calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_searchAsset SearchARead-onlyIdempotent
Search the Poly Haven CC0 asset index (host-side, no Maya needed).
Queries https://api.polyhaven.com/assets and returns matching asset metadata. Read-only and idempotent - pure lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Result cap, 1-20 (default 20). total_count always reports the full match count. | |
| query | No | Free-text search (matches id, name, categories, tags). Empty returns the unfiltered index page (up to limit). | |
| asset_type | No | "models" (default), "hdris", or "textures". Note: asset_import handles models only. | models |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the exact remote endpoint queried and the fact that execution is host-side, i.e. it makes an outbound HTTP call with no Maya session required. Rate limits or error behavior from the remote API are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, then endpoint and safety traits. No filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out; the description still notes that matching asset metadata is returned. Combined with full schema coverage and complete annotations, an agent has enough to invoke it correctly, with only the handoff to asset_import left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, limit and asset_type are already fully documented in the schema, including defaults and the asset_import caveat for models. The description adds nothing about parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (the Poly Haven CC0 asset index) and immediately scopes it as host-side with no Maya dependency, which separates it from the Maya-bound siblings. It does not explicitly name asset_import as the alternative for actually pulling assets into the scene, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'pure lookup' and 'no Maya needed' implies the discovery use case, but the description never states when to prefer this over asset_import or what to do after finding an asset. Usage is inferable rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
camera_createCamera CreateA
Create a camera positioned for a specific shot type.
Supports industry-standard shot types: extreme_wide, wide, medium, close, extreme_close, over_shoulder, bird_eye, low_angle.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Camera name. | CAM_shot |
| target | Yes | Target object name to look at. | |
| azimuth | No | Horizontal angle in degrees (default 30). | |
| elevation | No | Vertical angle in degrees (default 15). | |
| shot_type | No | Shot type (default "medium"). | medium |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the safety profile: not read-only, not idempotent, not destructive, closed-world, so the agent knows this mutates scene state and cannot be safely retried. The description adds the shot-type vocabulary but says nothing about whether the new camera persists across sessions, whether it is undoable via scene_rollback, or that a Maya session is involved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and scope, with the value list consigned to the second sentence. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description need not explain returns, and the annotations carry the safety profile, so the remaining gap is small: it does not mention that a Maya session is required or how this relates to camera_orbit when adjusting an existing camera. Adequate for a 6-param creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds the enumerated set of valid shot_type values (extreme_wide, wide, medium, close, extreme_close, over_shoulder, bird_eye, low_angle) that the schema omits — the schema only says 'Shot type (default "medium")' with no enum. That is genuine added meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a camera') plus its scope ('positioned for a specific shot type'), which is clearer than a bare 'create camera'. It does not name or contrast the closest sibling (camera_orbit) or any other scene_* tool, so an agent gets a clear action but no explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The shot-type list implies the intended workflow (framing a shot within a Maya scene), but there is no explicit when-to-use, no stated prerequisites (e.g. that a session/target must exist), and no contrast with camera_orbit for moving an existing camera.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
camera_orbitCamera OrbitA
Create an orbiting camera with turntable animation around a point.
Side effects: creates a new camera and animation curves in the scene and marks the scene dirty. Not idempotent — each call adds another camera. Requires an active Maya session.
Boundary: Disambiguated from camera_create (static shot-type framing; use camera_orbit only when an animated orbit is needed).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Camera name. | CAM_orbit |
| center | Yes | Orbit center as a JSON string "[x, y, z]". | |
| frames | No | Number of frames for one full orbit. | |
| radius | No | Orbit radius in scene units. | |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, but the description adds substantial context beyond them: it specifies that a camera and animation curves are created, that the scene is marked dirty, that each call adds another camera, and that an active Maya session is required. This is exactly the kind of operational side-effect detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is three short, front-loaded paragraphs: purpose first, then side effects, then boundary. Every sentence carries distinct decision-relevant information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering the safety profile, a full input schema, and an output schema handling return values, the description supplies the remaining decision-critical facts: side effects, non-idempotence, session requirement, and sibling disambiguation. Nothing needed to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including center, frames, radius, name, and session_key. The description adds no parameter-level meaning beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create an orbiting camera with turntable animation around a point.' It also distinguishes the tool from its sibling camera_create by defining the boundary condition (static framing vs animated orbit), so an agent can choose correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative (camera_create) and the condition that selects this tool: use camera_orbit only when an animated orbit is needed. This is direct when/when-not guidance with a sibling named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_codeExecute CodeADestructive
Execute arbitrary Python or MEL code in an active Maya session.
Runs arbitrary code with full session privileges of the connected Maya process. Execution is irreversible and cannot be undone (modifications do not register an automatic undo chunk). The return value shape is governed by the result_type envelope parameter. Requires an established Maya session (discoverable via list_sessions).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python or MEL code to execute in Maya. | |
| result_type | No | Return envelope handling for the execution result: - "NONE": Execute statements, don't capture result (returns None) - "JSON": Evaluate expression, JSON-encode result - "RAW": Evaluate expression, return string representation | NONE |
| session_key | No | Maya session key (optional if only one session exists). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: runs with full session privileges, execution is irreversible and cannot be undone, modifications do not register an automatic undo chunk, and the return value shape is governed by result_type. This is exactly the behavioral detail an agent needs for a destructive code-execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then behavior, irreversibility, return handling, and session requirement. Every sentence adds a necessary operational detail with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dangerous arbitrary-code tool with no output schema, the description covers execution scope, privileges, irreversibility, undo behavior, return envelope control, and session requirements. An agent has enough context to invoke it correctly and cautiously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains code, result_type, and session_key in detail. The description only notes that result_type governs the return envelope, adding little beyond the structured field documentation. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: execute arbitrary Python or MEL code in an active Maya session. This distinguishes it from all scene_* siblings, which operate on scene data rather than arbitrary code execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear prerequisite: an active Maya session, discoverable via list_sessions. It does not explicitly name alternatives or when not to use this tool versus scene_* tools, but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsList SessionsARead-onlyIdempotent
List all active Maya sessions.
Returns a list of session information including:
session_key: Session key used to interact with tools and resources
host: Session host address
port: Session port number
pid: Maya process ID
user: Logged-in user
maya_version: Maya version string
scene_name: Current scene filename
scene_path: Full path to current scene
Note: To detect new or removed sessions, clients should call this tool periodically (e.g., every 10-30 seconds) and compare results. The SessionManager automatically scans for new Maya sessions in the background.
If this returns an empty list, call maya_setup_guide() for connection help.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds real value beyond them: the polling cadence recommendation and the SessionManager's background scanning behavior, which an agent would not infer from annotations. It does not disclose latency or result freshness guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the operational note is well placed, but the eight-line enumeration of return fields largely duplicates what the output schema already provides, adding length without added value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with an output schema and full annotations, the description covers the remaining agent-relevant unknowns (polling cadence, background scanning, empty-list recovery). Nothing critical is missing, though freshness/latency of the session list is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case. The enumerated fields describe output, not inputs, so there is no parameter semantics to clarify, and none is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all active Maya sessions') with explicit scope ('active'), which cleanly separates it from add_session and the scene_* siblings. An agent can identify the tool's job without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context (poll every 10-30 seconds to detect new/removed sessions) and a fallback path (call maya_setup_guide() when the list is empty). It lacks explicit 'when not to use' or named alternatives such as add_session, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maya_setup_guideMaya Setup GuideADestructive
Maya connection setup guide and diagnostics.
Use this tool when list_sessions returns empty or when setting up Maya MCP for the first time. Provides platform-aware diagnostics, auto-installation of userSetup.py, and step-by-step fallback instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | Maya command port number (default: 7001) | |
| action | No | What to do: - "diagnose": Run connection diagnostics and return status - "install": Merge the managed marker block into userSetup.py. Existing files without the block require a second call with confirm=True (the first call returns the proposed block). - "guide": Get full step-by-step connection guide - "uninstall": Remove the managed marker block from userSetup.py | diagnose |
| confirm | No | Required to write into an existing userSetup.py that has no mcp-for-maya marker block (first install call is dry-run). | |
| dry_run | No | Preview the install: return the proposed block without writing anything. | |
| target_version | No | Specific Maya version (e.g., "2024"). If None, targets all detected versions. | |
| remove_empty_file | No | On uninstall, delete the file when it only contained the marker block. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is conveyed structurally. The description goes further by naming the artifact it mutates ('auto-installation of userSetup.py') and the fallback-instruction behavior, which tells the agent this tool writes to disk rather than only probing. It does not, however, flag that uninstall can delete files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler: identity first, then the routing condition, then the capability list. Each sentence carries distinct information and the trigger is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the four action modes are enumerated in the schema. The description supplies the trigger and the artifact being modified, which is sufficient for correct invocation; only the destructive-delete nuance of uninstall is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (port, action modes, confirm, dry_run, target_version, remove_empty_file) are already fully documented in the schema. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific resource and two capabilities: 'Maya connection setup guide and diagnostics.' An agent can immediately see this is the troubleshooting/onboarding tool rather than a scene or session tool. It stops short of 5 because the write actions (install/uninstall of userSetup.py) that distinguish it from a pure read-only diagnostic are not surfaced in the lead sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when list_sessions returns empty') and a second condition ('setting up Maya MCP for the first time'), naming the sibling tool whose output selects this one. This is precisely the routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_aestheticsScene AestheticsARead-onlyIdempotent
Professional-grade aesthetic analysis with 5 design dimensions.
Analyzes scene aesthetics across 5 professional design dimensions:
Color Theory: 60-30-10 rule, temperature balance, harmony type, saturation variety, contrast
Spatial Composition: golden ratio proportions, rule-of-thirds alignment, visual weight balance
Proportion & Scale: human ergonomic reference, size hierarchy (hero/secondary/tertiary)
Lighting Quality: layer composition (key/fill/rim/accent), color temperature consistency
Visual Flow: sight line clarity, circulation paths, visual rhythm patterns
Returns an overall score (0-100) with grade (S/A/B/C/D/F) and improvement suggestions.
Boundary: Disambiguated from scene_review (scene_aesthetics evaluates visual design theory and artistic harmony in depth, while scene_review is a broad multi-system scene health audit).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format - "json" (default) or "cos" (chain-of-symbol, token-efficient). | json |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the output shape (0-100 score, letter grade, improvement suggestions), but no session/auth requirements, latency, or failure behavior, and the return detail is largely redundant given an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then uses a scannable numbered list for the five dimensions, closing with return info and the boundary rule. The dimension detail is somewhat verbose for tool selection but earns its place by conveying analysis depth; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained again, and the description still summarizes the scoring model. Combined with annotations covering safety and a fully described two-param schema, the definition is essentially complete, missing only minor context like prerequisites or session handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (format, session_key) are already documented in the schema. The description adds nothing about the format enum or session_key semantics, so the baseline 3 for fully-covered schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Analyzes scene aesthetics across 5 professional design dimensions') and enumerates exactly what those dimensions are. The Boundary section explicitly disambiguates it from scene_review, so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Boundary statement gives an explicit routing rule: use scene_aesthetics for deep visual design theory/artistic harmony, scene_review for a broad multi-system health audit. That is clear alternative-selection guidance, though it stops short of stating trigger conditions like 'call this after placing assets' or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_assertScene AssertARead-onlyIdempotent
Verify scene state matches expected values.
Use this after modifications to confirm the scene is in the desired state. Enforces the VERIFY step of the ICEV workflow.
Boundary: Disambiguated from scene_validate (checks relational spatial constraints across zones rather than exact expected values for named objects).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format - "cos" or "json". | cos |
| session_key | No | Maya session key. | |
| expectations | Yes | JSON string defining expected state. Format: {"obj_name": {"position": [x,y,z], "bbox_max": [x,y,z], ...}} Supported properties: position, bbox_max, bbox_min, exists, material. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the workflow role ('VERIFY step of the ICEV workflow') and the disambiguation boundary, which is genuine context beyond the structured fields. It does not explain failure semantics (what happens on mismatch), but the output schema carries return details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in one sentence, then usage, then workflow role, then a clearly labeled boundary. Every sentence earns its place with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only assertion tool with full schema coverage and an output schema, the description supplies the purpose, usage context, and sibling routing. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents expectations, format, and session_key in detail. The description only alludes to 'expected values for named objects', adding no syntax or format detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Verify') and resource ('scene state') with the scope 'matches expected values'. The boundary sentence explicitly distinguishes it from the sibling scene_validate, so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this after modifications to confirm the scene is in the desired state' gives an explicit when-to-use, and the boundary note gives an explicit when-not (relational spatial checks across zones -> scene_validate). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_checkpointScene CheckpointA
Save a real scene snapshot (exportAll of in-memory state).
Writes a self-contained .ma into a checkpoints/ directory next to the scene file. On untitled (never-saved) scenes an explicit name is required and produces an ad-hoc snapshot under the Maya workspace — returned with original_file_status="no_original_file" and scene_rebound_to=null. Same-name checkpoints are rejected unless overwrite=True (the old file is preserved via rename).
Honest bounds: the snapshot contains no undo history — after scene_rollback, call scene_snapshot to rebuild context. References are flattened (self-contained, no write-back). Assumes one scene file per session.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Checkpoint name (^[A-Za-z0-9_-]+$). Required on untitled scenes. | |
| overwrite | No | Replace a same-name checkpoint, preserving the old file. | |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld/idempotent/destructive flags; the description goes well beyond them, disclosing that checkpoints carry no undo history, that same-name saves are rejected unless overwrite=True, that the old file is preserved via rename, that references are flattened, and even naming the return fields (original_file_status, scene_rebound_to).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: the core action leads, then naming/overwrite rules, then honest bounds. Dense but each sentence carries information; the parenthetical 'Honest bounds:' framing is slightly editorial but useful rather than wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the full picture for a mutation-style tool: scope, file placement, failure modes (same-name rejection), preconditions (untitled scenes), and the limitations an agent needs (no undo history, flattened references, one scene file per session). Even though an output schema exists, the returned status fields are described usefully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning beyond the schema by explaining the untitled-scene requirement for `name` and the preserve-via-rename semantics of `overwrite`. The session_key parameter remains unexplained in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Save a real scene snapshot (exportAll of in-memory state)') and immediately distinguishes it from the sibling scene_snapshot by noting that one is for rebuilding context after rollback. Also differentiates from scene_viewport_snapshot by specifying a self-contained .ma written to checkpoints/.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit conditions are given: an explicit name is required on untitled scenes, overwrite=True is needed to replace an existing checkpoint, and scene_snapshot should be used after scene_rollback. Both when-to-use and when-to-use-the-alternative are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_checkpoint_listScene Checkpoint ListARead-onlyIdempotent
List all saved checkpoints for the current scene state.
Saved scenes list <scene_dir>/checkpoints; untitled scenes list the workspace ad-hoc snapshots (adhoc flag per entry).
| Name | Required | Description | Default |
|---|---|---|---|
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is low. The description adds genuinely new behavioral context: results vary by scene type, with untitled scenes resolving to workspace ad-hoc snapshots and an adhoc flag per entry. It stops short of describing entry shape or ordering, but this is solid added value over the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core action is front-loaded before the source-dependent detail. The line-wrapped second sentence is slightly awkward but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the annotations carry the safety profile. The description covers the one non-obvious behavior (scene-type-dependent sources) and is adequate for this low-complexity, single-optional-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional session_key parameter, so the schema does the documentation work and baseline 3 applies. The description adds no extra meaning about session_key or whether it is needed for the lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List all saved checkpoints for the current scene state.' It further distinguishes two data sources (saved scene <scene_dir>/checkpoints vs. untitled workspace ad-hoc snapshots), but never names the sibling tools it is *not* (e.g. scene_checkpoint for creating, scene_rollback for restoring), so differentiation from siblings is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only listing verb, but there is no explicit when-to-use, when-not-to-use, or alternative routing (e.g. 'to create a checkpoint use scene_checkpoint; to restore use scene_rollback'). An agent must infer its place in the checkpoint/rollback workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_describeScene DescribeARead-onlyIdempotent
API-level self-description of ONE node (not spatial).
Boundary: scene_inspect answers WHERE an object is (position, bbox, neighbors); scene_nodes discovers candidate node names; scene_describe answers WHAT the node is at the API level - exact node type, per-attribute metadata, and connection wiring - so you can compose accurate execute_code/setAttr/connectAttr calls against real names.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | Node name (short name or long DAG path). | |
| attrs | No | Attribute names to describe; None (default) lists every attribute listAttr reports UP TO the response budget (limit) - over-budget output is truncated and disclosed via attrs_truncated + total_count, never silent; narrow further with an explicit attrs list or raise limit and re-query. A named attr that does not exist aborts the whole call (attr_not_found) - no partial metadata (same contract as scene_export's missing_objects). | |
| limit | No | Max items returned per face (attrs and connections). Soft default 200; a caller may relax explicitly to the hard cap 1000 (D-110) - bounds response size only, not the per-attribute query cost. | |
| session_key | No | Maya session key (auto-selected if one session). | |
| include_values | No | Also return value + soft_min/soft_max per attr (default False). Reading a value can trigger DG evaluation inside Maya - still read-only, but the eval may cost time on heavy graphs. | |
| include_connections | No | Return connection wiring {src_plug, dst_plug, direction} (default True); the same budget applies (connections_truncated + total_connections; no cursor in v1 - narrow and re-query). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, not open-world), but the schema text adds contract-level behavior beyond that: over-budget output is truncated and disclosed via attrs_truncated/total_count rather than silently dropped, a missing named attr aborts the whole call with attr_not_found, and include_values may trigger costly DG evaluation. These are real behavioral traits not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, then a compact three-way boundary. Dense but every clause routes or clarifies; the parenthetical '(not spatial)' and the sibling contrast both earn their place. Slightly prose-heavy for the payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and annotations are rich, so return-value explanation is not required. Given the routing ambiguity this tool sits in among scene_* siblings, the boundary paragraph supplies exactly the missing orientation an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents node, attrs, limit, include_values, include_connections and session_key in detail. The top-level description itself adds no parameter meaning beyond the boundary framing, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('API-level self-description of ONE node') and immediately disambiguates the concept ('not spatial'). It explicitly distinguishes itself from scene_inspect (WHERE) and scene_nodes (candidate names), so an agent can pick the right tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Boundary paragraph gives explicit when-to-use framing and names two sibling alternatives with their distinct jobs. It also names downstream tools this output feeds (execute_code/setAttr/connectAttr), tying usage to intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_exportScene ExportA
Export the Maya scene (or named objects) to a local file.
Writes through cmds.file with prompt=False forced (a modal dialog would hang the command channel). Formats: fbx, obj, usd (Alembic is not supported - its AbcExport API is not a cmds.file surface). The selection set is restored after every objects= export and the scene's modified flag is untouched.
destructive_hint is False but note: overwrite=True permanently replaces the target file - that path is not recoverable.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Target file path on the Maya host. Normalized and auto-parented (missing directories are created). An existing file is rejected unless overwrite=True. | |
| format | No | "fbx", "obj", or "usd". Optional when the path carries a recognizable extension; a missing extension is appended for an explicit format, and a conflicting extension+format pair is an error, never a guess. | |
| objects | No | Node names to export. None (default) exports the whole scene via exportAll; a list is pre-validated (any missing name aborts - no partial export) and drives exportSelected. | |
| overwrite | No | Replace an existing target file (default False). | |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that prompt=False is forced to avoid a modal hang, that the selection set is restored and the modified flag untouched, and that overwrite=True irrecoverably replaces the target file. Flagging the destructive edge case against destructive_hint=false is exactly the kind of nuance an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and safety caveat are front-loaded, and parenthetical asides are informative rather than filler. Slightly dense with nested qualifications, but every sentence carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and it covers everything else an agent needs: format support and limits, prompt suppression, selection/state preservation, and the irrecoverable-overwrite risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds real value beyond it by listing the accepted formats and explaining why Alembic is excluded via the cmds.file surface. It also reinforces the overwrite/path semantics, though most per-parameter detail lives in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Export) and resource (the Maya scene or named objects) with the destination (a local file), and no sibling tool competes for this function. An agent can identify the operation immediately without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operative context: supported formats (fbx, obj, usd) and an explicit exclusion (Alembic is not supported, with the reason). It doesn't map to an alternative sibling, but none exists, so the routing guidance is adequate for the domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_inspectScene InspectARead-onlyIdempotent
Deep inspection of a specific object or zone.
Returns detailed properties including transform, BBox, material, mesh stats, and optionally nearby objects with distances.
Boundary: Disambiguated from scene_snapshot (broad whole-scene spatial overview) and scene_describe (API-level attribute metadata, types, and connection wiring).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format - "cos" or "json". | cos |
| target | Yes | Object name or zone name to inspect. | |
| session_key | No | Maya session key. | |
| include_neighbors | No | Whether to include nearby objects (default True). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/non-openWorld, so the safety profile is covered. The description adds that inspection surfaces transform, BBox, material, mesh stats and optional neighbor distances, which sets expectations about scope and depth. It stops short of noting cost or size limits for deep inspection, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then return contents, then the disambiguation boundary — a logical order with no filler. Every sentence carries routing or expectation-setting information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, a present output schema, and rich read-only annotations, the description only needs to cover scope and disambiguation, and it does both. Nothing required to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (target, format, session_key, include_neighbors) are already documented in the schema. The description only indirectly echoes the neighbor option ("optionally nearby objects with distances") without adding format or session semantics. Baseline 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Deep inspection of a specific object or zone") and immediately enumerates what it returns. The Boundary section explicitly distinguishes it from scene_snapshot and scene_describe, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The Boundary paragraph names the two most confusable siblings and characterizes each (broad whole-scene spatial overview vs API-level attribute metadata/types/wiring), giving an explicit selection rule. This is genuine when-to-use guidance rather than implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_measureScene MeasureARead-onlyIdempotent
Measure the spatial relationship between two objects.
Call this in the COMPUTE step of the ICEV workflow, to turn a spatial question into a number before you execute a change: size a clearance before moving something, prove two objects interpenetrate before you separate them, or get the axis detail behind an overlap that scene_validate reported.
Read-only and idempotent: it queries world-space bounding boxes and never modifies the scene, so no undo checkpoint is created. Requires an active Maya session.
Every mode measures world-space AABBs, not the mesh surface and not the object origin. The modes differ in what the number means: center distance between the AABB midpoints. surface distance between the closest facing AABB corners — an axis-aligned approximation, so it over-reports clearance for rotated or concave geometry. clearance SIGNED, and 0 is NOT a "merely touching" signal. Per axis the gap is +separated / 0=touching / -penetrating: > 0 euclidean distance across the STRICTLY SEPARATED axes only. Penetrating axes contribute 0, so they are invisible in this number. = 0 no axis is strictly separated and at least one axis is exactly touching. The other axes may be deeply penetrating, so 0 does NOT mean the boxes just touch. < 0 all three axes penetrate; the value is the SHALLOWEST penetration depth, the minimum translation needed to pull them apart. bbox_overlap is true if and only if all three axes strictly penetrate. A single penetrating axis already makes it read false, so it can never be read as "no penetration". Read details.clearances_xyz for the signed per-axis truth before concluding anything from distance alone. bbox overlap test. On overlap, distance is 0 and overlap_dims holds the per-axis penetration extents; otherwise distance is euclidean and gaps_xyz holds the per-axis gaps.
Distances are in the scene's current linear unit (cm, m or mm), not always centimetres.
Boundary: Disambiguated from scene_inspect (per-object property deep-dive), scene_snapshot (whole-scene spatial overview) and scene_assert (checks the scene against expected values rather than measuring one pair).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What the returned number means — see the list above. | center |
| obj_a | Yes | First object name. | |
| obj_b | Yes | Second object name. | |
| format | No | Output format - "cos" or "json". | cos |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, yet the description still adds real behavioral context: no undo checkpoint is created, an active Maya session is required, measurements are world-space AABBs (not mesh surface or origin), and units follow the scene's linear unit. The per-mode semantics of the signed clearance value and the bbox_overlap flag are unusually thorough for a mutation-free query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage, then semantics, then boundary — a clean hierarchy. It is long and the clearance-mode block is dense, but nearly every line carries decision-relevant information, so the length is mostly earned rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description needn't enumerate return fields, and it instead supplies what the schema cannot: mode semantics, units, session prerequisite, and sibling boundaries. Nothing an agent needs to invoke or interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the schema for 'mode' merely says 'see the list above' — the description is the authoritative source for what each mode's number means, including the counter-intuitive signed clearance semantics and the details.clearances_xyz escape hatch. It also adds the unit caveat that applies to all returned distances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource ('Measure the spatial relationship between two objects'), and the Boundary paragraph explicitly distinguishes it from scene_inspect, scene_snapshot and scene_assert. An agent can identify the tool's niche without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the workflow stage (COMPUTE step of ICEV) and gives three concrete triggering situations (sizing a clearance before a move, proving interpenetration before a separation, getting axis detail behind a scene_validate overlap). The Boundary paragraph explicitly routes competing questions to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_nodesScene NodesARead-onlyIdempotent
Bounded enumeration of scene nodes - including non-DAG nodes.
Boundary: scene_snapshot is the low-resolution spatial overview you call once per workflow; scene_nodes is the name-discovery complement for the API layer - it lists nodes a spatial view never shows (materials, shadingEngines, tool nodes) and pages honestly: has_more/next_cursor tell you when the list was cut (for attribute schema and connection inspection, call scene_describe).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Node type filter. With inherited=True (default) derived types match too (ls type= semantics, e.g. type="light" matches spotLight/directionalLight); inherited=False pins the exact type. | |
| limit | No | Page size (default 50, hard-capped at 100). | |
| cursor | No | Opaque page token from a previous call's next_cursor; valid while the scene is unchanged. | |
| pattern | No | Maya glob pattern on names (e.g. "GEO_*"). | |
| dag_only | No | Only DAG nodes (transforms/shapes); False includes dependency nodes such as materials and utility nodes. | |
| inherited | No | See type. | |
| session_key | No | Maya session key (auto-selected if one session). | |
| include_type_counts | No | Also return per-type counts over the full match set (not just the page). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavioral context beyond them: it discloses pagination semantics (has_more/next_cursor signal truncation) and that the list surfaces dependency nodes a spatial view hides. It does not restate the hard cap or cursor-invalidation rules, but those live in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition before the boundary routing, and it is compact for the amount of disambiguation it packs in. A few phrases ('pages honestly', 'low-resolution spatial overview') lean rhetorical rather than informational, but nothing is redundant with structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and annotations cover safety. The description supplies scope, sibling boundary and pagination behavior for an 8-param list tool — the remaining gaps (cap details, cursor lifetime) are already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries type/inherited, dag_only, limit, cursor, pattern and session_key semantics. The description's only added parameter meaning is the non-DAG node examples (materials, shadingEngines, tool nodes) that motivate dag_only, which is marginal. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (bounded enumeration) and resource (scene nodes), and immediately scopes it with 'including non-DAG nodes' — a distinction no sibling makes. The boundary paragraph names scene_snapshot and scene_describe so the agent can separate the three without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: scene_snapshot is the once-per-workflow spatial overview, scene_nodes is the name-discovery complement for the API layer, and scene_describe is for attribute schema and connection inspection. When-to-use and the alternative for adjacent needs are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_planScene PlanA
Holistic scene planning with organization validation and layout optimization.
Performs comprehensive scene health check and generates actionable plans:
Organization validation: detects orphan meshes, empty groups, default names
Zone analysis: coverage and spatial balance across functional zones
Layout suggestions: spacing, overlap, and clustering detection
Conflict prevention: near-miss collision prediction
Action plan: prioritized step-by-step execution guide
Based on blockout-first methodology: validate organization and proportions before committing to detailed modeling. Supports natural language objectives.
Boundary: Disambiguated from scene_review (scene_plan focuses on forward-looking layout planning and actionable auto_fix reorganization, whereas scene_review provides an overall diagnostic audit score).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format - "json" (default) or "cos". | json |
| auto_fix | No | If True, auto-fix safe issues (remove empty groups, reparent orphans). | |
| objective | No | Natural language goal description. e.g., "set up entrance area with display window and clear circulation" | |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, carrying the safety profile. The description adds that output is forward-looking planning with 'actionable auto_fix reorganization', but never plainly states that auto_fix mutates the scene or which issues get changed, so it adds only moderate context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the one-line purpose, then uses a scannable bullet list for capabilities and ends with the sibling boundary. Slightly long but every block serves routing or scoping; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the description covers purpose, methodology, and boundary disambiguation. Complete enough for a 4-param tool; what's missing is explicit disclosure of the mutation trigger, which the annotations partly cover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters fully. The description only loosely gestures at 'auto_fix reorganization' and 'natural language objectives', which map to existing parameters without adding format or behavioral detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (planning) and resource (scene), then enumerates the concrete outputs (organization validation, zone analysis, layout suggestions, action plan). It explicitly distinguishes itself from the sibling scene_review, so an agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context ('validate organization and proportions before committing to detailed modeling') and names the alternative sibling scene_review with the condition that selects each. No explicit when-not-to-use case beyond the boundary statement, so a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_render_previewScene Render PreviewARead-onlyIdempotent
Single-frame playblast preview from a camera (clean, no HUD).
GUI sessions only - headless sessions get a structured gui_session_required error.
Side-effect disclosures (read_only_hint is honest, D-026):
Switching the panel camera via the modelPanel camera flag is instantaneous, visible, and NOT undoable in Maya.
Net-zero side effect: the panel camera is restored on every path - success or failure - so terminal state equals entry.
The current time may visibly jump during capture; it is restored afterwards (playblast timeline quirk).
viewer=False: no playblast window pops up.
On failure the restore is still attempted; a failed restore is logged, never raised over the error result.
Only a killed Maya process can skip the restore.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Frame width in pixels (default 640). Rounded UP to a multiple of 4 server-side (playblast constraint); the actual size may also be clamped by the viewport - trust the returned metadata, not the request. | |
| camera | No | Camera to look through (default: the panel's current camera). | |
| format | No | "jpeg" (default) or "png". png recommended for wireframe/line-art review. | jpeg |
| height | No | Frame height (default 360). Same /4 rule. | |
| quality | No | JPEG quality 1-100. | |
| max_size | No | Longest-side cap for the returned image. | |
| session_key | No | Maya session key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/idempotentHint annotations: it discloses that the camera flag switch is instantaneous but NOT undoable, that the net state is restored on every path including failure, that the timeline may visibly jump, that no viewer window opens, and that only a killed process can skip the restore. This is exactly the kind of side-effect detail annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded, followed by a numbered disclosure list where each item carries distinct information. The list is long but nearly every entry earns its place; a small amount of trimming is possible but nothing is obviously wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a fairly complex side-effecting operation, the description covers the session requirement, the state-restoration contract, and the failure behavior thoroughly. It stops short of describing the returned image/metadata payload, though it does point at 'the returned metadata' as the source of truth for size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already fully documented by the schema, establishing a baseline of 3. The description adds no parameter semantics of its own and in fact references a 'viewer=False' option that does not appear in the input schema, which is mildly confusing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Single-frame playblast preview from a camera') with the scope qualifier 'clean, no HUD', so an agent knows exactly what artifact is produced. It does not, however, differentiate itself from the closely named sibling scene_viewport_snapshot, which is the main ambiguity an agent would face.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'GUI sessions only - headless sessions get a structured gui_session_required error' line is a genuine when-not condition, telling the agent the call will fail in headless contexts. It stops short of naming an alternative tool for the headless case, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_reviewScene ReviewARead-onlyIdempotent
Comprehensive scene audit - reviews all aspects after operations.
Runs spatial integrity, overlap detection, zone coverage, aesthetics, constraint validation, orphan detection, naming, componentization, conflicts, lighting quality, and scene organization. Returns a score (0-100) and detailed issue list.
Boundary: Disambiguated from scene_validate (narrow rule-based spatial constraint checking) and scene_aesthetics (in-depth 5-dimension aesthetic theory scoring).
Use this after any major scene modification to verify quality.
| Name | Required | Description | Default |
|---|---|---|---|
| checks | No | Comma-separated check names or "all". Options: spatial, overlaps, zones, aesthetics, constraints, orphans, naming, components, conflicts, lighting, organization | all |
| format | No | Output format - "json" or "cos". | json |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so the safety profile is covered. The description adds real value beyond that: the full breadth of the eleven checks and the 0-100 score plus detailed issue list, which tells the agent this is an aggregate audit rather than a single check. It stops short of disclosing cost/runtime, which matters for a tool that runs eleven passes, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope statement and result shape are front-loaded, and the boundary paragraph earns its space by doing the sibling disambiguation work. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't spell out return fields, and it correctly limits itself to noting the score-plus-issues shape. The only gap is the absence of any hint about execution cost or latency for a full eleven-check audit, which would help an agent decide between this and the narrower scene_validate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the checks enum options are already documented per-parameter, so the baseline is 3. The description restates the check names (spatial, overlaps, zones, etc.) but adds no syntax, precedence, or cost implications for subsetting checks, and says nothing about the format parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (audit/review) and resource (scene) and enumerates all eleven check dimensions it runs, plus the score range it returns. The boundary paragraph explicitly separates it from scene_validate and scene_aesthetics, so the agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ("after any major scene modification to verify quality") and names the two nearest alternatives with the precise scope each covers. Both when-to-use and when-not-when-to-use are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_rollbackScene RollbackA
Open a checkpoint and rebind the scene to its original path (S2).
Before opening, the current in-memory state is exported to an auto_before_rollback safety snapshot; if that fails, the rollback aborts — pass discard_current_state=True to escape (the result reports safety_snapshot="skipped_by_user"). Untitled scenes and ad-hoc snapshots have no original path, so the scene stays on the checkpoint path (S1) and scene_rebound_to is null.
The snapshot carries no undo history — call scene_snapshot afterwards to rebuild context.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Checkpoint filename from scene_checkpoint_list (cp_*.ma or prev_*.ma). | |
| session_key | No | Maya session key. | |
| discard_current_state | No | Escape hatch — proceed even if the safety snapshot fails. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile; the description supplies the failure model (aborts if the auto_before_rollback export fails), the escape hatch and its reported result value (safety_snapshot="skipped_by_user"), the null scene_rebound_to case, and the loss of undo history. That is exactly the beyond-annotations context this dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, then behavior, failure mode, and follow-up in a tight four-sentence block with no filler. The S1/S2 labels are unexplained internal jargon that costs a little clarity for no gain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-mutating tool with full schema coverage and an output schema, the description covers everything an agent still needs: failure/abort behavior, the escape hatch, edge-case scene states, and the required follow-up call. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description genuinely deepens discard_current_state ('pass ... to escape', with the resulting safety_snapshot value) and explains the untitled-scene implication for filename/rebinding. It stops short of adding format detail for session_key.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific compound action (open a checkpoint and rebind the scene) with a resource, which is immediately distinguishable from siblings like scene_checkpoint (creates) and scene_snapshot (captures). The two-outcome behavior (S2 vs S1) further pins down what the call does in the normal case versus untitled scenes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete conditions: pass discard_current_state=True when the safety snapshot fails, and call scene_snapshot afterwards to rebuild undo context. Edge cases (untitled scenes, ad-hoc snapshots) are called out explicitly. It lacks an explicit statement of when to prefer this over scene_checkpoint/scene_snapshot beyond the follow-up pointer, so it falls just short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_snapshotScene SnapshotARead-onlyIdempotent
Get a complete spatial overview of the current Maya scene.
Returns a structured description of ALL objects with positions, sizes, and types. Call this once at the start of each workflow to establish spatial awareness.
Boundary: Disambiguated from scene_inspect (deep-dive inspection of specific objects or zones) and scene_nodes (granular DAG/DG node name discovery with pagination).
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Detail level - "compact" (fast), "standard" (+materials/mesh stats), "full" (+vertices). | compact |
| format | No | Output format - "cos" (Chain-of-Symbol, compact), "json" (full JSON). | cos |
| session_key | No | Maya session key (auto-selected if only one session). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds scope ('ALL objects') and a workflow-placement rule, which is useful context, but it does not disclose anything about result size, latency, or behavior on empty scenes beyond what annotations and the output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded components: purpose, return shape, then boundary. Every sentence earns its place, and the disambiguation is placed last where it doesn't obstruct the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, clear annotations, and zero required parameters, the description supplies everything an agent needs — what it returns, when to call it, and how it differs from siblings. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — detail levels, format options, and the session_key fallback are all documented inline in the schema. The description adds no parameter-level meaning beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a complete spatial overview of the current Maya scene') and immediately defines the payload ('structured description of ALL objects with positions, sizes, and types'). The Boundary paragraph explicitly distinguishes it from scene_inspect and scene_nodes, so an agent can route without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit timing guidance ('Call this once at the start of each workflow to establish spatial awareness') and names the two alternatives with the conditions that select them (deep-dive inspection vs granular node discovery with pagination). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_validateScene ValidateARead-onlyIdempotent
Validate scene against spatial constraints.
Checks the scene for constraint violations like minimum clearance, object limits, overlaps, and height requirements. This is a read-only check without auto_fix mutations (it cannot modify or repair objects; for automated fixes, see scene_plan with auto_fix=True). Because it is non-destructive, no undo rollback checkpoint is created. Requires an active Maya session.
Boundary: Disambiguated from scene_review (full scene quality audit across 11 checks) and scene_assert (verifies specific numeric values or object existence).
| Name | Required | Description | Default |
|---|---|---|---|
| rules | Yes | JSON string with constraint rules. Format: [{"type": "min_clearance", "zone": "entrance", "value": 180}, {"type": "max_objects", "value": 5000}, {"type": "no_overlap", "objects": ["wall_a", "shelf_b"]}, {"type": "min_height", "objects": ["door"], "value": 250}] Types: min_clearance, max_objects, no_overlap, min_height, max_height | |
| format | No | Output format - "cos" or "json". | cos |
| session_key | No | Maya session key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the description earns credit for adding behavior beyond them: no undo rollback checkpoint is created and an active Maya session is required. It does restate 'read-only' which the annotations already cover, slightly reducing the marginal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then scope, then boundary. Well organized, though the non-destructive/no-checkpoint sentence overlaps with the annotation hints and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation. The description covers what is checked, side-effect behavior, session prerequisite, and sibling boundaries — everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema documents rules format, supported constraint types, format enum values, and session_key. The description adds no parameter-level detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (scene) plus the scope of checks (clearance, object limits, overlaps, height). It explicitly disambiguates from scene_review and scene_assert, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: use this for constraint checks, use scene_plan with auto_fix=True for automated fixes, and the Boundary section names scene_review and scene_assert as the alternatives with their distinct roles. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_viewport_snapshotScene Viewport SnapshotARead-onlyIdempotent
Capture the active viewport as an image (WYSIWYG).
GUI sessions only - headless (mayapy/batch/native-channel) sessions get a structured gui_session_required error.
The capture is what the artist sees: viewport HUD, selection highlights and ornaments included. That is a feature - the agent verifies exactly what the user is looking at. A cmds.refresh(force=True) runs first so the frame is current.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | "jpeg" (default, small) or "png". png recommended for wireframe/line-art review. | jpeg |
| quality | No | JPEG quality 1-100 (ignored for png). | |
| max_size | No | Longest-side pixel cap for the returned image (default 800 - keeps base64 well under client image token limits). | |
| session_key | No | Maya session key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (read-only, idempotent, non-destructive), so the bar is lower, yet the description adds real context: the GUI-only constraint, the specific error surfaced in headless mode, and the forced refresh that guarantees a current frame. It stops short of describing the return envelope, but the WYSIWYG/HUD caveat is a genuinely useful behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action in the first line, then qualifies with the GUI constraint. The 'That is a feature' sentence is slightly editorial but earns its place by preempting an agent wondering why HUD/ornaments appear in the shot.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, zero-required capture tool with full schema coverage and no output schema, the description covers the key operating constraint and the composition of the returned image. It is close to complete; only the return/pagination envelope and sibling routing are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so format, quality and max_size are already fully documented with defaults and trade-offs. The description adds nothing about parameters, which is the correct baseline-3 outcome when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (capture the active viewport as an image) with a clear WYSIWYG qualifier. It does not differentiate itself from close siblings like scene_snapshot or scene_render_preview, leaving the agent to infer which capture tool fits which case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names a definite when-not condition: GUI sessions only, with headless sessions returning a gui_session_required error. It does not name an alternative for clean/render captures (e.g. scene_render_preview), so routing among the snapshot siblings is still left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_moduleWrite ModuleADestructive
Create a virtual in-memory Python module in an active Maya session.
Injects reusable Python functions into the target Maya session's sys.modules. Modules are virtual and in-memory: they do not persist across Maya restarts, and existing modules are protected unless overwrite=True is explicitly set. Requires an active Maya session.
Boundary: Use write_module to define reusable libraries and helper functions; use execute_code for one-shot imperative execution or expression evaluation.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python source code for the module. | |
| name | Yes | Module name. Can be a dotted path (e.g., 'mypackage.utils') in which case parent packages are created automatically. | |
| overwrite | No | If True, overwrite and replace existing module. If False, raise error if module already exists. | |
| session_key | No | Maya session key (optional if only one active session exists). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive=true and idempotent=false, but the description adds substantial context beyond them: modules are in-memory and do not persist across restarts, existing modules are protected unless overwrite=True, and injection targets sys.modules. This is exactly the kind of non-obvious behavior an agent needs before a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with the core action first, then constraints, then a boundary statement. Slight redundancy between 'in-memory' in the opening sentence and 'virtual and in-memory' in the third, but overall tight and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive session-scoped write tool, the description covers persistence, overwrite protection, auth/session requirement, and sibling routing, and an output schema exists so return values need not be explained. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including overwrite semantics and dotted-path names) are already documented. The description restates overwrite behavior but adds no new syntax or format detail beyond the schema, which is the correct baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Create a virtual in-memory Python module' and clarifies it injects functions into sys.modules. The boundary paragraph explicitly distinguishes it from execute_code, so an agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('define reusable libraries and helper functions') vs alternative ('execute_code for one-shot imperative execution or expression evaluation'). Also states the prerequisite of an active Maya session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.6.0- Changed
camera_orbit2 fields changed- changed
Input schema / properties / center / descriptionPrevious value: -"JSON string with center position [x, y, z]."New value: +"Orbit center as a JSON string \"[x, y, z]\"." - changed
Input schema / properties / frames / descriptionPrevious value: -"Number of frames for full orbit."New value: +"Number of frames for one full orbit."
- Changed
scene_measure1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"Measurement type:\n- \"center\": Center-to-center distance (default)\n- \"surface\": Closest surface point distance\n- \"clearance\": Gap/clearance distance\n- \"bbox\": Bounding box overlap detection"New value: +"What the returned number means — see the list above."
2 tool updates
v0.5.0- Changed
execute_code3 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"Python code to execute."New value: +"Python or MEL code to execute in Maya." - changed
Input schema / properties / result_type / descriptionPrevious value: -"How to handle the result:\n- \"NONE\": Execute statements, don't capture result\n- \"JSON\": Evaluate expression, JSON encode result\n- \"RAW\": Evaluate expression, return string representation"New value: +"Return envelope handling for the execution result:\n- \"NONE\": Execute statements, don't capture result (returns None)\n- \"JSON\": Evaluate expression, JSON-encode result\n- \"RAW\": Evaluate expression, return string representation" - changed
Input schema / properties / session_key / descriptionPrevious value: -"Session key (optional if only one session exists)"New value: +"Maya session key (optional if only one session exists)."
- Changed
write_module2 fields changed- changed
Input schema / properties / overwrite / descriptionPrevious value: -"If True, replace existing module. If False, raise error\n if module already exists."New value: +"If True, overwrite and replace existing module. If False,\n raise error if module already exists." - changed
Input schema / properties / session_key / descriptionPrevious value: -"Session key (optional if only one session exists)"New value: +"Maya session key (optional if only one active session exists)."
25 tool updates
v0.4.1- First observed
add_session - First observed
asset_import - First observed
asset_search - First observed
camera_create - First observed
camera_orbit - First observed
execute_code - First observed
list_sessions - First observed
maya_setup_guide - First observed
scene_aesthetics - First observed
scene_assert - First observed
scene_checkpoint - First observed
scene_checkpoint_list - First observed
scene_describe - First observed
scene_export - First observed
scene_inspect - First observed
scene_measure - First observed
scene_nodes - First observed
scene_plan - First observed
scene_render_preview - First observed
scene_review - First observed
scene_rollback - First observed
scene_snapshot - First observed
scene_validate - First observed
scene_viewport_snapshot - First observed
write_module
TDQS
Scored across 25 tools
The server provides explicit Boundary sections disambiguating overlapping scene tools, and most tools have clearly distinct purposes. However, the large cluster of scene_* analysis and validation tools (validate, review, plan, assert, aesthetics) could still cause misselection without careful reading.
All names use snake_case, but the convention is mixed: some use a domain prefix (scene_*, camera_*, asset_*), while others are bare verb_noun (list_sessions, write_module, execute_code). This is readable and mostly consistent, with minor deviations.
25 tools is heavy for a single server, even a complex Maya integration. While each tool appears purposeful, the count sits at the upper end of the borderline-heavy range and increases cognitive load.
The surface covers scene inspection, validation, checkpoints, camera, assets, export, rendering, sessions, and code execution. Minor gaps like explicit object creation/deletion or material editing are workable via execute_code, but not dedicated tools.
Maintenance
Related MCP Connectors
- OwlCADOAuthcom.owlcad
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Build and run visual creative-production workflows from your AI agent.
Blender-as-a-service for agents: search 3D assets, run Blender Python, or brief the studio agent.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to programmatically control Autodesk Maya via natural language using over 30 tools for 3D modeling, lighting, and animation. It connects through Maya's command port to facilitate procedural scene generation and complex production-ready workflows.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI-assisted 3D modeling and scene control in Autodesk Maya through natural language commands, supporting object creation, transformation, material application, and more.14 npm8MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control Autodesk Maya through natural language for scene creation, modeling, material assignment, and object manipulation.1MIT
- AlicenseBqualityBmaintenanceEnables AI agents to drive Autodesk Maya through semantic tools covering scene, object, material, animation, and rendering operations, paired with execute_python/execute_mel escape hatches and read-only resources. Also supports multi-instance routing, viewport capture for visual iteration, and asynchronous render job polling.221MIT