Blender MCP
公式Blender用の軽量MCP(Model Context Protocol)サーバーです。BlenderのPython APIと自然言語インターフェースを提供し、ドキュメントへのアクセスを向上させ、複雑な設定の探索と理解を可能にします。
Blender MCPで何ができますか?
- シーン性能分析 — AIに開いているBlenderシーンを分析させ、画面上のサイズに対してポリゴン数が多いオブジェクトを特定させます。教室デモの外れ値検出のようなものです。
- データブロックの名前変更 — アシスタントに現在のファイル内の全データブロックのタイプミス修正や説明的な名前の提案をさせ、承認後にのみ変更を適用します。
- 自然言語によるシーンクエリ — オブジェクト間の関係について質問します。例:「どのオブジェクトがマテリアル『pebbles』を使用していますか?」や、シーン内で最もポリゴン数の多いオブジェクトを特定するなど。
- Geometry Nodesのドキュメント化 — メインのジオメトリノード設定の説明を依頼し、インラインフレームのドキュメントと分析をまとめたテキストデータブロックを作成します。
- シーンのデバッグ — 非一様スケールのメッシュ、不良な法線、アーマチュアで正しく変形しないオブジェクトなどの問題のトラブルシューティング支援を得ます。
ドキュメント
Blender用の軽量MCP(Model Context Protocol)サーバーです。BlenderのPython APIに対する自然言語インターフェースを提供し、ドキュメントへのアクセスを改善し、複雑なセットアップを探索・理解できるようにします。
アーキテクチャの技術詳細とドキュメントについては、ソースコードを参照してください。
[!warning] 警告 セキュリティ警告
このMCPサーバーは、LLMが生成したコードをBlender内で実行しますが、データの削除やリモートへの送信から保護するためのガードは一切ありません。データを安全に保つためには、仮想マシンまたは機密情報にアクセスできないシステムを使用することをお勧めします。
インストール
BlenderにはLLMに接続するための組み込み機能はありません。
BlenderをLLMに接続するには、3つの外部ツールを手動でダウンロード、インストール、実行する必要があります。
アドオン
Blenderセッションと対話するには、MCPサーバー統合用の特定のアドオンをインストールする必要があります。
…またはダウンロードしてディスクからインストールします。
Blenderにドラッグ&ドロップする場合は、2回行う必要があります。最初に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ベンチマークファイルの1つです。これらのファイルがベンチマークに含まれる理由は、アーティストが作成した実際のプロダクションファイルをよく代表しているからです。そして、最適化されやすいオブジェクトが含まれていることは驚くことではありません。
ポリゴン数を確認するだけでも十分なことが多いですが、さらに興味深いのは、最終レンダーでの表示サイズに基づいてポリゴン数をプロットすることです。これは次のプロンプトで取得できます。
Analyze the scene and list the outliers: objects with highest polygon count but smaller size from the camera point of view.
プロットされた結果データは、他のオブジェクトから明確に際立つ2つのオブジェクトを示しています:alphabetとcoat 1:

Classroomデモシーンの画面領域ごとのポリゴン数のグラフ分析。
alphabetオブジェクトは20kポリゴンです。平らな配置のため、最終結果にほとんど影響を与えずにテクスチャに置き換えることができます。coat 1オブジェクトはSubsurfモディファイアのため37kポリゴンです。サブディビジョンレベルを下げることで、メモリがシステムのボトルネックである場合にシーンを軽減できます。

アルファベットはシーンの後ろにあり、簡単にテクスチャに置き換えることができます。コートも十分に遠くにあるため、メッシュを簡素化できます。
[!info] 情報 これらの結果はどの程度信頼できますか?
LLMが返した初期分析では、ビューポートに影響を与えるモディファイアのみが考慮されていました。
coat 1オブジェクトにはSolidifyモディファイアがあり、ポリゴン数が2倍になるため、さらに外れ値になります。また、このシーンでは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がこのシーンのレンダリング中にメモリ不足になっています。どうすれば最適化できますか?
- このメッシュに奇妙なシェーディングアーティファクトがあります。どうすれば修正できますか?
- 法線が悪いメッシュを持つオブジェクトを見つけます。
- 非一様に変換されたメッシュオブジェクトがないかシーンを確認します。
- エクスポートしたビデオがWebブラウザで再生されません。どの設定を変更すればよいですか?
- 木の枝を作成および詳細化するには、どのスカルプトブラシを使用すればよいですか?
- 画像を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.