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

  • 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 (all-green required).

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.

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

Output Schema

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

ParametersJSON Schema
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

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

ParametersJSON Schema
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

ParametersJSON 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 OrbitC

Create a camera that orbits around a point with animation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCamera name.CAM_orbit
centerYesJSON string with center position [x, y, z].
framesNoNumber of frames for full orbit.
radiusNoOrbit radius in scene units.
session_keyNoMaya session key.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing behavioral — notably it does not warn that repeated calls create additional cameras (non-idempotent) or describe the resulting animated camera's state.

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?

A single tight sentence with no wasted words, front-loading the action and the key differentiator (orbiting with animation). Slightly under-specified rather than bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 annotations cover the safety profile. However, for a non-idempotent creation tool with five parameters, the description should at least state prerequisites or the effect of repeated invocation, which it omits.

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 five parameters (name, center, frames, radius, session_key) are already documented in the schema. The description adds no syntax, units, or constraint detail beyond that baseline.

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, with the distinguishing qualifier that it orbits a point with animation. This separates it reasonably well from the sibling camera_create, but it never names that sibling or clarifies the boundary explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as camera_create. An agent must infer from the name alone when an orbiting camera is preferable to a static one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_codeExecute CodeC
Destructive

Execute Python code in a Maya session.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesPython code to execute.
result_typeNoHow to handle the result: - "NONE": Execute statements, don't capture result - "JSON": Evaluate expression, JSON encode result - "RAW": Evaluate expression, return string representationNONE
session_keyNoSession key (optional if only one session exists)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety profile is conveyed structurally. The description adds nothing beyond that – it does not warn that arbitrary code runs with full privileges in a live session, that effects are irreversible, or how result handling works.

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?

A single short sentence with no filler, and the core action is front-loaded. It is efficient, though arguably terse to the point of under-specification for a destructive tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent tool with no output schema, the description should explain that return values depend on result_type and that the code mutates live scene state. None of this is covered, leaving significant gaps for safe invocation.

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 all three parameters including the result_type enum-like modes are fully documented in the schema. The one-line description adds no parameter meaning beyond that, which is the baseline 3 case.

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 (Execute) and resource (Python code) plus the execution context (a Maya session). It is clear what the tool does, but it does not distinguish itself from siblings like write_module, which also implies code authoring/execution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no mention of alternatives such as the higher-level scene_* inspection tools. The agent must infer that this is the escape hatch for arbitrary operations.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

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

ParametersJSON Schema
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

ParametersJSON 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 AestheticsB
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.

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

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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 only the output shape (0-100 score, S/A/B/C/D/F grade, suggestions), which is redundant given the output schema exists, and says nothing about cost, latency, or session requirements.

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 claim and then a clean numbered breakdown of dimensions. Slightly wasteful: the opening line and the second line restate the same '5 dimensions' claim, which could be merged.

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 return values need not be described, and the dimension list plus annotations give an agent enough to call it. The only real gap is the absence of routing guidance against sibling analysis tools.

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 fully documented in the schema. The description adds no parameter meaning beyond that, which is the correct baseline when the schema does the work.

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 (analyzes) and resource (scene aesthetics) and enumerates the five design dimensions, so an agent knows exactly what comes back. It does not, however, distinguish itself from plausible siblings like scene_review, scene_validate, or scene_measure, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to reach for this tool versus scene_review, scene_measure, or scene_validate. There is no context, prerequisite, or exclusion stated — only a statement of capability.

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.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds workflow timing and verification intent, but does not disclose failure semantics, auth needs, or other behavioral details 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action. There is minor redundancy between verify and confirm and the unexplained ICEV jargon, but no wasted padding.

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 3-parameter verification tool with rich annotations and an output schema, the description covers purpose, timing, and workflow role. It leaves sibling differentiation unstated, but is otherwise complete.

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 expectations parameter format and supported properties are fully documented in the schema. The description adds no additional parameter meaning, so baseline 3 is appropriate.

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?

Names a specific action and resource: verifying scene state against expected values. It does not distinguish itself from siblings like scene_validate or scene_inspect, so it stops short of a 5.

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?

Explicitly says to use this after modifications to confirm the desired state, and ties it to the VERIFY step of the ICEV workflow. It provides clear context but names no alternatives or when-not-to-use conditions.

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.

ParametersJSON Schema
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

ParametersJSON 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 /checkpoints; untitled scenes list the workspace ad-hoc snapshots (adhoc flag per entry).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_keyNoMaya session key.

Output Schema

ParametersJSON 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_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.

ParametersJSON Schema
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

ParametersJSON 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=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the non-spatial/API-level framing, but does not add behavioral details beyond the annotations and schema, such as truncation or attr_not_found abort behavior, which appear only 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences/paragraphs, front-loaded with the core capability and immediately followed by the sibling boundary and intended use. There is no wasted text.

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 the rich 100%-covered schema and the presence of an output schema, the description is complete enough: it explains the tool's conceptual output (node type, per-attribute metadata, connection wiring), its scope, and its boundary against scene_inspect. Return-value details are appropriately left to the output 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 documents all six parameters thoroughly, including defaults, budgets, and abort behavior. The description adds no additional parameter meaning beyond what the schema provides, so the baseline of 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 capability: API-level self-description of ONE node, explicitly marked as not spatial. It distinguishes the tool from its closest sibling by contrasting scene_inspect's WHERE with scene_describe's WHAT.

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 gives an explicit boundary against scene_inspect and states the intended downstream use: composing accurate execute_code/setAttr/connectAttr calls against real names. This is exactly the when-to-use guidance an agent needs to choose between scene_describe and other scene-inspection tools.

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.

ParametersJSON Schema
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

ParametersJSON 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 InspectB
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.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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 some behavioral context by enumerating what is returned (transform, BBox, material, mesh stats, neighbors), but that overlaps with the existing output schema, so net added value is modest.

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, front-loaded with purpose and followed by return contents; no filler. The return-value sentence is somewhat redundant given the output schema, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full schema coverage and an output schema, the definition covers the essentials. It is nonetheless incomplete on the one thing structured fields cannot supply: how it differs from sibling inspection tools such as scene_describe.

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% with 4 well-documented parameters, so the baseline is 3. The description only loosely echoes 'target' (object or zone) and 'include_neighbors' (nearby objects with distances) without adding syntax, format, or semantics beyond 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+resource: 'Deep inspection of a specific object or zone', and scopes it as deep/detailed versus superficial. However, it does not distinguish itself from close siblings like scene_describe, scene_nodes, or scene_measure, leaving the agent to guess which inspection tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named despite a crowded sibling set (scene_describe, scene_nodes, scene_measure, scene_assert). Usage is only implied by the phrase 'specific object or zone'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_measureScene MeasureB
Read-onlyIdempotent

Measure spatial relationship between two objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoMeasurement type: - "center": Center-to-center distance (default) - "surface": Closest surface point distance - "clearance": Gap/clearance distance - "bbox": Bounding box overlap detectioncenter
obj_aYesFirst object name.
obj_bYesSecond object name.
formatNoOutput format - "cos" or "json".cos
session_keyNoMaya session key.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no extra behavioral context such as session requirements, error behavior, or whether it mutates any state. It neither contradicts nor enriches what the annotations 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?

A single, front-loaded sentence with no wasted words. It immediately conveys the core purpose without filler. Brevity is appropriate for the core description, as structured fields handle details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, multiple measurement modes) and the rich structured data (100% schema coverage, output schema present), the description is minimally adequate. It does not mention the available modes or the distinction from siblings, leaving the agent to rely entirely on schema and annotations.

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%, with all five parameters fully documented in the input schema (including mode options and format). The description adds no parameter meaning beyond what is already in the schema, so the baseline of 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?

The description states a specific verb and resource: 'Measure spatial relationship between two objects.' This is clear and avoids tautology. However, it does not differentiate this tool from siblings like scene_inspect or scene_assert, which could also involve scene analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. The description simply defines the function and does not mention any conditions, prerequisites, or exclusions. An agent must infer usage from the name and schema alone.

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.

ParametersJSON Schema
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

ParametersJSON 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 cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the disclosure that results are bounded and that has_more/next_cursor signal a truncated list. That is genuine pagination behavior an agent needs. It does not, however, discuss session/auth prerequisites despite exposing session_key.

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 compact sentences, with the scope claim front-loaded ahead of the sibling contrast. The phrasing 'pages honestly' is a touch colloquial and the boundary paragraph carries mild abstraction, but nothing is wasted or 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?

With an output schema present, return values need no explanation, and all eight parameters are schema-documented. The description supplies the sibling boundary and pagination caveat, leaving it nearly complete for a read-only enumeration 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%, so all eight parameters (type inheritance, limit cap, cursor validity, glob pattern, dag_only) are already documented in the schema. The description adds no parameter-level detail beyond what the schema provides, 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 and resource ('bounded enumeration of scene nodes') and immediately narrows scope with 'including non-DAG nodes'. It explicitly distinguishes itself from scene_snapshot, 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the sibling alternative (scene_snapshot) and states the condition that selects each: snapshot is the once-per-workflow spatial overview, scene_nodes is the name-discovery complement that surfaces nodes a spatial view never shows. The routing decision is explicit rather than inferred.

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.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description frames the tool as analysis/planning, which aligns with the non-destructive hint, and it details the scope of what gets checked. It doesn't disclose that the auto_fix parameter can mutate the scene, leaving a gap the annotations don't fully cover.

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 opening sentence is front-loaded and the bullet list is scannable, with each bullet earning its place by naming a distinct capability. Slightly verbose, but the structure pays for the length.

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, and the description thoroughly covers what the tool analyzes and produces. The only real gap is the absence of routing guidance relative to the many sibling scene tools.

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 parameters (format, auto_fix, objective, session_key) are fully documented in the schema, setting the baseline at 3. The description only loosely echoes the objective parameter with 'Supports natural language objectives' and adds no new syntax or format detail.

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?

The description states a specific verb+resource ('scene planning') and enumerates concrete capabilities (organization validation, zone analysis, layout suggestions, conflict prevention, action plan). This distinguishes it from siblings like scene_validate and scene_inspect, though it doesn't explicitly name which sibling to prefer.

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?

It offers implied guidance via 'blockout-first methodology' and 'before committing to detailed modeling,' giving a sense of when in the workflow to use it. However, it never states when to choose this over scene_validate, scene_review, or scene_aesthetics, nor any exclusions.

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.

ParametersJSON Schema
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.

Use this after any major scene modification to verify quality.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, non-destructive, idempotent, closed-world operation. The description adds useful behavioral context by enumerating the audit checks and stating that it returns a 0-100 score plus a detailed issue list. It does not add details about cost, latency, or failure modes, but those are not critical here.

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 description is front-loaded with the core purpose and followed by a compact list of checks, a return-value summary, and a usage recommendation. It is efficient overall, though the check list partly duplicates the schema's enum-like options.

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 annotations covering the safety profile and an output schema available, the description does not need to explain return formatting in depth. It provides enough context about scope, checks, output, and timing to invoke the tool correctly, but it could be stronger if it distinguished this tool from similar validation siblings.

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 input schema already documents the checks, format, and session_key parameters. The description lists the available check categories, which reinforces the checks parameter, but it does not add syntax or behavioral meaning beyond what the schema provides.

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?

The description states a clear verb and resource: a comprehensive scene audit that reviews spatial integrity, overlaps, zones, aesthetics, constraints, orphans, naming, components, conflicts, lighting, and organization. It clearly distinguishes itself as a broad quality review rather than a single-purpose check, though it does not explicitly differentiate from sibling tools such as scene_validate or scene_assert.

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 a clear usage context: 'Use this after any major scene modification to verify quality.' This tells the agent when to call it, but it does not state when not to use it or explicitly compare it with alternative validation tools like scene_validate or scene_assert.

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.

ParametersJSON Schema
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

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

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 safety is covered. The description adds genuinely useful context beyond them: it returns ALL objects with positions/sizes/types and should be called once per workflow, which tells the agent about output breadth and the cost of repeated calls.

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 sentences, front-loaded with the core verb+resource, then return contents, then invocation cadence. No filler or redundancy.

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 needn't enumerate return fields and it correctly gives breadth and cadence guidance instead. Only minor gaps remain, such as noting multi-session behavior when session_key is omitted.

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 all three parameters carry their own descriptions (detail levels, format options, session key auto-selection). The description adds no parameter syntax or format guidance, 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 and resource ('Get a complete spatial overview of the current Maya scene') and enumerates the returned content (positions, sizes, types). It is distinguishable in spirit from siblings like scene_nodes or scene_viewport_snapshot, but never names an alternative to sharpen the boundary.

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?

'Call this once at the start of each workflow to establish spatial awareness' gives a clear invocation context and frequency. It stops short of stating when not to use it or which sibling to prefer for narrower queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scene_validateScene ValidateB
Read-onlyIdempotent

Validate scene against spatial constraints.

Checks the scene for constraint violations like minimum clearance, object limits, overlaps, and height requirements.

ParametersJSON Schema
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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful context by enumerating the violation classes it detects (clearance, object limits, overlaps, height), but says nothing about how violations are reported or whether validation is non-blocking.

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 sentences, no waste, and the core action is front-loaded before the enumeration of checked conditions. Each sentence earns its place.

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?

Output schema exists, so return values need not be explained, and annotations cover the read-only/idempotent behavior. The description adequately frames a constraint-validation tool; the only real gap is routing guidance relative to sibling validators.

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 rules JSON format, the five rule types, the format enum, and the session_key are already fully documented in the schema. The description contributes no additional parameter semantics, which matches the baseline 3 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+resource ('Validate scene') and scopes it to spatial constraints, with concrete examples of what is checked. It does not differentiate itself from closely related siblings like scene_assert, scene_check, or scene_measure, so an agent cannot tell which validation-style tool to pick without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this tool versus scene_assert, scene_check, scene_measure, or scene_inspect, and no prerequisites or exclusions. Usage has to be inferred entirely from the name and the rule types listed.

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.

ParametersJSON Schema
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 ModuleB
Destructive

Create a virtual Python module in a Maya session.

ParametersJSON Schema
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, replace existing module. If False, raise error if module already exists.
session_keyNoSession key (optional if only one session exists)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds the useful 'virtual' qualifier, implying the module does not persist to disk, which is genuine context not in the annotations. It does not state what overwrite destroys or how the module interacts with the session lifecycle.

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?

A single, front-loaded sentence with no filler or redundancy. It is efficient, though arguably too terse for a destructive write tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 described, and annotations plus full schema coverage carry the mechanics. However, the description omits the execute_code boundary and any session prerequisite, which are the gaps an agent actually needs filled for this 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%, so name, code, overwrite, and session_key are fully documented in the schema including the dotted-path behavior and overwrite semantics. The description adds nothing beyond that, so the baseline 3 is correct.

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 clear verb+resource: 'Create a virtual Python module in a Maya session.' An agent understands it defines in-memory Python code inside a session. It does not differentiate itself from the nearby execute_code sibling, which is the most likely point of confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no comparison to execute_code, which is the obvious alternative for injecting Python into a session. The agent must infer the distinction from the name alone.

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

B3.4/5.0

Scored across 25 tools

Disambiguation3/5

The toolset has several scene-analysis operations that overlap conceptually: scene_snapshot, scene_inspect, scene_nodes, scene_describe, scene_validate, scene_assert, scene_review, scene_plan, and scene_aesthetics all inspect or evaluate the scene. Descriptions explicitly draw boundaries and use cases, which helps, but an agent still has many plausible choices for similar-sounding 'check/analyze scene' tasks.

Naming Consistency4/5

Most names follow a predictable snake_case domain_action or action_noun pattern, such as scene_inspect, camera_create, asset_import, and list_sessions. Minor deviations like maya_setup_guide and scene_snapshot are still readable, but the set is not perfectly uniform in verb/noun ordering.

Tool Count3/5

With 25 tools, the server sits at the heavy end of the acceptable range for a broad Maya integration. The breadth across scene editing, analysis, checkpoints, cameras, assets, rendering, and sessions justifies many tools, but several scene-analysis tools could likely be consolidated into fewer higher-level operations.

Completeness4/5

The surface covers core Maya workflows well: scene inspection/validation, checkpoints and rollback, camera creation, asset search/import, export, rendering previews, and session management. Explicit gaps like object deletion or scene open/save are largely workable through execute_code, so the toolset is broadly complete with minor rough edges.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to connect to and control Autodesk Maya for 3D modeling, animation, and rendering operations through the Model Context Protocol, supporting object creation, transformation, scene queries, and Python command execution.
    MIT
  • 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.
    23 npm
    7
    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