Blender MCP
공식Blender용 경량 MCP(Model Context Protocol) 서버입니다. Blender의 Python API와 자연어 인터페이스를 제공하여 문서 접근성을 개선하고, 사용자가 복잡한 설정을 탐색하고 이해할 수 있도록 돕습니다.
Blender MCP(으)로 무엇을 할 수 있나요?
- 씬 성능 분석 — AI에게 열린 Blender 씬을 분석하고 화면 크기 대비 폴리곤 수가 높은 객체를 식별하도록 요청하세요. 교실 데모 이상치 탐지처럼요.
- 데이터-블록 이름 바꾸기 — 어시스턴트가 현재 파일의 모든 데이터-블록에 대해 오타를 수정하거나 설명적인 이름을 제안하게 하고, 승인 후에만 변경 사항을 적용하세요.
- 자연어 씬 질의 — 객체 관계에 대해 질문하세요. 예: "어떤 객체가 'pebbles' 재질을 사용하고 있나요?" 또는 씬에서 가장 높은 폴리곤 수를 가진 객체를 식별하세요.
- 지오메트리 노드 문서화 — 주요 지오메트리 노드 설정에 대한 설명을 요청하고, 인라인 프레임 문서화와 분석을 요약하는 텍스트 데이터-블록을 포함하세요.
- 씬 디버깅 — 비균일 스케일 메시, 잘못된 노멀, 또는 아마추어로 올바르게 변형되지 않는 객체와 같은 문제를 해결하는 데 도움을 받으세요.
문서
Blender용 경량 MCP(Model Context Protocol) 서버입니다. Blender의 Python API와 자연어 인터페이스를 제공하여 문서 접근성을 높이고, 사용자가 복잡한 설정을 탐색하고 이해할 수 있게 해줍니다.
아키텍처에 대한 기술적 세부 사항과 문서는 소스 코드를 확인하세요.
[!warning] 경고 보안 경고
MCP 서버는 데이터 삭제 또는 원격 위치로의 전송으로부터 데이터를 보호하는 어떤 보호 장치도 없이 LLM이 생성한 코드를 Blender에서 실행합니다. 데이터를 안전하게 유지하려면 가상 머신이나 민감한 정보에 접근할 수 없는 시스템을 사용하는 것이 좋습니다.
설치
Blender에는 LLM에 연결하기 위한 내장 기능이 없습니다.
Blender가 LLM과 연결하려면 세 가지 외부 도구를 수동으로 다운로드, 설치, 실행해야 합니다.
애드온
Blender 세션과 상호작용하려면 MCP 서버 통합을 위한 특정 애드온을 설치해야 합니다.
Blender에 끌어서 놓기(drag & drop)를 사용하는 경우 두 번 수행해야 합니다. 먼저 Blender Lab 저장소를 추가하고, 두 번째로 애드온 자체를 설치합니다. 이 방법을 사용하면 이 애드온의 새 버전이 나올 때 업데이트 알림을 받을 수 있습니다.
LLM 클라이언트
MCP 서버는 잘 정의된 표준을 따르며 다양한 클라이언트와 호환됩니다. LLama.cpp 문서를 따르거나 선호하는 LLM 클라이언트를 설치하세요.
MCP 서버
LLM 클라이언트의 기능에 따라 MCP 서버를 설치하는 방법은 여러 가지가 있습니다.
- MCP 번들:
.mcpb파일을 지원하는 최신 클라이언트의 경우, 릴리스 페이지에서 최신 패키지를 다운로드하세요. Llama.cpp는 아직 이를 지원하지 않습니다. - MCP 서버: 소스 코드에서 설치하려면 Llama.cpp 문서 또는 설정 지침을 확인하세요.
실행
LLM 클라이언트 내에서 MCP 서버를 설정했다면 Blender 장면을 탐색하기 시작할 수 있습니다.

blender-mcp 서버를 실행하는 llama.cpp 웹 인터페이스.
예제 1: 장면 분석
MCP를 사용하여 성능 병목 현상에 대해 장면을 프로그래밍 방식으로 분석할 수 있습니다. 예를 들어 Classroom 데모 파일을 살펴보세요:

Classroom 데모 파일.
이 장면은 Blender 벤치마크 파일 중 하나입니다. 이러한 파일이 벤치마크에 포함된 이유는 아티스트가 만든 실제 프로덕션 파일을 잘 대표하기 때문입니다. 그리고 최적화되기 쉬운 객체가 포함될 수 있다는 것은 놀라운 일이 아닙니다.
폴리곤 수를 확인하는 것만으로 충분한 경우가 많지만, 최종 렌더링에서 얼마나 크게 표시되는지에 따라 폴리곤 수를 플롯하는 것이 더 흥미롭습니다. 이는 다음 프롬프트로 얻을 수 있습니다.
Analyze the scene and list the outliers: objects with highest polygon count but smaller size from the camera point of view.
플롯된 결과 데이터는 나머지와 구별되는 두 객체를 명확하게 보여줍니다: alphabet 및 coat 1:

Classroom 데모 장면의 화면 영역별 폴리곤 수 그래프 분석.
alphabet 객체는 20,000개의 폴리곤을 가지고 있습니다. 평평한 배치 때문에 최종 결과에 큰 손실 없이 텍스처로 대체할 수 있습니다. coat 1 객체는 Subsurf 모디파이어로 인해 37,000개의 폴리곤을 가지고 있습니다. 시스템에서 메모리가 병목 현상이라면 세분화 수준을 낮추면 장면을 완화할 수 있습니다.

알파벳은 장면 뒤쪽에 있어 쉽게 텍스처로 대체할 수 있습니다. 코트도 충분히 멀리 있어 메시를 단순화할 수 있습니다.
[!info] 정보 이 결과는 얼마나 신뢰할 수 있나요?
LLM이 반환한 초기 분석은 뷰포트에 영향을 주는 모디파이어만 고려했습니다.
coat 1객체에는 폴리곤 수를 두 배로 늘리는 Solidify 모디파이어가 있어 더욱 이상치가 됩니다. 이 장면에는 Simplify가 활성화되어 있지 않았지만, 이 설정도 최종 분석에 영향을 미쳤을 것입니다.
예제 2: 다양한 프롬프트
다음은 테스트된 다른 사용 사례 중 일부입니다. 작동하려면 전체 "프롬프트" 내용을 붙여넣어야 합니다. 시작점으로 해당 데모 파일을 사용해야 합니다. 작업의 성공 여부는 사용된 모델에 따라 달라집니다.
| 사용 사례 | 프롬프트 | 데모 파일 | 결과 |
|---|---|---|---|
| 데이터 블록 이름 바꾸기: 오타 수정 | With the current open Blender file fix the name of all the data-blocks to remove typos. Report back which data-blocks got fixed. | Scattering Pebbles | GRP-rocks → GRP-pebble, LGT-Lights → LGT-lights, Compositing Nodetree → Compositing Node Tree |
| 데이터 블록 이름 바꾸기: 더 나은 이름 | With the current open Blender file suggest descriptive names for all data-blocks, and apply if approved. | Scattering Pebbles | Camera → CAM-main, Area → LGT-sun-key, Area.001 → LGT-sun-fill, Area.002 → LGT-area-rim, GEO-pebble.001 → GEO-pebble-B, … |
| 자연어를 사용한 데이터 관계 쿼리 | Which objects are using the following material: pebbles | Scattering Pebbles | 7개 객체: GEO-pebble, GEO-pebble.001, GEO-pebble.002, GEO-pebble.003, GEO-pebble.004, GEO-pebble.005, GEO-pebble.006 |
| 장면 디버깅 | What is the object with the highest poly-count on this file? Ignore objects which are not linked to any scene. | Scattering Pebbles | 4,096개의 면을 가진 GEO-ground. |
| 지오메트리 노드 문서 | With the current open Blender file explain what the main geometry nodes setup is doing. Add inline documentation for it with frame elements. Create a Text data-block with the result of analysis. | Scattering Pebbles | 4개의 주요 색상 코드 프레임 + 설명이 포함된 텍스트 파일. |
아직 탐색되지 않은 다른 프롬프트:
- 모든 데이터 블록을 프랑스어에서 영어로 번역하세요.
- 내 메시가 아마추어에 의해 변형되지 않습니다. 어떻게 고칠 수 있나요?
- Blender가 이 장면을 렌더링하는 동안 메모리가 부족합니다. 어떻게 최적화할 수 있나요?
- 이 메시에 이상한 셰이딩 아티팩트가 있습니다. 어떻게 고칠 수 있나요?
- 잘못된 법선을 가진 메시가 있는 객체를 찾으세요.
- 균일하지 않게 변환된 메시 객체가 있는지 장면을 확인하세요.
- 내보낸 비디오가 웹 브라우저에서 재생되지 않습니다. 어떤 설정을 변경해야 하나요?
- 나무 가지를 만들고 디테일을 추가하는 데 어떤 스컬프트 브러시를 사용해야 하나요?
- 이미지를 SDR과 HDR로 모두 저장하도록 컴포지팅 노드를 설정하세요.
- 이 체크리스트를 확인하세요: 메시는 매니폴드여야 하고, 모든 객체에는 재질이 있어야 하며, 이름은 규칙을 따라야 하고, 절대 경로가 없어야 합니다, … 데이터 블록 이름 바꾸기: 오타 수정
GRP-rocks → GRP-pebbles (장면에는 rocks가 아닌 pebble 객체만 포함되어 있습니다).
LGT-Lights → LGT-lights (일관되지 않은 대소문자).
Compositing Nodetree → Compositing Node Tree (Nodetree는 복합어 오류입니다).
데이터 블록 이름 바꾸기: 더 나은 이름
객체:
Camera→CAM-mainArea→LGT-sun-keyArea.001→LGT-sun-fillArea.002→LGT-area-rimGEO-pebble.001→GEO-pebble-BGEO-pebble.002→GEO-pebble-CGEO-pebble.003→GEO-pebble-DGEO-pebble.004→GEO-pebble-EGEO-pebble.005→GEO-pebble-FGEO-pebble.006→GEO-pebble-G
조명 데이터 블록:
Area→LGT-sun-keyArea.001→LGT-sun-fillArea.002→LGT-area-rim
카메라 데이터 블록:
Camera→CAM-main
텍스처:
Texture→TEX-ground-cloudsTexture.001→TEX-ground-image
장면 및 월드:
World→WLD-environmentScene→SCN-main지오메트리 노드 문서
생성된 새 프레임:

지오메트리 노드 설정에 추가된 문서 프레임.
텍스트 데이터 블록:
GEOMETRY NODES ANALYSIS -- "Pebble Scattering Nodes"
Applied to object: GEO-ground | Modifier: Pebbles
========================================================
OVERVIEW
--------
This node group scatters three size categories of pebble meshes across
the faces of a ground mesh. Each category uses its own density mask
and a global Factor multiplier so that coverage can be art-directed
per-layer without touching the raw mask textures. The three resulting
instance layers are merged with the original ground geometry and sent
to the Group Output.
INPUTS (Group Interface)
------------------------
Geometry -- The ground mesh to scatter pebbles on.
Large Pebbles Mask -- Float mask (e.g. vertex colour / texture) that
defines WHERE large pebbles may appear.
Medium Pebbles Mask-- Float mask for medium pebble placement regions.
Small Pebbles Mask -- Float mask for small pebble placement regions.
Factor -- Global density multiplier shared by all three
lanes (appears three times in the interface,
one per lane).
NODE GRAPH -- LANE BY LANE
--------------------------
+- LARGE PEBBLES LANE -----------------------------------------------------+
| Source object : GEO-pebble |
| Group Input.001 |
| +- Geometry ------------------------> Distribute Points on Faces |
| +- Large Pebbles Mask ------------> Distribute Points on Faces |
| | (Density Factor socket) |
| +- Factor --> Math.003 (x) -------> Distribute Points on Faces |
| (Density Max socket) |
| Distribute Points on Faces ----------> Instance on Points |
| Object Info (GEO-pebble) -----------> Instance on Points (Instance) |
| Random Rotation.001 [-pi, +pi] -----> Instance on Points (Rotation) |
| Random Value [0.25 - 0.60] -------> Instance on Points (Scale) |
| Instance on Points ------------------> Join Geometry.003 |
+--------------------------------------------------------------------------+
+- MEDIUM PEBBLES LANE ----------------------------------------------------+
| Source object : GEO-pebble.004 |
| Group Input.002 |
| +- Geometry ------------------------> Distribute Points on Faces.001 |
| +- Medium Pebbles Mask -----------> Math.004 (x) --> Math.005 (x) |
| +- Factor ------------------------> Math.005 (x) |
| Math.005 output --------------> Distribute Points on Faces.001 |
| (Density socket) |
| Distribute Points on Faces.001 -----> Instance on Points.001 |
| Object Info.001 (GEO-pebble.004) --> Instance on Points.001 |
| Random Rotation.002 [-pi, +pi] ----> Instance on Points.001 |
| Random Value.002 [0.25 - 0.45] -----> Instance on Points.001 |
| Instance on Points.001 -------------> Join Geometry.003 |
+--------------------------------------------------------------------------+
+- SMALL PEBBLES LANE -----------------------------------------------------+
| Source object : GEO-pebble.002 |
| Group Input.003 |
| +- Geometry ------------------------> Distribute Points on Faces.002 |
| +- Small Pebbles Mask -----------> Math.006 (x) --> Math.007 (x) |
| +- Factor ------------------------> Math.006 (x) |
| Math.007 output --------------> Distribute Points on Faces.002 |
| (Density socket) |
| Distribute Points on Faces.002 -----> Instance on Points.002 |
| Object Info.002 (GEO-pebble.002) --> Instance on Points.002 |
| Random Rotation [-pi, +pi] ----> Instance on Points.002 |
| Random Value.003 [0.10 - 0.35] -----> Instance on Points.002 |
| Instance on Points.002 -------------> Join Geometry.003 |
+--------------------------------------------------------------------------+
+- MERGE & OUTPUT ---------------------------------------------------------+
| Group Input.004 |
| +- Geometry (pass-through) --------> Join Geometry.003 |
| Join Geometry.003 |
| (inputs: large instances + medium instances + |
| small instances + original ground geo) |
| +- Geometry -----------------------> Group Output |
+--------------------------------------------------------------------------+
SCALE RANGES (uniform, per lane)
---------------------------------
Large pebbles : 0.25 - 0.60
Medium pebbles : 0.25 - 0.45
Small pebbles : 0.10 - 0.35
ROTATION (all lanes)
---------------------
All three axes randomised independently over [-pi, +pi],
giving each pebble instance a fully random orientation.
DENSITY CONTROL PATTERN (Medium & Small lanes)
-----------------------------------------------
The mask value and the Factor are first multiplied together
(Math.004 / Math.006), then that product is multiplied again
by a second value (Math.005 / Math.007) before being fed into
the Density socket. This two-stage multiply gives a non-linear
response curve, making the density fall off more aggressively
near the mask edges.
The Large lane uses a different (single-stage) approach:
the Density Factor socket receives the mask directly, and the
Factor is only used to scale Density Max via Math.003.
NOTES & SUGGESTIONS
--------------------
* The node group has no Seed input exposed; adding one would allow
re-randomising all three layers simultaneously without touching
individual nodes.
* The Factor input currently appears three times (once per lane).
Merging them into a single shared socket would simplify the
modifier panel.
* Consider labelling the unlabelled Math nodes (Math.003-.007)
and Random Value nodes to aid future maintenance.