Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MAYA_HOSTNoMaya hostlocalhost
MAYA_PORTNoMaya Command Port8100
GPU_API_KEYNoVision3D API key
GPU_API_URLNoOptional suggested default for the Vision3D URL prompt. Never auto-selected.
SHAPE_TIMEOUTNoShape generation timeout (seconds)900
GPU_VERIFY_TLSNoVerify TLS certificates for https Vision3D targetstrue
MAYA_AUDIT_LOGNoOpt-in durable audit log of tool executions. Set to 1/true/yes/on to enable.
TEXTURE_TIMEOUTNoTexture generation timeout (seconds)600

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
maya_create_primitiveB

Create a 3D primitive in Maya (cube, sphere, cylinder, cone, plane, torus) with optional position, scale, and rotation.

maya_assign_materialA

Create a material (lambert, blinn, phong, aiStandardSurface) with RGB color and assign it to an object.

maya_transformB

Move, rotate, or scale an object in the Maya scene.

maya_create_lightB

Create a light in Maya (directional, point, spot, area, ambient) with configurable intensity and color.

maya_create_cameraC

Create a camera in Maya with configurable position, look-at point, and focal length.

maya_mesh_operationC

Execute mesh operations: extrude, bevel, boolean (union/difference/intersection), combine, separate, smooth.

maya_set_keyframeB

Create an animation keyframe on an object. Allows animating translate, rotate, scale, and visibility per frame.

maya_import_fileA

Import 3D files into Maya: OBJ, FBX, GLB/GLTF, Alembic ABC, Maya MA/MB, BVH mocap. With namespace, parent group, and scale options.

GLB/GLTF: uses Maya's native glTF scene parser (type='glTF Import'); if the parser is not registered or import fails, falls back to the Vision3D sibling pattern — mesh_uv.obj + texture_baked.png next to the GLB — building an aiStandardSurface with the texture in baseColor and assigning it to the imported meshes.

BVH: Maya has no native BVH import, so .bvh motion-capture files are parsed and rebuilt by the pure-Python maya_mcp.bvh_import module (hierarchy → joints, motion → keyframes, with the per-joint BVH→Maya rotate-order mapping handled internally). namespace and scale_factor are forwarded to the builder; the skeleton lands under a <namespace>:bvh_grp group. The result feeds a HumanIK retarget onto a rigged character (mocap → generic animation library).

maya_referenceA

Reference a file into the Maya scene and manage the reference lifecycle: create, list, replace (version swap), load, unload.

A reference keeps a live link to the source file; maya_import_file copies content in and breaks that link. Production scenes are assembled from references, so prefer this tool whenever the content has its own publish and may be re-versioned.

replace is the version-swap path: it repoints an existing reference node at a new file without disturbing the namespace or anything built on top of it. list returns every reference node with its file, namespace and loaded state — the reference_node the other operations require.

unload keeps the link and drops the content from memory; it is the reversible counterpart of load. Removing a reference outright is NOT offered here: it is destructive and the safety module requires explicit user confirmation for it.

maya_viewport_captureA

Capture the Maya viewport as PNG/JPG image and return it for visual analysis. Does not do Arnold render — it is an instant Viewport 2.0 grab (<1s); for a ray-traced still use maya_session(action='render_still'). Useful for visually verifying scene state, checking lighting, framing, and detecting issues.

NEVER captures the user's focused viewport: it playblasts a throw-away Viewport-2.0 window (its own modelPanel forced to rendererName='vp2Renderer'), so an Arnold IPR / render-override active on the user's panel can never be captured — which would saturate Maya's main thread and hang it (memory feedback_maya_gs_arnold_ipr_hang; same technique as review_turntable).

maya_sessionA

Manage Maya session, query scene state, and run utility commands.

Available actions:

• ping — Check connection to Maya, return version/scene/renderer. No params needed. • launch — Open Maya and wait for Command Port to respond. No params needed. • new_scene — Create a new empty scene. Refuses if the current scene has unsaved changes; pass {"confirm": true} to discard them. • save_scene — Save the current scene. No params needed. • list_scene — List objects in the scene. Optional params: {"object_type": "mesh", "name_filter": "sphere"} • scene_snapshot — Full scene state: file, modified flag, frame range, object counts by type, renderer, plugins, resolution. No params needed. • delete — Delete objects by name (wildcards supported). Required params: {"object_name": "sphere"} • execute_python — Run arbitrary Python in Maya. Assign result to 'result' variable. Required params: {"code": "import maya.cmds as cmds; ..."} Optional: {"timeout": 60} — seconds to wait for Maya (default 10, max 600); use for long operations, progress heartbeats stream every 10s while waiting. • shelf_button — Create a shelf button with Python code. Required params: {"label": "MyBtn", "command": "print('hello')"} Optional: {"tooltip": "...", "shelf_name": "Custom", "icon_label": "MCP"} • operation_history — Read recent durable-audit records (read-only; needs MAYA_AUDIT_LOG=1). Optional params: {"limit": 50, "tool": "maya_transform", "action": "execute_python", "status": "error"} • publish — Drive the native Toolkit publisher (tk-multi-publish2) inside an engine'd Maya (launched via 'tank'). params: {"mode": "preview"|"publish", "include": ["rig"], "exclude": ["render"], "comment": "...", "timeout": 600}. 'preview' returns the collected publish tree; 'publish' activates matching tasks then validate→publish→finalize. Dependencies are captured automatically by the publish plugins. • review_turntable — Deterministic Viewport-2.0 turntable playblast → .mov (RUNS IN MAYA, long op). Frames the model, orbits 360° over [start,end] at fps, 16:9 / square pixels / overscan, offScreen (never Arnold). Required params: {"out_path": "/path.mov"} (resolve via fpt tk_resolve_path template 'movie_asset_publish' with name= so the file is {Asset}{Task}v###.mov, e.g. DJ_Model_v001.mov — NOT 'turntable'). Optional: {"start":1,"end":100,"fps":25,"width":1920,"height":1080,"objects":[...],"focal":50,"timeout":600}. Returns the .mov plus the engine asset/task and a Version code {Asset}{Task} so the review Version is named after the task it was generated in. • render_still — Single-frame Arnold ray-traced still → a PNG at the exact out_path (long op). This is what "a still / render a still" means — a real Arnold render, NOT the VP2.0 grab of maya_viewport_capture (use that for a fast screenshot). Maya only EXPORTS the scene to a .ass; kick renders it out of process, so the review view transform actually applies (a Render View dump writes scene-linear and ignores colour management), no Render View window is opened, and the render can never hang Maya's main thread. Required params: {"out_path": "/review/….png"} (resolve via fpt tk_resolve_path so it lands in the review area with the pipeline name). Optional: {"camera":"persp","frame":42,"width":1920,"height":1080,"aa_samples":3,"view_transform":"…","timeout":600}. Returns JSON {rendered, size_kb, camera, frame, resolution, asset, task, version_code} or {error}. For a still "for review" the version_code ({Asset}{Task}) is what names the ShotGrid review Version — rendering alone does not put it in review; create the Version (fpt sg_create type=Version) + sg_upload the PNG afterwards.

maya_vision3dA

AI-powered 3D asset generation via Vision3D server (requires GPU with Hunyuan3D-2).

Server selection is fully per-session and runtime-only: the first action that needs a GPU call returns vision3d_url_required. The LLM must ask the user for the Vision3D URL in the chat and then call select_server with that URL. Nothing is persisted to disk — the URL lives only in process memory until the MCP server restarts.

After selection, jobs are non-blocking: start → poll → download.

Available actions:

• select_server — Set the Vision3D server URL for the rest of the session. Required params: {"url": "http://..."}. Accepts any valid http/https URL; ask the user first. • health — Check if the selected Vision3D server is running and what GPU/models are available. No params. • generate_image — Start 3D generation from a reference image. Required params: {"image_path": "/path/to/image.png", "output_subdir": "my_asset"} Optional: {"preset": "medium", "model": "turbo", "octree_resolution": 384, "num_inference_steps": 20, "target_faces": 50000} • generate_text — Start 3D generation from a text prompt. Required params: {"text_prompt": "a medieval sword", "output_subdir": "sword"} Optional: {"preset": "medium", "model": "turbo", "octree_resolution": 384, "num_inference_steps": 20, "target_faces": 50000} • texture — Texture an existing mesh using a reference image. Required params: {"output_subdir": "my_asset"} Optional: {"mesh_filename": "mesh.glb", "image_filename": "input.png"} • poll — Check job progress (call repeatedly while running). Required params: {"job_id": "uuid-from-generate"} • download — Download completed job results. Required params: {"job_id": "uuid", "output_subdir": "my_asset"} Optional: {"files": ["textured.glb", "mesh.glb"]}

maya_worldlabsA

Generate a World Labs (Marble) Gaussian-splat ENVIRONMENT from an image and load it into Maya for Arnold.

Pipeline — call the actions in order: generate → poll → download → convert → build. Credits are spent ONLY by generate with confirm=true. Call status on a work area to resume an interrupted run from disk without re-generating.

Actions:

• health — Check the WorldLabs API key + credit balance. No params. • generate — Start image→world generation. Required params: {"image": "/path.png" or "https://..."}. Optional: {"output_subdir": "world", "model": "marble-1.1"|"marble-1.1-plus", "display_name": ..., "text_prompt": ..., "confirm": true, "work_dir": "/work/worldlabs/"}. WITHOUT confirm=true it returns a cost-confirmation payload and spends NOTHING. Pass work_dir (the Toolkit work area, resolved via fpt-mcp tk_resolve_path) to write a resume sidecar so an interrupted run resumes without re-generating. • poll — Poll a generation (~5 min). Required params: {"operation_id": "..."}. • download — Download a finished world's assets to the work area. Required params: {"operation_id": "...", "dest_dir": "/work/worldlabs/"}. Optional: {"which": ["splats_full_res", "pano"]}. Updates the resume sidecar (world_id + downloaded paths). • convert — Convert the downloaded SPZ to PLY (Arnold-readable, via gsbox). Required params: {"spz_path": "/path.spz"}. Optional: {"ply_path": "/out.ply"}. • build — Load into Maya (RUNS IN MAYA): aiGaussianSplat + coloured point proxy + emission shader + eye-level centred camera, plus a fake-HDR panorama dome if given. Required params: {"ply_path": "/world.ply"}. Optional: {"pano_path": "/pano.png", "eye_height": 1.5, "proxy_step": 1, "relight": false, "draw_mode": 2, "focal": 15.0, "timeout": 300, "save_path": "/…/maya/scene.v001.ma"}. draw_mode: 2=Gaussian Splat (default, draws natively in VP2.0), 1=Point Cloud, 0=Bounding Box. focal: camera focal length in mm (default 15, wide for environments). save_path: when given (the Toolkit work-file path resolved via fpt-mcp tk_resolve_path on template maya_asset_work — Toolkit naming/versioning), the assembled scene is saved there so "open in Maya" lands the work file at the config-correct path with no manual Workfiles pick. • status — Report the resumable state of a work area (sidecar + on-disk .spz/.ply/.png). Required params: {"work_dir": "/work/worldlabs/"}. Returns where the pipeline left off (needs_generate / needs_download / needs_convert / ready_to_build).

search_maya_docsA

Search Maya API documentation using hybrid RAG (semantic + BM25).

Call this BEFORE writing complex Maya commands, using unfamiliar flags, or when unsure about command names, return values, or syntax. Returns the most relevant documentation chunks with relevance scores.

Covers: maya.cmds, PyMEL, Arnold/mtoa, Maya-USD, and common anti-patterns. Uses HyDE query expansion + Reciprocal Rank Fusion for high precision.

learn_patternA

Save a validated working pattern to the RAG knowledge base.

Call this after a successful operation when search_maya_docs returned low relevance (< 60%), indicating the pattern was not well-documented. The pattern will be available in future sessions.

Model trust gates: only Opus/Fable can write directly. Other models stage candidates for review.

session_statsA

Show session efficiency statistics: token usage, RAG savings, patterns learned.

Call at the end of multi-step tasks or when asked about efficiency. Shows how much context was saved by RAG vs loading full documentation.

reset_session_statsA

Zero the session stats counters immediately.

Use at the start of a new Claude session (or a fresh debugging run) when the idle-based auto-reset has not fired — for example when two sessions happen back-to-back. Returns a confirmation line with the new reset timestamp.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.4/5.0

Scored across 17 tools

Disambiguation3/5

Most tools target distinct operations, and the descriptions go out of their way to distinguish rendering paths (maya_viewport_capture vs maya_session render_still vs review_turntable) and import vs reference. However, maya_session is a god-tool bundling 13 actions (render, publish, turntable, delete, execute_python) that overlap conceptually with dedicated tools like maya_import_file and maya_viewport_capture, making boundaries hard to reason about.

Naming Consistency4/5

The core tools use a predictable maya_verb_noun snake_case pattern (maya_create_primitive, maya_assign_material, maya_transform). A few deviate with a noun-verb or no-prefix form (search_maya_docs, learn_pattern, session_stats, reset_session_stats), but all remain snake_case and readable.

Tool Count3/5

17 top-level tools is slightly above the comfortable range, but the real issue is that three of them (maya_session, maya_vision3d, maya_worldlabs) are multi-action mega-tools hiding ~27 additional actions, making the effective surface far larger than the count suggests.

Completeness4/5

Coverage of the DCC automation domain is broad: primitives, transforms, materials, lights, cameras, mesh ops, keyframes, import, references, rendering, publishing, docs search, and learning. Minor gaps exist (no standalone delete/update for objects beyond transform, no rigging/joint tools), but they are workable via maya_session(execute_python).

Maintenance

ActivityMaintained
ResponsivenessNo issues