Skip to main content
Glama

English | 简体中文

mcp-for-maya

MCP server giving AI agents spatial awareness of Autodesk Maya scenes

CI PyPI License: MIT Python

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.

WARNING

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

write_module → t20_movement.build() — "parametric involute gear train caliber: true involute teeth, Geneva-striped plates, blue-steel screws, ruby jewels, spiral hairspring"

write_module → t20_bonsai.build() — "low-poly L-system bonsai: recursive branching, faceted foliage pads, pot + moss + stones"

asset_import("vintage_pocket_watch") + asset_import("metal_tool_chest") → t20_workbench.build() — "horologist's workbench: imported assets with textures wired, procedural involute spares"

write_module → t20_street.build() — "low-poly corner block: 11 parametric buildings, gable roofs, awnings, street furniture, parked vans"

write_module → t20_teapot.build() — "Utah teapot recreation: revolve-profile body, Bezier tapered spout, ear handle, checkered floor"

scene_review() on a bench littered with junk → scene_plan(auto_fix=True) + cleanup → scene_review() again — score 53.7 → 64.2

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

scene_snapshot scene_inspect scene_measure

One-call full-scene spatial model; precise distance/overlap/gap measurement

🎨 Aesthetic analysis

scene_aesthetics

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

camera_create camera_orbit

8 industry-standard shot types + orbit animation

🛡️ Disaster recovery

scene_checkpoint scene_rollback scene_checkpoint_list

exportAll in-memory snapshots; rollback explicitly rebinds the original path

🧠 Scene planning

scene_plan

Organization health, zone balance, layout suggestions, conflict prevention, natural-language planning

📋 Engineering audit

scene_review scene_validate scene_assert

11 deterministic checks (0-100 score) + custom constraint validation + state assertions

⚡ Code execution

execute_code write_module

Run arbitrary Python in Maya / inject reusable modules

👁️ Visual loop

scene_viewport_snapshot scene_render_preview

WYSIWYG viewport capture + single-frame playblast preview (GUI sessions only)

🔌 Session management

list_sessions add_session maya_setup_guide

Multi-session discovery/attach + connection diagnosis/install/fallback guidance

📦 Asset library

asset_search asset_import

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, GRP_asset_<id> dedup

📤 Scene export

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

scene_describe scene_nodes

API-level node self-description (exact type, per-attribute metadata: keyable/connectable/enum/ranges, connection wiring — size-bounded, *_truncated disclosure, limit up to 1000) + bounded enumeration incl. non-DAG nodes (materials/tool nodes) with has_more/next_cursor pagination

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 .
NOTE

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

With the MCP server running, the agent calls maya_setup_guide to walk the connection:

  1. Make sure Maya is running

  2. Give the agent any instruction (e.g. "look at my Maya scene")

  3. If unconnected, the agent runs diagnostics and can install userSetup.py (idempotent marker-block merge, timestamped backup before writing)

  4. 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

%MAYA_APP_DIR%\<version>\scripts\

Linux

~/maya/<version>/scripts/

macOS

~/Library/Preferences/Autodesk/maya/<version>/scripts/

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

:7001 python

primary

Instance B

:7002 python

second instance

Instance A

:7011 mel

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

list_sessions returns empty

call maya_setup_guide(action="diagnose")

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 commandPort (same port = bind conflict); if scanning still misses it, call add_session(host, port)

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 MAYA_MCP_EXCLUDE_PORTS

3. Configure the MCP client

Codex ~/.codex/config.toml:

[mcp_servers.maya]
command = "uvx"
args = ["mcp-for-maya"]
tool_timeout_sec = 120

For 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   │
└──────────┘     └──────────┘     └──────────┘     └──────────┘
  1. INSPECT: scene_snapshot() for full-scene spatial data

  2. COMPUTE: plan positions, sizes, clearances from that data

  3. EXECUTE: execute_code() applies Maya Python

  4. VERIFY: 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 assumed

Assets (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 size

CoS 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.5

Agent Skills

Two Experimental process cards ship in skills/:

Skill

Purpose

skills/icev-workflow

ICEV discipline: every scene mutation goes through Inspect→Compute→Execute→Verify

skills/scene-review-playbook

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 in polyhaven.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_rollback give 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, or MAYA_MCP_DISABLE_ARBITRARY=1 (all three) to remove the escape-hatch tools from tools/list and deny the call with [policy_disabled]. Read-only tools are unaffected. These are misuse guardrails, not a hostile-agent boundary — an agent that still holds execute_code is 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/Stable classifier 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 (requires-python); Windows / Linux / macOS

Injected helper (runs inside Maya)

Maya >= 2023 (bundled Python >= 3.9; relies on ast.unparse — older versions get an explicit refusal at injection)

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 tools
add_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.

NameRequiredDescriptionDefault
hostNoThe session host (default: "127.0.0.1")127.0.0.1
portNoThe session port number (default: 7001)

Output Schema

NameRequiredDescription
pidYes
hostYes
portYes
userYes
scene_nameNo
scene_pathNo
session_keyYes
maya_versionNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 ImportA
Idempotent

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).

NameRequiredDescriptionDefault
forceNoRe-import even when GRP_asset_<id> already exists.
asset_idYesPoly Haven asset id (case-sensitive, e.g. 'Camera_01').
resolutionNoTexture tier '1k' (default), '2k', '4k', '8k'.1k
session_keyNoMaya session key.
max_polycountNoFace-count guard (default 100000); imports over the limit are deleted and rejected.
allow_high_polycountNoOverride the polycount guard (the override is disclosed in the audit log).

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

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.

NameRequiredDescriptionDefault
nameNoCamera name.CAM_shot
targetYesTarget object name to look at.
azimuthNoHorizontal angle in degrees (default 30).
elevationNoVertical angle in degrees (default 15).
shot_typeNoShot type (default "medium").medium
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

NameRequiredDescriptionDefault
nameNoCamera name.CAM_orbit
centerYesOrbit center as a JSON string "[x, y, z]".
framesNoNumber of frames for one full orbit.
radiusNoOrbit radius in scene units.
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 CodeA
Destructive

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).

NameRequiredDescriptionDefault
codeYesPython or MEL code to execute in Maya.
result_typeNoReturn 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 representationNONE
session_keyNoMaya session key (optional if only one session exists).

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 SessionsA
Read-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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 GuideA
Destructive

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.

NameRequiredDescriptionDefault
portNoMaya command port number (default: 7001)
actionNoWhat 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.pydiagnose
confirmNoRequired to write into an existing userSetup.py that has no mcp-for-maya marker block (first install call is dry-run).
dry_runNoPreview the install: return the proposed block without writing anything.
target_versionNoSpecific Maya version (e.g., "2024"). If None, targets all detected versions.
remove_empty_fileNoOn uninstall, delete the file when it only contained the marker block.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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 AestheticsA
Read-onlyIdempotent

Professional-grade aesthetic analysis with 5 design dimensions.

Analyzes scene aesthetics across 5 professional design dimensions:

  1. Color Theory: 60-30-10 rule, temperature balance, harmony type, saturation variety, contrast

  2. Spatial Composition: golden ratio proportions, rule-of-thirds alignment, visual weight balance

  3. Proportion & Scale: human ergonomic reference, size hierarchy (hero/secondary/tertiary)

  4. Lighting Quality: layer composition (key/fill/rim/accent), color temperature consistency

  5. 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).

NameRequiredDescriptionDefault
formatNoOutput format - "json" (default) or "cos" (chain-of-symbol, token-efficient).json
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 AssertA
Read-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).

NameRequiredDescriptionDefault
formatNoOutput format - "cos" or "json".cos
session_keyNoMaya session key.
expectationsYesJSON 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

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
nameNoCheckpoint name (^[A-Za-z0-9_-]+$). Required on untitled scenes.
overwriteNoReplace a same-name checkpoint, preserving the old file.
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ListA
Read-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).

NameRequiredDescriptionDefault
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 DescribeA
Read-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.

NameRequiredDescriptionDefault
nodeYesNode name (short name or long DAG path).
attrsNoAttribute 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).
limitNoMax 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_keyNoMaya session key (auto-selected if one session).
include_valuesNoAlso 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_connectionsNoReturn 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

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
pathYesTarget file path on the Maya host. Normalized and auto-parented (missing directories are created). An existing file is rejected unless overwrite=True.
formatNo"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.
objectsNoNode 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.
overwriteNoReplace an existing target file (default False).
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 InspectA
Read-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).

NameRequiredDescriptionDefault
formatNoOutput format - "cos" or "json".cos
targetYesObject name or zone name to inspect.
session_keyNoMaya session key.
include_neighborsNoWhether to include nearby objects (default True).

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 MeasureA
Read-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).

NameRequiredDescriptionDefault
modeNoWhat the returned number means — see the list above.center
obj_aYesFirst object name.
obj_bYesSecond object name.
formatNoOutput format - "cos" or "json".cos
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 NodesA
Read-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).

NameRequiredDescriptionDefault
typeNoNode 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.
limitNoPage size (default 50, hard-capped at 100).
cursorNoOpaque page token from a previous call's next_cursor; valid while the scene is unchanged.
patternNoMaya glob pattern on names (e.g. "GEO_*").
dag_onlyNoOnly DAG nodes (transforms/shapes); False includes dependency nodes such as materials and utility nodes.
inheritedNoSee type.
session_keyNoMaya session key (auto-selected if one session).
include_type_countsNoAlso return per-type counts over the full match set (not just the page).

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

NameRequiredDescriptionDefault
formatNoOutput format - "json" (default) or "cos".json
auto_fixNoIf True, auto-fix safe issues (remove empty groups, reparent orphans).
objectiveNoNatural language goal description. e.g., "set up entrance area with display window and clear circulation"
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 PreviewA
Read-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):

  1. Switching the panel camera via the modelPanel camera flag is instantaneous, visible, and NOT undoable in Maya.

  2. Net-zero side effect: the panel camera is restored on every path - success or failure - so terminal state equals entry.

  3. The current time may visibly jump during capture; it is restored afterwards (playblast timeline quirk).

  4. viewer=False: no playblast window pops up.

  5. On failure the restore is still attempted; a failed restore is logged, never raised over the error result.

  6. Only a killed Maya process can skip the restore.

NameRequiredDescriptionDefault
widthNoFrame 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.
cameraNoCamera to look through (default: the panel's current camera).
formatNo"jpeg" (default) or "png". png recommended for wireframe/line-art review.jpeg
heightNoFrame height (default 360). Same /4 rule.
qualityNoJPEG quality 1-100.
max_sizeNoLongest-side cap for the returned image.
session_keyNoMaya session key.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 ReviewA
Read-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.

NameRequiredDescriptionDefault
checksNoComma-separated check names or "all". Options: spatial, overlaps, zones, aesthetics, constraints, orphans, naming, components, conflicts, lighting, organizationall
formatNoOutput format - "json" or "cos".json
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
filenameYesCheckpoint filename from scene_checkpoint_list (cp_*.ma or prev_*.ma).
session_keyNoMaya session key.
discard_current_stateNoEscape hatch — proceed even if the safety snapshot fails.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 SnapshotA
Read-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).

NameRequiredDescriptionDefault
detailNoDetail level - "compact" (fast), "standard" (+materials/mesh stats), "full" (+vertices).compact
formatNoOutput format - "cos" (Chain-of-Symbol, compact), "json" (full JSON).cos
session_keyNoMaya session key (auto-selected if only one session).

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ValidateA
Read-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).

NameRequiredDescriptionDefault
rulesYesJSON 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
formatNoOutput format - "cos" or "json".cos
session_keyNoMaya session key.

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SnapshotA
Read-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.

NameRequiredDescriptionDefault
formatNo"jpeg" (default, small) or "png". png recommended for wireframe/line-art review.jpeg
qualityNoJPEG quality 1-100 (ignored for png).
max_sizeNoLongest-side pixel cap for the returned image (default 800 - keeps base64 well under client image token limits).
session_keyNoMaya session key.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 ModuleA
Destructive

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.

NameRequiredDescriptionDefault
codeYesPython source code for the module.
nameYesModule name. Can be a dotted path (e.g., 'mypackage.utils') in which case parent packages are created automatically.
overwriteNoIf True, overwrite and replace existing module. If False, raise error if module already exists.
session_keyNoMaya session key (optional if only one active session exists).

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updatesv0.6.0
    • Changedcamera_orbit2 fields changed
      • changedInput schema / properties / center / description
        Previous value: -"JSON string with center position [x, y, z]."New value: +"Orbit center as a JSON string \"[x, y, z]\"."
      • changedInput schema / properties / frames / description
        Previous value: -"Number of frames for full orbit."New value: +"Number of frames for one full orbit."
    • Changedscene_measure1 field changed
      • changedInput schema / properties / mode / description
        Previous 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. 2 tool updatesv0.5.0
    • Changedexecute_code3 fields changed
      • changedInput schema / properties / code / description
        Previous value: -"Python code to execute."New value: +"Python or MEL code to execute in Maya."
      • changedInput schema / properties / result_type / description
        Previous 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"
      • changedInput schema / properties / session_key / description
        Previous value: -"Session key (optional if only one session exists)"New value: +"Maya session key (optional if only one session exists)."
    • Changedwrite_module2 fields changed
      • changedInput schema / properties / overwrite / description
        Previous 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."
      • changedInput schema / properties / session_key / description
        Previous value: -"Session key (optional if only one session exists)"New value: +"Maya session key (optional if only one active session exists)."
  3. 25 tool updatesv0.4.1
    • First observedadd_session
    • First observedasset_import
    • First observedasset_search
    • First observedcamera_create
    • First observedcamera_orbit
    • First observedexecute_code
    • First observedlist_sessions
    • First observedmaya_setup_guide
    • First observedscene_aesthetics
    • First observedscene_assert
    • First observedscene_checkpoint
    • First observedscene_checkpoint_list
    • First observedscene_describe
    • First observedscene_export
    • First observedscene_inspect
    • First observedscene_measure
    • First observedscene_nodes
    • First observedscene_plan
    • First observedscene_render_preview
    • First observedscene_review
    • First observedscene_rollback
    • First observedscene_snapshot
    • First observedscene_validate
    • First observedscene_viewport_snapshot
    • First observedwrite_module

TDQS

A4/5.0

Scored across 25 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI-assisted 3D modeling and scene control in Autodesk Maya through natural language commands, supporting object creation, transformation, material application, and more.
    14 npm
    8
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to control Autodesk Maya through natural language for scene creation, modeling, material assignment, and object manipulation.
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables 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.
    22
    1
    MIT