Blender MCP
공식Blender용 경량 MCP(Model Context Protocol) 서버입니다. Blender의 Python API와 자연어 인터페이스를 제공하여 문서 접근성을 개선하고, 사용자가 복잡한 설정을 탐색하고 이해할 수 있도록 돕습니다.
Blender MCP(으)로 무엇을 할 수 있나요?
- 씬 분석 — 어시스턴트에게 열린 Blender 씬을 분석하고, 화면상 크기에 비해 폴리곤 수가 높은 객체와 같은 성능 저하 요인을 식별하도록 요청하세요.
- 데이터 블록 이름 변경 — 어시스턴트에게 현재 파일의 모든 데이터 블록에서 오타를 수정하거나 설명적인 이름을 제안하도록 지시하고, 승인 후에만 변경 사항을 적용하세요.
- 자연어 쿼리 — 특정 머티리얼을 사용하는 객체 또는 씬에서 가장 높은 폴리곤 수를 가진 객체와 같은 객체 관계를 직접 질의하세요.
- 지오메트리 노드 문서화 — 어시스턴트에게 복잡한 지오메트리 노드 설정을 설명하고, 인라인 문서 프레임을 추가하며, 전체 분석이 포함된 텍스트 데이터 블록을 생성하도록 요청하세요.
- 씬 디버깅 — 어시스턴트에게 현재 프로젝트에서 메시 변형 문제, 셰이딩 아티팩트 또는 비균일 스케일 객체와 같은 문제를 진단하도록 요청하세요.
문서
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 (장면에는 바위가 아닌 자갈 객체만 포함되어 있습니다).
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.