Maya MCP
PYPI · MAYA-MCP · SCANNED SEP 20
Control Autodesk Maya scenes with 71 typed tools for modeling, animation, shading, and more.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security55
- Malware check failed: a supply-chain vendor flagged a high-severity malware risk. See how to fix → Fail
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 14 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (MIT License) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 61 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 4980 tokens (~70/item across 71 items; 71 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 72 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the Maya MCP server?
Maya MCP runs locally as a PyPI package, launched with uvx maya-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · maya-mcp
claude mcp add gimbalgoats-maya-mcp -- uvx maya-mcp
{
"mcpServers": {
"gimbalgoats-maya-mcp": {
"command": "uvx",
"args": [
"maya-mcp"
]
}
}
} {
"servers": {
"gimbalgoats-maya-mcp": {
"command": "uvx",
"args": [
"maya-mcp"
]
}
}
} codex mcp add gimbalgoats-maya-mcp -- uvx maya-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gimbalgoats-maya-mcp": {
"type": "local",
"command": [
"uvx",
"maya-mcp"
],
"enabled": true
}
}
} openclaw mcp add gimbalgoats-maya-mcp --command uvx --arg maya-mcp
mcp_servers:
gimbalgoats-maya-mcp:
command: "uvx"
args: ["maya-mcp"] {
"McpServers": {
"gimbalgoats-maya-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"maya-mcp"
]
}
}
} assistant mcp add gimbalgoats-maya-mcp -t stdio -c uvx -a maya-mcp
{
"mcpServers": {
"gimbalgoats-maya-mcp": {
"command": "uvx",
"args": [
"maya-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 −3
- Stability: pass → 0.80 functional
- 17 Sept 26 +1
- Stability: 0.97 → pass security
- 15 Sept 26 +2
- Malware scan: unverified → fail ▼ security
- 14 Sept 26 −1
- Malware scan: fail → unverified ▼ security
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +2
- Malware scan: unverified → fail ▼ security
- 11 Sept 26 −5
- Malware scan: fail → unverified ▼ security
- Stability: pass → 0.80 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/maya-mcp@0.6.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 14 packages
| Packages resolved | 14 |
|---|---|
| Stale | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
scene.import Import Scene File ~152
Import a file into the current Maya scene. Supports multiple formats (.ma, .mb, .obj, .fbx, .abc, .usd, .usda, .usdc, .usdz). Returns only top-level parent transforms to protect token budget.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the file to import (.ma, .mb, .obj, .fbx, .abc, .usd, .usda, .usdc, .usdz) |
| force | boolean | – | If True, replace existing namespace contents. If False (default), merge. |
| namespace | – | – | Namespace behavior: None = no namespace, '' = auto-generate, 'name' = use specified |
| Name | Type | Req | Description |
|---|---|---|---|
| _original_size | integer | – | – |
| _size_warning | string | – | – |
| _truncated_size | integer | – | – |
| count | integer | yes | – |
| error | – | yes | – |
| file_path | – | yes | – |
| nodes | array | yes | – |
| success | boolean | yes | – |
| total_count | integer | – | – |
| truncated | boolean | – | – |
No examples provided.
scene.info Get Scene Information ~16
Get information about the current Maya scene
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | – | yes | – |
| fps | number | yes | – |
| frame_range | array | yes | – |
| modified | boolean | yes | – |
| up_axis | string | yes | – |
No examples provided.
scene.new Create New Scene ~88
Create a new empty Maya scene. Checks for unsaved changes first and refuses by default if the scene was modified. Use force=True to discard unsaved changes. When a client supports form elicitation, the server may ask for confirmation instead of requiring an immediate retry.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | If True, discard unsaved changes. If False (default), refuse when scene has unsaved changes. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | – | yes | – |
| previous_file | – | yes | – |
| success | boolean | yes | – |
| was_modified | boolean | yes | – |
No examples provided.
scene.open Open Scene ~123
Open a Maya scene file. Validates the file path and checks for unsaved changes before proceeding. Use force=True to discard unsaved changes. When a client supports form elicitation, the server may ask for confirmation instead of requiring an immediate retry. Supported formats: .ma (Maya ASCII), .mb (Maya Binary).
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Path to the Maya scene file to open (.ma or .mb) |
| force | boolean | – | If True, discard unsaved changes. If False (default), refuse when scene has unsaved changes. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | – | yes | – |
| file_path | – | yes | – |
| previous_file | – | yes | – |
| success | boolean | yes | – |
| was_modified | boolean | yes | – |
No examples provided.
scene.redo Redo Scene Operation ~18
Redo the last undone operation in Maya.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| can_redo | boolean | yes | – |
| can_undo | boolean | yes | – |
| redone | – | yes | – |
| success | boolean | yes | – |
No examples provided.
scene.save Save Scene ~29
Save the current scene. Saves to the current file path. Fails if the scene is untitled.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| error | – | yes | – |
| file_path | – | yes | – |
| success | boolean | yes | – |
No examples provided.
scene.save_as Save Scene As ~55
Save the scene to a new file path. Validates the path and saves as Maya ASCII or Binary based on extension.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute or relative path to save the scene to (.ma or .mb) |
| Name | Type | Req | Description |
|---|---|---|---|
| error | – | yes | – |
| file_path | – | yes | – |
| success | boolean | yes | – |
No examples provided.
scene.undo Undo Scene Operation ~22
Undo the last operation in Maya. Critical for LLM error recovery.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| can_redo | boolean | yes | – |
| can_undo | boolean | yes | – |
| success | boolean | yes | – |
| undone | – | yes | – |
No examples provided.
script.execute Execute Approved Script ~104
Execute a Python script file in Maya from an allowed MAYA_MCP_SCRIPT_DIRS directory. The script is read server-side and sent to Maya. Optional args dict is injected as __args__ in the script namespace.
| Name | Type | Req | Description |
|---|---|---|---|
| args | – | – | Optional arguments dict injected as __args__ in the script namespace |
| file_path | string | yes | Absolute path to the .py script file |
| timeout | – | – | Optional timeout override in seconds (default from MAYA_MCP_SCRIPT_TIMEOUT) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| output | string | yes | – |
| script | string | yes | – |
| success | boolean | yes | – |
No examples provided.
script.list List Approved Scripts ~32
List available Python scripts from configured MAYA_MCP_SCRIPT_DIRS directories. Read-only, does not require Maya connection.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| _original_size | integer | – | – |
| _size_warning | string | – | – |
| _truncated_size | integer | – | – |
| count | integer | yes | – |
| directories | array | yes | – |
| errors | – | yes | – |
| scripts | array | yes | – |
| total_count | integer | – | – |
| truncated | boolean | – | – |
No examples provided.
script.run Run Raw Script Code ~83
Execute raw Python or MEL code in Maya. REQUIRES MAYA_MCP_ENABLE_RAW_EXECUTION=true environment variable. Disabled by default for security.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | Python or MEL code to execute |
| language | string | – | Code language (default: python) |
| timeout | – | – | Optional timeout override in seconds (default from MAYA_MCP_SCRIPT_TIMEOUT) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| language | string | yes | – |
| output | string | yes | – |
| success | boolean | yes | – |
No examples provided.
selection.clear Clear Selection ~17
Clear the Maya selection (deselect all)
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| selection | array | yes | – |
No examples provided.
selection.convert_components Convert Component Selection ~51
Convert the current selection to a different component type (vertex, edge, or face).
| Name | Type | Req | Description |
|---|---|---|---|
| nodes | – | – | Nodes to convert (None = use current selection) |
| to_type | string | yes | Target component type |
| Name | Type | Req | Description |
|---|---|---|---|
| _original_size | integer | – | – |
| _size_warning | string | – | – |
| _truncated_size | integer | – | – |
| count | integer | yes | – |
| errors | – | yes | – |
| selection | array | yes | – |
| to_type | string | yes | – |
| total_count | integer | – | – |
| truncated | boolean | – | – |
No examples provided.
selection.get Get Selection ~15
Get the current selection in Maya
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| selection | array | yes | – |
No examples provided.
selection.get_components Get Component Selection ~24
Get currently selected mesh components grouped by type (vertices, edges, faces).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| _original_size | integer | – | – |
| _size_warning | string | – | – |
| _truncated_size | integer | – | – |
| edge_count | integer | yes | – |
| edges | array | yes | – |
| error | string | – | – |
| face_count | integer | yes | – |
| faces | array | yes | – |
| has_components | boolean | yes | – |
| selection | array | yes | – |
| total_count | integer | yes | – |
| truncated | boolean | – | – |
| vertex_count | integer | yes | – |
| vertices | array | yes | – |
No examples provided.
selection.set Set Selection ~46
Set the Maya selection
| Name | Type | Req | Description |
|---|---|---|---|
| add | boolean | – | Add to existing selection |
| deselect | boolean | – | Remove from selection |
| nodes | array | yes | Node names to select |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| selection | array | yes | – |
No examples provided.
selection.set_components Set Component Selection ~111
Select mesh components (vertices, edges, or faces) using Maya notation (e.g., 'pCube1.vtx[0:10]', 'pSphere1.e[5]', 'pPlane1.f[0:99]').
| Name | Type | Req | Description |
|---|---|---|---|
| add | boolean | – | Add to existing selection |
| components | array | yes | Component specifications (e.g., ['pCube1.vtx[0:7]', 'pCube1.f[0]']) |
| deselect | boolean | – | Remove from selection |
| Name | Type | Req | Description |
|---|---|---|---|
| _original_size | integer | – | – |
| _size_warning | string | – | – |
| _truncated_size | integer | – | – |
| count | integer | yes | – |
| errors | – | yes | – |
| selection | array | yes | – |
| total_count | integer | – | – |
| truncated | boolean | – | – |
No examples provided.
shading.assign_material Assign Material ~63
Assign a material to meshes or face components. Resolves the shading group from the material automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| material | string | yes | Name of the material (or shading group) to assign |
| targets | array | yes | Meshes or face components to assign the material to |
| Name | Type | Req | Description |
|---|---|---|---|
| assigned | array | yes | – |
| errors | – | yes | – |
| material | string | yes | – |
| shading_group | – | yes | – |
No examples provided.
shading.create_material Create Material ~77
Create a material (lambert, blinn, phong, standardSurface) with an associated shading group and optional color.
| Name | Type | Req | Description |
|---|---|---|---|
| color | – | – | Optional [r, g, b] color (0-1 range) |
| material_type | string | – | Type of material shader to create |
| name | – | – | Optional name for the material node |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| material | – | yes | – |
| material_type | string | yes | – |
| shading_group | – | yes | – |
No examples provided.
shading.set_material_color Set Material Color ~90
Set a color attribute on a material (e.g., color, baseColor, transparency).
| Name | Type | Req | Description |
|---|---|---|---|
| attribute | string | – | Color attribute name (e.g., 'color', 'baseColor', 'transparency', 'incandescence') |
| color | array | yes | [r, g, b] color values (0-1 range) |
| material | string | yes | Name of the material node |
| Name | Type | Req | Description |
|---|---|---|---|
| attribute | string | yes | – |
| color | array | yes | – |
| errors | – | yes | – |
| material | string | yes | – |
No examples provided.
skin.bind Bind Skin ~100
Bind a mesh to a skeleton with influence options. Creates a skinCluster with configurable bind method and max influences.
| Name | Type | Req | Description |
|---|---|---|---|
| bind_method | string | – | Binding algorithm: closestDistance (default), heatMap, or geodesicVoxel |
| joints | array | yes | List of joint names to use as influences |
| max_influences | integer | – | Maximum influences per vertex (default 4) |
| mesh | string | yes | Name of the mesh to bind |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| influence_count | integer | yes | – |
| influences | array | yes | – |
| mesh | string | yes | – |
| skin_cluster | – | yes | – |
No examples provided.
skin.copy_weights Copy Skin Weights ~90
Copy skin weights from one mesh to another using surface and influence association methods.
| Name | Type | Req | Description |
|---|---|---|---|
| influence_association | string | – | Influence matching method (default: closestJoint) |
| source_mesh | string | yes | Source mesh (must have a skinCluster) |
| surface_association | string | – | Surface matching method (default: closestPoint) |
| target_mesh | string | yes | Target mesh (must have a skinCluster) |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| source_mesh | string | yes | – |
| source_skin_cluster | – | yes | – |
| success | boolean | yes | – |
| target_mesh | string | yes | – |
| target_skin_cluster | – | yes | – |
No examples provided.
skin.influences List Skin Influences ~38
List influences (joints) on a skin cluster with index mapping.
| Name | Type | Req | Description |
|---|---|---|---|
| skin_cluster | string | yes | Name of the skinCluster node |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
| errors | – | yes | – |
| influences | array | yes | – |
| skin_cluster | string | yes | – |
No examples provided.
skin.unbind Unbind Skin ~36
Detach a skin cluster from a mesh, removing skin deformation.
| Name | Type | Req | Description |
|---|---|---|---|
| mesh | string | yes | Name of the mesh to unbind |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| mesh | string | yes | – |
| skin_cluster | – | yes | – |
| unbound | boolean | yes | – |
No examples provided.
skin.weights.get Get Skin Weights ~88
Get per-vertex skin weights with offset/limit pagination. Default limit is 100 vertices (skin weight data is dense). Use offset to paginate through large meshes.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | – | – | Maximum vertices to return (default 100, use 0 for unlimited) |
| offset | integer | – | Starting vertex index (0-based) |
| skin_cluster | string | yes | Name of the skinCluster node |
| Name | Type | Req | Description |
|---|---|---|---|
| _original_size | integer | – | – |
| _size_warning | string | – | – |
| _truncated_size | integer | – | – |
| count | integer | yes | – |
| errors | – | yes | – |
| geometry_type | string | – | – |
| influence_count | integer | yes | – |
| influences | array | yes | – |
| mesh | – | yes | – |
| offset | integer | yes | – |
| skin_cluster | string | yes | – |
| total_count | integer | – | – |
| truncated | boolean | – | – |
| vertex_count | integer | yes | – |
| vertices | array | yes | – |
No examples provided.
skin.weights.set Set Skin Weights ~82
Set per-vertex skin weights with optional normalization. Accepts up to 1000 vertex entries per call.
| Name | Type | Req | Description |
|---|---|---|---|
| normalize | boolean | – | Normalize weights after setting (default True) |
| skin_cluster | string | yes | Name of the skinCluster node |
| weights | array | yes | List of {vertex_id: int, weights: {joint: weight}} entries |
| Name | Type | Req | Description |
|---|---|---|---|
| errors | – | yes | – |
| set_count | integer | yes | – |
| skin_cluster | string | yes | – |
No examples provided.
viewport.capture Capture Viewport ~161
Capture a single viewport frame as inline image content using Maya playblast. Read-only: does not modify scene data.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Image format: 'jpeg' (default) or 'png' |
| frame | – | – | Optional frame to capture (defaults to current time) |
| height | integer | – | Capture height in pixels (64-4096) |
| offscreen | boolean | – | Use offscreen capture when available (default False) |
| panel | – | – | Optional preferred modelPanel name |
| quality | integer | – | JPEG quality 1-100 (used when format='jpeg') |
| show_ornaments | boolean | – | Show viewport ornaments/gizmos (default True) |
| width | integer | – | Capture width in pixels (64-4096) |
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | yes | – |
| frame | – | yes | – |
| height | integer | yes | – |
| mime_type | string | yes | – |
| panel | – | yes | – |
| size_bytes | integer | yes | – |
| width | integer | yes | – |
No examples provided.
What is the Maya MCP server?
Maya MCP is listed in the public MCP registry as io.github.GimbalGoats/maya-mcp. Control Autodesk Maya scenes with 71 typed tools for modeling, animation, shading, and more. This page covers its PyPI package (maya-mcp).
Is the Maya MCP server safe to use?
Maya MCP scores 68 out of 100 on VerifyMCP. A supply-chain scanner flagged a possible malware risk on one channel of this server. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Maya MCP server expose?
Maya MCP exposes 71 tools: health.check, maya.connect, maya.disconnect, scene.info, scene.new, and 66 more. Their descriptions and schemas cost roughly 4,916 tokens of context every time the server is loaded.
Is the Maya MCP server still maintained?
Maya MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.