mcp-for-maya
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PYTHONPATH | No | Only needed when running from a source checkout with `python -m maya_mcp_server`; point it at `<repo>/src`. | |
| MAYA_MCP_EXCLUDE_PORTS | No | Excludes specific ports from the auto-scan probe set, e.g. a port occupied by a non-Maya TCP service. | |
| MAYA_MCP_INCLUDE_PORTS | No | Binds the auto-scan probe set to a specific list of Maya command ports, e.g. `7001,7002`. Comma-separated, ranges like `7005-7010` are allowed. | |
| MAYA_MCP_VP2_BOTTOM_UP | No | Forces the VP2 readback direction when a driver misreports it (`0` or `1`). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scene_snapshotA | 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. |
| scene_inspectB | Deep inspection of a specific object or zone. Returns detailed properties including transform, BBox, material, mesh stats, and optionally nearby objects with distances. |
| scene_measureB | Measure spatial relationship between two objects. |
| scene_assertA | 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. |
| scene_validateB | Validate scene against spatial constraints. Checks the scene for constraint violations like minimum clearance, object limits, overlaps, and height requirements. |
| scene_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. |
| scene_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. |
| scene_checkpoint_listA | 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). |
| camera_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. |
| camera_orbitC | Create a camera that orbits around a point with animation. |
| scene_aestheticsB | Professional-grade aesthetic analysis with 5 design dimensions. Analyzes scene aesthetics across 5 professional design dimensions:
Returns an overall score (0-100) with grade (S/A/B/C/D/F) and improvement suggestions. |
| scene_reviewA | 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. |
| scene_planA | Holistic scene planning with organization validation and layout optimization. Performs comprehensive scene health check and generates actionable plans:
Based on blockout-first methodology: validate organization and proportions before committing to detailed modeling. Supports natural language objectives. |
| scene_viewport_snapshotA | 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. |
| scene_render_previewA | 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):
|
| asset_searchA | Search the Poly Haven CC0 asset index (host-side, no Maya needed). Queries https://api.polyhaven.com/assets and returns matching asset metadata. Read-only and idempotent - pure lookup. |
| asset_importA | 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). |
| scene_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. |
| scene_describeA | 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. |
| scene_nodesA | 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. |
| list_sessionsA | List all active Maya sessions. Returns a list of session information including:
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. |
| maya_setup_guideA | 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. |
| write_moduleB | Create a virtual Python module in a Maya session. |
| execute_codeC | Execute Python code in a Maya session. |
| add_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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 25 tools
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.
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.
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.
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.