오늘의 GitHub Trending(Python/전체 언어)에서 +2,098 star/일의 증가세를 보이고 있던 ahujasid/mcp-for-blender (MIT License, 구칭 blender-mcp)를 실제로 내 환경에서 구동해 보았다.
이 도구는 AI 클라이언트(Claude Desktop/Claude Code 등)로부터 Model Context Protocol(MCP)을 경유하여 Blender의 Python API(bpy)를 직접 실행시키고, 자연어만으로 장면 생성, 에셋 가져오기, 3D 모델 생성을 할 수 있게 해준다. 필자는 Blender의 GUI 조작에 익숙하지 않지만, '일본어로 지시하는 것만으로 Blender가 무언가를 만들게 할 수 있다'는 경험이 어느 정도까지 사실인지 실제로 검증해 보았다.
전제: 본 기사에서 검증한 범위
- Poly Haven 등의 무료 에셋 연동은 대상에서 제외 (시간상의 이유로 장면 생성의 핵심 동작 확인을 우선했기 때문)
- Sketchfab/Hyper3D/Meshy/Tripo 등 API 키가 필요한 유료 3D 생성 연동은 처음부터 대상에서 제외
- GPU는 사용하지 않음 (Blender 4.0.2의 EEVEE 렌더러를 CPU로 실행)
추가적인 유료 API 키 없이, Blender 3.0+・Python 3.10+・uv만 있다면 검증할 수 있는 범위로 한정했다.
먼저 Blender가 없는 환경에서 시작했다
검증 환경에 Blender가 설치되어 있지 않아, 먼저 설치했다.
$ apt-get install -y blender
$ blender --background --version
Blender 4.0.2
mcp-for-blender의 애드온(addon.py)을 활성화하려 하자, requests 모듈을 찾지 못해 실패했다.
ModuleNotFoundError: No module named 'requests'
배포 패키지 버전의 Blender는 requests를 포함하고 있지 않은 경우가 있다. Blender가 사용하는 Python 경로에 명시적으로 재설치함으로써 해결할 수 있었다.
$ python3.12 -m pip install --target ~/.config/blender/4.0/scripts/addons/modules requests
blender --background로는 작동하지 않는다
막혔던 지점: 다음으로 blender --background (헤드리스 모드)로 애드온을 활성화해 보았지만, 소켓 서버 자체가 구동되지 않았다. 애드온의 소스 코드를 읽어보니, 이는 의도된 사양임을 알 수 있었다.
def start(self):
if bpy.app.background:
print("BlenderMCP: cannot start server in background mode (blender -b) - commands would never execute\n"
...
mcp 서버 측의 타임아웃 메시지에도 같은 조언이 적혀 있다.
If Blender is running headless (blender -b), commands never execute;
run Blender with a GUI or via 'xvfb-run -a blender' instead
즉, 도구 자체가
실제로 MCP 클라이언트로 연결해 보기
이 검증 환경에는 Claude Desktop과 같은 GUI 클라이언트가 없었기 때문에, Python의 mcp 패키지(stdio_client/ClientSession)를 사용하여 간이 MCP 클라이언트를 직접 만들고, uv run mcp-for-blender를 stdio를 통해 MCP 서버로 실행하여 실제로 MCP 프로토콜로 연결했다.
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
server_params = StdioServerParameters(command="uv", args=["run", "mcp-for-blender"], cwd="mcp-for-blender")
...
공개된 도구 목록은 다음과 같았다.
['disable_telemetry', 'execute_blender_code', 'generate_3d', 'get_addon_status',
'get_scene_info', 'import_asset', 'look', 'record_trajectory_feedback', 'search_assets']
일본어 지시로 씬(Scene) 만들기
다음 일본어 지시를 user_prompt로 전달하고, execute_blender_code 도구를 사용하여 Blender Python 코드(벽 4개・바닥・횃불・카메라 배치 코드)를 실행했다.
저폴리곤 던전 씬을 만들어줘. 돌 벽으로 둘러싸인 방과 중앙에 횃불 하나를 놓고, 카메라로 방 전체가 보이도록 렌더링해줘.
실행 전의 get_scene_info는 기본(default) 씬 상태였다.
Scene 'Scene' | 1 camera, 1 light, 1 mesh | active Cube | selected Cube | mode OBJECT
Cube | mesh | at (0.0, 0.0, 0.0) | size 2.0x2.0x2.0
execute_blender_code를 실행하자 다음과 같은 응답이 돌아왔다.
Code executed successfully: SCENE_BUILD_RESULT:{'object_count': 8, 'object_names': ['Floor', 'RoomCamera', 'Torch_Flame_Light', 'Torch_Handle', 'Wall_East', 'Wall_North',
'Wall_South', 'Wall_West']}
실행 후의 get_scene_info에서는 지시대로 벽 4개・바닥・횃불(손잡이+따뜻한 색점 광원)・카메라가 갖춰져 있음을 MCP를 통한 텍스트 응답만으로 확인할 수 있었다.
Scene 'Scene' | 1 camera, 1 light, 6 mesh | active RoomCamera | selected RoomCamera | mode OBJECT
Wall_North | mesh | at (0.0, 3.0, 1.5) | size 6.0x0.4x3.0
Wall_South | mesh | at (0.0, -3.0, 1.5) | size 6.0x0.4x3.0
...
Before/After 렌더링 이미지
execute_blender_code 내에서 bpy.ops.render.render(write_still=True)를 호출하면, MCP를 통해 Blender의 렌더링 결과를 이미지 파일로 저장할 수 있다. 기본 씬과 일본어 지시로 생성한 후의 씬을 각각 렌더링했다.
Before (기본 Cube 씬):
Before: デフォルトのCubeシーン
After (일본어 지시로 생성된 돌벽 방 + 횃불):
After: 日本語指示で生成した石壁の部屋と松明
덧붙여 말하자면, 카메라의 초기 배치(방 밖에서 수평으로 겨냥하는 위치)에서는 두께 0.4의 솔리드한 벽이 카메라와 실내 사이를 완전히 가려버려서 무지한 회색 이미지로 나타났다. 이는 필자의 장면 구축 코드 측 카메라 배치 실수였으며, 도구 자체의 결함은 아니다. 천장이 없는 방을 상공에서 내려다보는 앵글로 다시 배치하자, 위 After 이미지처럼 실내와 횃불 빛이 비치는 모습으로 바뀌었다. 같은 소켓 연결 상태에서 코드를 여러 번 재실행 및 재렌더링할 수 있는 편리함도 확인할 수 있었다.
추가 검증: 로컬 PC의 실제 AI 클라이언트에서 연결해 보기
여기까지는 클라우드 실행 환경에 GUI 클라이언트가 없어, MCP 클라이언트 역할을 Python으로 직접 만든 스크립트로 대체했다. 나중에 인간이 사용하는 로컬 PC(Windows 11 + Blender 4.5)에서 Claude Code 세션 자체를 실제 MCP 클라이언트로 연결하는 검증을 추가로 진행했다.
공식 Windows 설치 절차는 간단했다.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
uvx mcp-for-blender setup
setup 명령어 하나로 Blender 애드온의 도입 및 활성화, 그리고 발견된 MCP 클라이언트(Claude Desktop・Claude Code・VS Code・Antigravity)에 대한 설정 등록이 한 번에 완료되었다. Blender를 일반 GUI 모드로 실행하자, 추가적인 수동 조작 없이 port 9876에서 소켓 서버가 자동으로 시작되는 것도 확인할 수 있었다. 이는 클라우드 환경에서의 검증(2절)에서 본 'blender --background에서는 작동하지 않는다'는 사양과 일치하는 동작이었다.
$ claude mcp list
blender: C:\Users\matsu\.local\bin\uvx.EXE mcp-for-blender - ✔ Connected
실제로 Claude Code에서 MCP 연결 상태로 execute_blender_code를 호출하고, 토러스와 따뜻한 색감의 포인트 라이트를 추가하여 렌더링하자, 클라우드 환경과 마찬가지로 장면 변화(1 mesh/1 light → 2 mesh/2 light)와 이미지 출력을 확인할 수 있었다. 클라우드의 Linux+Xvfb 환경과 로컬의 Windows+일반 GUI 환경이라는 차이는 있었지만, 도구의 동작 자체는 일치했다.
요약
mcp-for-blender의 'MCP 클라이언트 → MCP 서버 → Blender 애드온 → bpy 실행'이라는 전체 스택은 GPU나 유료 API 키가 없는 Linux 서버 환경에서도 Xvfb를 통해 실제로 작동했다. - blender --background에서는 작동하지 않지만, 이는 도구 측이 의도적으로 거부하는 사양이며, 오류 메시지 및 소스 코드 양쪽 모두 xvfb-run -a blender를 공식적인 대안 수단으로 명시하고 있었다. 도구 안내에 따르기만 하면 해결할 수 있는 종류의 제약이다. - 일본어 자연문 지시로부터 MCP를 통해 Blender의 장면(오브젝트・머티리얼・라이트・카메라)을 실제로 변경하고, 렌더링 이미지로 결과를 확인할 수 있었다.
- 추가 검증으로 로컬 PC의 실제 AI 클라이언트(Claude Code)에서도 동일한 스택이 문제없이 작동하는 것을 확인했다. 클라우드 환경에서의 대체 검증과 로컬에서의 실클라이언트 검증 양쪽에서 결론은 바뀌지 않았다.
Poly Haven의 에셋 가져오기는 앞으로 다른 기회에 시도해 보고 싶다.
출처
Discussion