# Graph Report - /home/runner/work/maya-mcp/maya-mcp/src  (2026-06-24)

## Corpus Check
- Corpus is ~43,433 words - fits in a single context window. You may not need a graph.

## Summary
- 464 nodes · 930 edges · 35 communities (32 shown, 3 thin omitted)
- Extraction: 90% EXTRACTED · 10% INFERRED · 0% AMBIGUOUS · INFERRED: 90 edges (avg confidence: 0.5)
- Token cost: 0 input · 0 output

## Community Hubs (Navigation)
- [[_COMMUNITY_client|client]]
- [[_COMMUNITY_maya_bridge|maya_bridge]]
- [[_COMMUNITY__audit|_audit]]
- [[_COMMUNITY_suggestions|suggestions]]
- [[_COMMUNITY_clear_cache|clear_cache]]
- [[_COMMUNITY_tool|tool]]
- [[_COMMUNITY__ast_validate|_ast_validate]]
- [[_COMMUNITY___main__|__main__]]
- [[_COMMUNITY_maya_build|maya_build]]
- [[_COMMUNITY_Context|Context]]
- [[_COMMUNITY__build_http_client|_build_http_client]]
- [[_COMMUNITY__track_call|_track_call]]
- [[_COMMUNITY_build_index|build_index]]
- [[_COMMUNITY__run_cmd|_run_cmd]]
- [[_COMMUNITY__build_quality_form_data|_build_quality_form_data]]
- [[_COMMUNITY__handle_error|_handle_error]]
- [[_COMMUNITY_error_scrub|error_scrub]]
- [[_COMMUNITY_review_build|review_build]]
- [[_COMMUNITY_SceneQueryInput|SceneQueryInput]]
- [[_COMMUNITY_publish|publish]]
- [[_COMMUNITY_CameraInput|CameraInput]]
- [[_COMMUNITY_CreatePrimitiveInput|CreatePrimitiveInput]]
- [[_COMMUNITY_ShelfButtonInput|ShelfButtonInput]]
- [[_COMMUNITY_Vision3DPollInput|Vision3DPollInput]]
- [[_COMMUNITY_TextureRemoteInput|TextureRemoteInput]]
- [[_COMMUNITY_ImportFileInput|ImportFileInput]]
- [[_COMMUNITY_KeyframeInput|KeyframeInput]]
- [[_COMMUNITY_LightInput|LightInput]]
- [[_COMMUNITY_MaterialInput|MaterialInput]]
- [[_COMMUNITY_MeshOperationInput|MeshOperationInput]]
- [[_COMMUNITY_TransformInput|TransformInput]]
- [[_COMMUNITY_ViewportCaptureInput|ViewportCaptureInput]]
- [[_COMMUNITY_config|config]]
- [[_COMMUNITY_maya_mcp package|maya_mcp package]]
- [[_COMMUNITY_rag package|rag package]]

## God Nodes (most connected - your core abstractions)
1. `MayaBridge` - 42 edges
2. `MayaBridgeError` - 36 edges
3. `WorldLabsClient` - 28 edges
4. `_handle_error()` - 22 edges
5. `WorldLabsError` - 15 edges
6. `_py_str()` - 14 edges
7. `_do_execute_python()` - 14 edges
8. `WorldLabsAPIError` - 14 edges
9. `Operation` - 14 edges
10. `GenerationNotConfirmedError` - 13 edges

## Surprising Connections (you probably didn't know these)
- `CameraInput` --uses--> `MayaBridgeError`  [INFERRED]
  maya_mcp/server.py → maya_mcp/maya_bridge.py
- `CreatePrimitiveInput` --uses--> `MayaBridgeError`  [INFERRED]
  maya_mcp/server.py → maya_mcp/maya_bridge.py
- `DeleteObjectInput` --uses--> `MayaBridgeError`  [INFERRED]
  maya_mcp/server.py → maya_mcp/maya_bridge.py
- `ExecutePythonInput` --uses--> `MayaBridgeError`  [INFERRED]
  maya_mcp/server.py → maya_mcp/maya_bridge.py
- `ImportFileInput` --uses--> `MayaBridgeError`  [INFERRED]
  maya_mcp/server.py → maya_mcp/maya_bridge.py

## Import Cycles
- None detected.

## Communities (35 total, 3 thin omitted)

### Community 0 - "client"
Cohesion: 0.06
Nodes (55): BaseModel, BaseTransport, Client, Exception, Response, Timeout, GenerationNotConfirmedError, MissingAPIKeyError (+47 more)

### Community 1 - "maya_bridge"
Cohesion: 0.08
Nodes (33): Enum, MayaBridge, MayaBridgeError, MayaConnectionError, MayaExecutionError, maya_bridge.py — Communication layer with Maya via Command Port.  Manages TCP co, Executes a MEL command in Maya., Best-effort unlink of every path. Missing files are silently ignored. (+25 more)

### Community 2 - "_audit"
Cohesion: 0.09
Nodes (32): datetime, audit_enabled(), build_record(), _is_error_string(), _audit.py ========= Durable, append-only audit log of tool executions for the ma, Coerce ``params`` into a plain dict suitable for JSON serialisation.      Handle, Return a JSON-friendly copy of ``params`` with ``code`` summarised.      For the, Assemble a single audit record.      Parameters     ----------     tool : str (+24 more)

### Community 3 - "suggestions"
Cohesion: 0.11
Nodes (29): Any, Per-tool chaining hints for maya-mcp (mirrors the fpt-mcp pattern).  Design doc:, Rule — after a non-empty import, offer save_scene.      Trigger: response carrie, Rule — after creating a camera, offer a viewport capture through it.      Trigge, Rule — after creating a light, offer an intensity keyframe.      Trigger: respon, Kill switch. Set MAYA_MCP_DISABLE_SUGGESTIONS=1 to bypass hints., Three-step Vision3D chain emitted from the single dispatcher tool.      The disp, Rule — after creating a primitive, offer material assignment.      Trigger: resp (+21 more)

### Community 4 - "clear_cache"
Cohesion: 0.08
Nodes (30): check_dangerous(), safety.py ========= Dangerous pattern detection for Maya Python operations.  Sca, Scan serialized tool parameters or code for dangerous patterns.      Args:, _audit_record(), DeleteObjectInput, _do_delete(), _do_execute_python(), ExecutePythonInput (+22 more)

### Community 5 - "tool"
Cohesion: 0.10
Nodes (27): RuntimeError, _build_command(), convert_spz_to_ply(), convert.py ========== SPZ -> PLY conversion seam for World Labs Marble splat ass, Convert an SPZ Gaussian-splat file to PLY and return the output path.      Param, Raised when a converter is available but the conversion itself failed., Raised when no SPZ->PLY converter binary can be located., Return a usable converter executable path, or ``None`` if none found.      Resol (+19 more)

### Community 6 - "_ast_validate"
Cohesion: 0.11
Nodes (21): Attribute, AstValidation, _CmdsCallCollector, _command_of(), format_issues(), _load_graph(), _ast_validate.py ================ F4b (3C Wave 4) — AST dry-run walker for ``may, Load and cache ``rag/api_graph.json``.      Returns an empty dict when the file (+13 more)

### Community 7 - "__main__"
Cohesion: 0.14
Nodes (13): Allow ``python -m maya_mcp`` to launch the server., _audited(), _do_operation_history(), _do_v3d_select_server(), _is_valid_http_url(), main(), Read recent durable-audit records (read-only; no Maya round-trip).      Read com, Return True if ``url`` parses as an http/https URL with a host.      This is the (+5 more)

### Community 8 - "maya_build"
Cohesion: 0.18
Nodes (15): assign_splat_shader(), build_environment(), build_point_proxy(), import_gaussian_splat(), place_eye_camera(), maya_build.py ============= In-Maya scene-build recipe for a World Labs Gaussian, Assign an ``aiGaussianSplatShader`` to the splat via a shading group.      Defau, Camera at the splats' horizontal centroid, ``ground + eye_height`` high,     aim (+7 more)

### Community 9 - "Context"
Cohesion: 0.17
Nodes (15): Context, _do_publish(), _do_review_turntable(), _do_wl_build(), _do_wl_convert(), _do_wl_download(), _do_wl_generate(), _do_wl_health() (+7 more)

### Community 10 - "_build_http_client"
Cohesion: 0.15
Nodes (14): _build_http_client(), _do_v3d_download(), _do_v3d_health(), _download_file(), Create a fresh httpx.AsyncClient bound to the given base URL., Return the JSON payload shown when no Vision3D URL has been picked.      Nothing, Return ``(client, error_json)``.      - If a URL has been selected: ``(AsyncClie, Download a single file from a completed job.      Precondition: a vision3d serve (+6 more)

### Community 11 - "_track_call"
Cohesion: 0.15
Nodes (14): maya_vision3d(), maya_worldlabs(), Update last-call timestamp; auto-reset _stats if the idle gap exceeded.      Cal, AI-powered 3D asset generation via Vision3D server (requires GPU with Hunyuan3D-, Generate a World Labs (Marble) Gaussian-splat ENVIRONMENT from an image     and, Show session efficiency statistics: token usage, RAG savings, patterns learned., Zero the session stats counters immediately.      Use at the start of a new Clau, Input for the maya_vision3d dispatch tool. (+6 more)

### Community 12 - "build_index"
Cohesion: 0.24
Nodes (11): build(), chunk_markdown(), collect_docs(), _load_config(), _make_embedding_fn(), _method_group_chunks(), build_index.py ============== Indexes Maya API documentation into a local Chroma, Split a markdown file into chunks by ## headers, with method sub-chunking. (+3 more)

### Community 13 - "_run_cmd"
Cohesion: 0.20
Nodes (10): _bg_panel_install(), _do_launch(), _do_ping(), Install MCP Pipeline menu & panel inside Maya.      Strategy:       1. Add proje, Background thread: poll Maya port, install panel when ready., Execute a local async command and return (returncode, stdout, stderr)., Check connection to Maya and return environment info (version, current scene, re, Open Maya and wait for the Command Port to respond.      When an MCP ``Context`` (+2 more)

### Community 14 - "_build_quality_form_data"
Cohesion: 0.20
Nodes (10): _build_quality_form_data(), _do_v3d_generate_image(), _do_v3d_generate_text(), Build form_data dict with quality params from a ShapeGenerateInput or ShapeTextI, Parameters for initiating 3D generation from image in Vision3D.      Quality pre, Parameters for initiating 3D generation from text in Vision3D., Start textured 3D generation from image in Vision3D (non-blocking).      Uploads, Start 3D generation from text in Vision3D (non-blocking).      Sends the prompt (+2 more)

### Community 15 - "_handle_error"
Cohesion: 0.25
Nodes (8): _do_new_scene(), _do_save_scene(), _do_scene_snapshot(), _handle_error(), Return a complete snapshot of scene state: file, modified, frame, objects by typ, Consistent error formatting.      The exception text is scrubbed of credential-s, Create a new empty scene in Maya.      Guards unsaved work: ``cmds.file(new=True, Save the current Maya scene.

### Community 16 - "error_scrub"
Cohesion: 0.33
Nodes (6): BaseException, error_scrub.py — OPSEC-safe error-message sanitisation shared across the MCP eco, Redact credential-shaped values embedded in free text.      Replaces the *value*, Return a scrubbed, length-bounded string for *exc*.      Scrub FIRST, then trunc, safe_error_message(), scrub_secrets()

### Community 17 - "review_build"
Cohesion: 0.40
Nodes (5): _engine_context(), review_build.py =============== Deterministic in-Maya **review turntable** recip, Best-effort tk-maya context → (asset, task, version_code) or (None, …).      ``v, Deterministic turntable playblast → ``out_path`` (.mov). See module docstring., review_turntable()

### Community 18 - "SceneQueryInput"
Cohesion: 0.33
Nodes (6): _do_list_scene(), _py_str(), Parameters for querying the scene., Return a safe Python string literal for embedding *value* in generated     Maya, List objects in the Maya scene, with optional filters by type or name., SceneQueryInput

### Community 19 - "publish"
Cohesion: 0.40
Nodes (4): expand_tokens(), Native Toolkit publish payloads + intent interpretation for maya-mcp.  Pure data, # NOTE: keep the response LEAN. The LLM only needs what got, Lowercase, expand via synonyms (keeping the literal), de-dupe in order.

### Community 20 - "CameraInput"
Cohesion: 0.50
Nodes (4): CameraInput, maya_create_camera(), Parameters for creating a camera., Create a camera in Maya with configurable position, look-at point, and focal len

### Community 21 - "CreatePrimitiveInput"
Cohesion: 0.50
Nodes (4): CreatePrimitiveInput, maya_create_primitive(), Parameters for creating a 3D primitive., Create a 3D primitive in Maya (cube, sphere, cylinder, cone, plane, torus) with

### Community 22 - "ShelfButtonInput"
Cohesion: 0.50
Nodes (4): _do_shelf_button(), Parameters for creating a button on the Maya shelf., Create a custom button on the Maya shelf with associated Python code. Allows Cla, ShelfButtonInput

### Community 23 - "Vision3DPollInput"
Cohesion: 0.50
Nodes (4): _do_v3d_poll(), Parameters for polling job status in Vision3D., Poll job status in Vision3D. Returns new log lines since last call (incremental, Vision3DPollInput

### Community 24 - "TextureRemoteInput"
Cohesion: 0.50
Nodes (4): _do_v3d_texture(), Parameters for initiating texturing in Vision3D., Start mesh texturing in Vision3D (non-blocking).      Uploads mesh + image and s, TextureRemoteInput

### Community 25 - "ImportFileInput"
Cohesion: 0.50
Nodes (4): ImportFileInput, maya_import_file(), Parameters for importing 3D files., Import 3D files into Maya: OBJ, FBX, GLB/GLTF, Alembic ABC, Maya MA/MB. With nam

### Community 26 - "KeyframeInput"
Cohesion: 0.50
Nodes (4): KeyframeInput, maya_set_keyframe(), Parameters for creating animation keyframes., Create an animation keyframe on an object. Allows animating translate, rotate, s

### Community 27 - "LightInput"
Cohesion: 0.50
Nodes (4): LightInput, maya_create_light(), Parameters for creating a light., Create a light in Maya (directional, point, spot, area, ambient) with configurab

### Community 28 - "MaterialInput"
Cohesion: 0.50
Nodes (4): MaterialInput, maya_assign_material(), Parameters for creating and assigning a material., Create a material (lambert, blinn, phong, aiStandardSurface) with RGB color and

### Community 29 - "MeshOperationInput"
Cohesion: 0.50
Nodes (4): maya_mesh_operation(), MeshOperationInput, Parameters for mesh operations., Execute mesh operations: extrude, bevel, boolean (union/difference/intersection)

### Community 30 - "TransformInput"
Cohesion: 0.50
Nodes (4): maya_transform(), Parameters for transforming an object., Move, rotate, or scale an object in the Maya scene., TransformInput

### Community 31 - "ViewportCaptureInput"
Cohesion: 0.50
Nodes (4): maya_viewport_capture(), Parameters for capturing the Maya viewport., Capture the Maya viewport as PNG/JPG image and return it for visual analysis. Do, ViewportCaptureInput

## Knowledge Gaps
- **3 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.

## Suggested Questions
_Questions this graph is uniquely positioned to answer:_

- **Why does `WorldLabsClient` connect `client` to `tool`?**
  _High betweenness centrality (0.095) - this node is a cross-community bridge._
- **Why does `MayaBridge` connect `maya_bridge` to `clear_cache`, `__main__`, `_build_http_client`, `_track_call`, `_build_quality_form_data`, `SceneQueryInput`, `CameraInput`, `CreatePrimitiveInput`, `ShelfButtonInput`, `Vision3DPollInput`, `TextureRemoteInput`, `ImportFileInput`, `KeyframeInput`, `LightInput`, `MaterialInput`, `MeshOperationInput`, `TransformInput`, `ViewportCaptureInput`?**
  _High betweenness centrality (0.086) - this node is a cross-community bridge._
- **Why does `_make_embedding_fn()` connect `build_index` to `suggestions`?**
  _High betweenness centrality (0.044) - this node is a cross-community bridge._
- **Are the 30 inferred relationships involving `MayaBridge` (e.g. with `CameraInput` and `CreatePrimitiveInput`) actually correct?**
  _`MayaBridge` has 30 INFERRED edges - model-reasoned connections that need verification._
- **Are the 30 inferred relationships involving `MayaBridgeError` (e.g. with `CameraInput` and `CreatePrimitiveInput`) actually correct?**
  _`MayaBridgeError` has 30 INFERRED edges - model-reasoned connections that need verification._
- **Are the 6 inferred relationships involving `WorldLabsClient` (e.g. with `GenerateRequest` and `ImagePromptMediaAsset`) actually correct?**
  _`WorldLabsClient` has 6 INFERRED edges - model-reasoned connections that need verification._
- **What connects `maya-mcp — MCP server for controlling Autodesk Maya.  Hybrid RAG search: ChromaD`, `Allow ``python -m maya_mcp`` to launch the server.`, `_ast_validate.py ================ F4b (3C Wave 4) — AST dry-run walker for ``may` to the rest of the system?**
  _212 weakly-connected nodes found - possible documentation gaps or missing edges._