maya-mcp

maya-mcp

Custom MCP server that lets AI control Autodesk Maya 2022+ directly, using code execution and self-discovery rather than hundreds of predefined tools. Includes structured tools for Unreal Engine asset preparation, validation, and FBX export.

Category
访问服务器

README

maya-mcp

Maya 2022 이상에서 쓰는 커스텀 MCP 서버. AI가 Maya를 직접 조작하게 해줍니다.

기존 오픈소스 서버들과 달리 툴을 수백 개 나열하지 않습니다. 코드 실행 + 자기탐색으로 전체 커버리지를 얻고, 구조화된 툴은 안전망에만 씁니다.

왜 이 구조인가

Maya 2022의 내장 Python은 3.7이고, 공식 mcp 파이썬 SDK는 3.10 이상을 요구합니다. 즉 MCP 서버 본체는 Maya 안에서 돌 수 없습니다. 그래서 두 조각으로 나뉩니다.

Claude ─(stdio)─> maya_mcp/           PC 파이썬 3.10+ / mcp SDK
                       │
                       │ TCP 127.0.0.1:20777
                       │ JSON-RPC 2.0 · 4바이트 길이 프리픽스
                       ▼
                  maya_mcp_bridge.py  Maya 2022 내부 / Python 3.7 / 표준 라이브러리만
                       │ executeInMainThreadWithResult
                       ▼
                    maya.cmds ← unreal_tools.py (L2 언리얼 파이프라인)

이 경계 덕분에 Maya를 2024/2026으로 올려도 브릿지 파일 하나만 확인하면 됩니다.

자매 프로젝트와의 정렬

unreal-mcp-bridge 와 규약을 맞췄습니다.

공통
메시지 JSON-RPC 2.0 (method / params / result / error)
에러 코드 표준 (-32700 ~ -32603)
메서드명 <도메인>.<동작> 점 네임스페이스
구조 패키지 + tools/*.py + register_*_tools(mcp, conn)
스레드 워커 스레드 수신 → 메인/게임 스레드 디스패치

의도적으로 다른 것 하나 — 프레이밍. 저쪽은 개행 구분 + 64KB 제한, 이쪽은 4바이트 길이 프리픽스에 제한 없음입니다. Maya 는 씬 덤프처럼 큰 응답이 흔해 (cmds.ls() 한 번에도 64KB를 넘길 수 있습니다) 64KB 제한을 쓸 수 없습니다. 자세한 내용은 docs/PROTOCOL.md.

파일 구조

maya_mcp/              PC 쪽 (Python 3.10+)
  config.py            MMCP_* 환경변수
  connection.py        JSON-RPC 클라이언트
  server.py            서버 조립 (build_server)
  tools/               script · scene · inspection · viewport · unreal
maya_mcp_bridge.py     Maya 내부 (Python 3.7, 표준 라이브러리만)
unreal_tools.py        Maya 내부, 언리얼 파이프라인 구현
install_maya.py        Maya 쪽 원버튼 설치
server.py              엔트리 포인트 (기존 MCP 등록 경로 유지용)

툴 목록 (16개)

계층 역할
L0 maya_execute 임의 Python 실행. 여기서 모든 기능이 나옵니다
L1 maya_search_commands 이름으로 maya.cmds 명령 검색
L1 maya_command_help 명령의 플래그·시그니처 조회
L3 maya_undo 직전 작업 되돌리기
L3 maya_viewport_capture 뷰포트를 이미지로 받아 결과 검증
maya_scene_info 단위·업축·프레임 범위·노드 개수
maya_ping 연결·버전 확인

L2 — 언리얼 파이프라인 (unreal_tools.py)

성격 역할
maya_unreal_check 읽기 전용 프리즈·음수 스케일·히스토리·네이밍·UV·ngon·논매니폴드 감사
maya_unreal_check_skeleton 읽기 전용 조인트 오리엔트 편차, rotate 잔여값, 루트·좌우 네이밍 감사
maya_unreal_check_materials 읽기 전용 슬롯 수(=드로우 콜), 기본 머티리얼, 페이스 단위 할당, 미사용 SG
maya_unreal_prepare 변경 히스토리 삭제·프리즈·피벗·접두사 리네임 일괄
maya_unreal_cleanup_materials 변경 미사용 셰이딩 그룹 삭제, M_ 리네임
maya_unreal_make_lods 생성 LOD 메시 생성 + Maya LOD 그룹
maya_unreal_make_collision 생성 UBX_/USP_/UCP_/UCX_ 콜리전
maya_unreal_import_fbx 입력 FBX 를 Maya 로 가져오기 (언리얼 레벨 에셋 수신)
maya_unreal_export_fbx 출력 언리얼 프리셋 FBX

감사(읽기 전용)를 먼저 두는 구조입니다. 보지 않고 고치면 되돌릴 수 없는 문제 (뒤집힌 노멀 등)를 덮어쓰게 됩니다.

자동화하지 않기로 한 것들 — 판단이 필요하기 때문입니다:

  • 음수 스케일 수정 — 프리즈해도 노멀이 뒤집힌 채 남습니다. 어느 면을 뒤집을지는 사람이 정합니다.
  • 조인트 재오리엔트 — 이미 붙은 스킨 웨이트가 깨집니다. 감사만 합니다.
  • 머티리얼 병합 — 어느 것을 남길지는 룩뎁 판단입니다.
  • LOD 감소율 자동 결정 — 실루엣이 무너지는 지점은 에셋마다 다릅니다.

⚠️ UCX_ 컨벡스 콜리전 제약 — Maya 2022 에는 컨벡스 헐 명령이 없습니다 (런타임 조사로 확인). convex 옵션은 원본을 줄인 사본일 뿐 볼록함이 보장되지 않습니다. 대부분의 프롭은 box(UBX_)로 충분하고, 복잡한 형태는 언리얼 스태틱 메시 에디터의 Auto Convex Collision 을 쓰는 편이 낫습니다.

기존 서버 비교표에서 "Maya 2022에서는 undo와 뷰포트 캡처가 불가능"이라고 나오는 건 Maya의 한계가 아니라 그 서버들이 구현을 안 한 것뿐입니다. 둘 다 2022에서 잘 됩니다.

  • undomaya_execute 호출 하나를 undoInfo(openChunk/closeChunk) 로 묶습니다. AI가 무슨 짓을 하든 Ctrl+Z 한 번에 통째로 되돌아갑니다.
  • 뷰포트 캡처playblast 로 PNG를 떠서 MCP 이미지로 돌려줍니다. AI가 자기 결과물을 보고 스스로 고칠 수 있게 되는 것이 자동화 품질을 가장 크게 가릅니다.

설치

1. Maya 쪽 (한 번만)

스크립트 에디터(Python 탭)에서 아래를 한 번 실행하면 끝입니다.

import sys; sys.path.append(r"C:\path\to\maya-mcp")
import install_maya; install_maya.install()

두 가지가 설치됩니다.

  • 자동 시작~/Documents/maya/scripts/userSetup.py 에 등록됩니다. 다음부터는 Maya 를 켜기만 하면 브릿지가 대기 상태가 됩니다.
  • 셸프 버튼MCP 셸프에 원버튼 시작/중지 토글이 생깁니다. 셸프 탭이 많으면 맨 끝에 추가되니 탭 바를 오른쪽으로 넘겨서 찾으세요.

성공하면 출력창에 이렇게 찍힙니다:

[maya-mcp] 대기 중: 127.0.0.1:20777 (Maya 2022 / Python 3.7.7)

제거: import install_maya; install_maya.uninstall()

<details> <summary>설치 없이 수동으로 띄우기</summary>

import sys; sys.path.append(r"C:\path\to\maya-mcp")
import maya_mcp_bridge; maya_mcp_bridge.start()   # 중지는 stop()

플러그인 매니저에서 maya_mcp_bridge.py 를 로드해도 됩니다 (initializePluginstart() 를 호출합니다). </details>

코드를 수정한 뒤에는 Maya 를 재시작하세요. importlib.reload 는 모듈 전역 (_server)을 초기화해 실행 중인 서버를 stop() 할 수 없게 만들고, 포트가 물린 채 start() 가 실패합니다. 셸프 버튼이 리로드를 하지 않는 이유이기도 합니다.

2. PC 쪽 (MCP 서버)

python -m venv .venv
.venv\Scripts\activate        # macOS/Linux: source .venv/bin/activate
pip install -e .              # 또는: pip install -r requirements.txt

pip install -e . 로 설치하면 maya-mcp 명령으로도 실행할 수 있습니다.

mcp 2.x(MCPServer)와 1.x(FastMCP) 양쪽을 지원합니다 — server.py 가 임포트 시점에 알아서 고릅니다. 2.0.0 에서 검증했습니다.

3. 클라이언트 등록

Claude Desktop / Claude Code 설정에 추가:

{
  "mcpServers": {
    "maya": {
      "command": "C:\\path\\to\\maya-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\maya-mcp\\server.py"]
    }
  }
}

Claude Code CLI 라면:

claude mcp add maya -- C:\path\to\maya-mcp\.venv\Scripts\python.exe C:\path\to\maya-mcp\server.py

언리얼 익스포트 워크플로

1. maya_unreal_check              지오메트리 문제 확인
2. maya_unreal_check_materials    슬롯 수 확인
3. maya_unreal_prepare            프리즈·히스토리·피벗·네이밍
4. maya_unreal_cleanup_materials  미사용 셰이딩 그룹 정리
5. maya_unreal_make_collision     UBX_ 콜리전 생성
6. maya_unreal_make_lods          LOD 생성
7. maya_viewport_capture          눈으로 검증          ← 건너뛰지 마세요
8. maya_unreal_export_fbx         콜리전·LOD 포함 익스포트

7번이 핵심입니다. LOD 검증 중에 실제로 겪은 사례: 삼각형 수 10.3% 유지, ngon 0, 논매니폴드 0 — 지표는 전부 정상이었는데 캡처해보니 실루엣이 눈에 띄게 깨져 있었습니다. 수치만으로 품질을 판단할 수 없습니다.

콜리전 메시는 원본과 같은 FBX 에 함께 익스포트해야 언리얼이 인식합니다.

언리얼과의 에셋 왕복

Maya 쪽 절반은 완성돼 검증까지 마쳤습니다.

방향 Maya 쪽 언리얼 쪽
Maya → 언리얼 maya_unreal_export_fbx asset.import_fbx ❌ 미구현
언리얼 → Maya maya_unreal_import_fbx level.export_selected ❌ 미구현

FBX 왕복은 실기에서 좌표까지 보존되는 것을 확인했습니다(반지름 6.0 원형 배치를 내보냈다 되가져와 위치·삼각형 수 일치).

언리얼 쪽 커맨드 3개는 아직 없습니다. 자매 저장소 unreal-mcp-bridge 에 C++ 로 추가해야 하며, JSON-RPC 계약과 구현 메모를 docs/UNREAL_SIDE.md 에 정리해 뒀습니다. 그 문서의 코드는 빌드·검증되지 않았습니다.

그전까지는 사용자가 언리얼에서 직접 뽑아둔 FBX 를 maya_unreal_import_fbx 로 받는 방식으로 쓸 수 있습니다.

테스트

네 개의 스위트가 있고, 전부 통과 상태입니다 (Maya 2022.x + Python 3.12.10 + mcp 2.0.0 검증).

# 1. Maya 쪽 로직 (31개) — Maya 의 Python 3.7 에서 실제로 돌립니다
"C:\Program Files\Autodesk\Maya2022\bin\mayapy.exe" tests/test_bridge_mayapy.py

# 2. 서버 전송 계층 (25개) — 목 브릿지 상대. Maya 불필요
.venv\Scripts\python.exe tests/test_server_protocol.py

# 3. MCP 엔드투엔드 (6개) — 실제 MCP 클라이언트로 핸드셰이크·툴 호출. Maya 불필요
.venv\Scripts\python.exe tests/test_e2e_stdio.py

# 4. GUI 스모크 — Maya 를 띄우고 브릿지를 start() 한 상태에서 실행
.venv\Scripts\python.exe tests/smoke_gui.py

1번은 maya.standalone 배치 모드에서 _op_* 함수를 직접 호출합니다. 소켓 계층을 여기서 테스트하지 않는 이유는, 배치 모드에는 idle 이벤트 루프가 없어 executeInMainThreadWithResult 가 반환되지 않기 때문입니다. 프레이밍은 2번이 목 브릿지로 검증합니다. GUI 모드에서의 소켓 왕복과 뷰포트 캡처는 자동 테스트 범위 밖이므로, Maya 를 띄워서 직접 확인하세요.

환경 변수

변수 기본값 설명
MMCP_HOST 127.0.0.1 브릿지 호스트
MMCP_PORT 20777 브릿지 포트
MMCP_TIMEOUT 180 요청 타임아웃(초). 무거운 작업이 많으면 늘리세요

접두사는 unreal-mcp-bridge 의 UMCP_ 와 맞춘 것입니다. 예전 MAYA_MCP_* 도 계속 인식하지만 MMCP_* 가 우선합니다.

maya_execute 반환 규약

  • 단일 표현식이면 그 값이 결과입니다 — cmds.ls(selection=True)
  • 여러 줄이면 result 변수에 담긴 값이 결과입니다
objs = cmds.ls(type="mesh")
result = {"count": len(objs), "names": objs[:10]}

print 출력과 예외 트레이스백도 함께 돌아오므로, 실패하면 AI가 에러를 읽고 스스로 고칩니다.

보안 — 읽고 넘어가세요

이건 정의상 원격 코드 실행 통로입니다.

  • 127.0.0.1 에만 바인딩합니다. HOST0.0.0.0 으로 바꾸면 같은 네트워크의 누구나 여러분 Maya에서 임의 코드를 실행할 수 있습니다. 바꾸지 마세요.
  • 렌더 노드, 공용 워크스테이션, 신뢰할 수 없는 네트워크에서는 켜지 마세요.
  • 프로덕션 씬으로 먼저 시험하지 마세요. 사본으로 며칠 돌려보고 판단하세요.
  • undo 청크가 있어도 여러 단계 작업을 완벽히 되돌린다는 보장은 없습니다. 작업 전에 저장하는 습관이 여전히 가장 확실한 안전망입니다.

알려진 제약

  • 무거운 작업 중에는 Maya UI가 멈춥니다. maya.cmds 가 메인 스레드에서만 동작하므로 구조적으로 피할 수 없습니다. 타임아웃을 넉넉히 잡으세요.
  • 배치 모드(maya -batch)에서는 뷰포트 캡처가 동작하지 않습니다.
  • Maya의 undo 가 꺼져 있으면(undoInfo -state off) 되돌리기가 불가능합니다. maya_pingundo_enabled 로 알려줍니다.

확장 방향

maya_execute 로 같은 코드를 반복해서 짜고 있다면, 그때 구조화 툴(L2)로 승격시키세요. 처음부터 툴을 많이 만드는 것이 가장 흔한 실패 패턴입니다. 승격 기준은 셋뿐입니다.

  1. 파괴적이라 확인 게이트가 필요하다 (scene_new, delete_history)
  2. 너무 자주 써서 매번 코드 짜는 게 낭비다 (create_primitive, set_attribute)
  3. AI가 자주 틀린다 (스킨 바인드 옵션, UV 투영 파라미터)

라이선스

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选