Blender MCP は、Claude などのAIクライアントから 3DCG ソフト Blender を操作するためのMCPサーバーです。GitHub の star は 26,360、fork 2,494 と MCP サーバーの中でも突出した規模ですが、Blender 公式ではなく個人が公開しているコミュニティプラグインです。本記事では実際に v1.8.7 をインストールし、25ツール・6,480トークンという常駐コストと、既定で有効なテレメトリが何を送っているのかをソースと実行の両方で確かめます。
30秒でわかる Blender MCP
・Blender公式ではない。個人作のコミュニティプラグイン(MIT・★26,360)。規模の大きさで公式と誤解されやすい
・実測 25ツール・25,678バイト・6,480トークン。ツール数が近い Notion MCP ローカル版(24ツール・21,831トークン)の約3分の1と軽い
・Blender未起動でもサーバーは起動しツール一覧も返るが、呼び出しはすべて失敗する(fail-open な一覧・fail-closed な実行)
・テレメトリは enabled = True で出荷。匿名の利用統計は同意なしで送信、プロンプト・コード・スクリーンショットは同意後のみ
・確実な停止は環境変数 DISABLE_TELEMETRY=true(実測でログ確認済み)
MCPサーバーの仕組みそのものはMCPサーバーの作り方2026年完全ガイド:TypeScript・Python両対応チュートリアルにまとめてあります。本記事は既製サーバーを繋ぐ側の実測に絞ります。
Blender MCPとは——AIにBlenderを操作させるコミュニティプラグイン
Blender MCP は、MCPクライアント(Claude Code、Claude Desktop、Cursor など)から Blender のシーンを読み書きできるようにするサーバーです。「球を10個ランダムに配置して」「このオブジェクトに木材のテクスチャを貼って」といった指示を、AIが Blender の Python API 呼び出しに変換して実行します。
実測時点の事実を整理します。
| 項目 | 実測値(2026-08-27) |
|---|---|
| リポジトリ | ahujasid/blender-mcp |
| star / fork | 26,360 / 2,494 |
| ライセンス | MIT |
| 最終push | 2026-08-26(活発) |
| オープンIssue | 18件 |
| PyPI 最新 | 1.8.7(2026-08-24 アップロード) |
| 公開開始 | 2025-03-07 |
| Python要件 | >=3.10 |
| 依存 | mcp<2,>=1.9.0 / httpx>=0.27.0 の2つだけ |
依存が2つしかないのは特筆すべき点です。仮想環境のサイズも実測 33MB で、Node製のMCPサーバーが node_modules で数十MBを消費しがちなのと比べると軽量です。依存が少ないことは、サプライチェーン上の攻撃面が小さいという意味でも評価できます。MCPサーバーはAIに外部操作の権限を渡す位置にあるため、間接依存の数はそれ自体がリスク指標になります。
fork が 2,494 と star 比で約9.5%あるのも、この種のツールとしては高い比率です。Blender のバージョンやOS環境ごとに手元で改変して使うケースが多いことを示唆しますが、fork の内訳までは本記事では未検証です。
ひとつ、バージョン表記に食い違いがあります。PyPI のパッケージバージョンは 1.8.7 ですが、MCPの initialize に対してサーバーが名乗る serverInfo.version は 1.29.1 でした。
serverInfo: {"name": "BlenderMCP", "version": "1.29.1"}
どちらが「本当のバージョン」なのかはリポジトリの記述からは判別できず、本記事では未検証です。バグ報告をするときは、PyPI のバージョンと serverInfo の両方を書き添えるのが安全です。
AIに3DCGソフトを操作させるという発想自体は新しくありませんが、Blender MCP が広く使われた理由は導入の軽さにあります。Blender の Python コンソールを人間が叩く代わりに、自然言語をAIが bpy の呼び出しへ翻訳する——その仲介だけに徹しており、独自のDSLもプロジェクト形式も導入しません。学習コストが実質ゼロである一方、後述するとおり「AIが任意のPythonを実行できる」という設計上の含意もそのまま引き継いでいます。
Blender MCP のインストールと使い方
導入は2つのパートに分かれます。MCPサーバー側と、Blender側のアドオンです。片方だけでは動きません。
MCPサーバー側
PyPI から入ります。実行ファイル名は blender-mcp です。
uv venv
uv pip install blender-mcp==1.8.7
MCPクライアントへの登録は、Claude Code なら次のとおりです。
claude mcp add blender -- /path/to/.venv/bin/blender-mcp
Blender側のアドオン
リポジトリの addon.py を Blender の Preferences > Add-ons からインストールし、有効化します。アドオンが localhost でソケットを開き、MCPサーバーがそこへ接続する構成です。
サーバー起動時のログに、アドオンの場所を探した形跡が残ります。
Could not find a Blender addons folder. If Blender is installed,
set BLENDERMCP_ADDONS_DIR, or install addon.py manually from the repo.
BLENDERMCP_ADDONS_DIR という環境変数でアドオンの配置先を明示できることが、このログから分かります。READMEの手順で見つからない場合の逃げ道になります。
本記事の環境には Blender をインストールしていないため、実際にシーンを生成・編集するところまでは未検証です。 以降の実測は、MCPサーバー単体で観測できる範囲(ツール定義・接続失敗時の挙動・テレメトリ)に限られます。
接続できているかの確認手順
導入直後は「どこまで通っているか」が分かりにくいので、切り分けの順番を決めておくと早いです。
・MCPサーバーが起動しているか:クライアントのMCP一覧に blender が出て、ツールが25個見えていれば起動しています。ただし後述のとおりこれはBlenderが動いていなくても成立するので、ここで安心しないこと
・Blender側アドオンが待ち受けているか:get_addon_status を呼びます。ここで応答があればソケットは繋がっています
・シーンに触れるか:get_scene_info を呼びます。ここまで通れば実用状態です
get_addon_status で失敗する場合、原因はほぼ「Blenderが起動していない」「アドオンを有効化していない」「アドオンのサーバーを開始していない」のいずれかです。アドオンの配置先が見つからないというログが出ている場合は、BLENDERMCP_ADDONS_DIR で明示します。
【実測】25ツールで6,480トークン——MCP連携の常駐コストは何で決まるか
MCPサーバーを接続すると、ツール定義がコンテキストに常駐します。stdio で initialize → tools/list を投げて実測しました。
| 項目 | 実測値 |
|---|---|
| ツール数 | 25 |
tools/list のバイト数 |
25,678 |
| トークン数(cl100k_base) | 6,480 |
| うち説明文のバイト数 | 14,042 |
ここで面白いのは、同じ実測方法で測った Notion MCPとは|ホスト版とローカル版の違いを24ツール・21,831トークン実測で解説 との比較です。
| サーバー | ツール数 | トークン | 説明文バイト |
|---|---|---|---|
| Blender MCP | 25 | 6,480 | 14,042 |
| Notion MCP(ローカル版 v2.5.1) | 24 | 21,831 | 1,855 |
ツール数はほぼ同じなのに3.4倍の差がつきます。原因は説明文とスキーマの比率が正反対だからです。Blender MCP は説明文が全体の半分以上を占め、引数は user_prompt や単純な文字列・数値が中心です。一方 Notion MCP のローカル版は Notion REST API の OpenAPI 定義から機械生成しており、リクエストボディの深いネストがそのまま JSON Schema として展開されます。
「ツールが多い=重い」ではありません。 重さを決めるのは引数スキーマの複雑さです。MCPサーバーを選ぶとき、あるいは自作するときは、ツール数より引数設計を見るほうが実態に近い見積もりになります。
ツール構成を見ると、Blender操作そのもの以外に外部アセットサービスとの連携が多いことが分かります。
| 分類 | ツール |
|---|---|
| Blender操作 | get_scene_info / get_object_info / get_viewport_screenshot / execute_blender_code |
| Poly Haven(HDRI・テクスチャ) | get_polyhaven_categories / search_polyhaven_assets / download_polyhaven_asset / set_texture |
| Sketchfab(3Dモデル) | search_sketchfab_models / get_sketchfab_model_preview / download_sketchfab_model |
| Hyper3D Rodin(生成AI) | generate_hyper3d_model_via_text / generate_hyper3d_model_via_images / poll_rodin_job_status |
| Hunyuan3D(生成AI) | generate_hunyuan3d_model / poll_hunyuan3d_job_status |
| 運用・計測 | get_addon_status / disable_telemetry / record_trajectory_feedback |
25個のうち11個が外部の3Dアセット・生成AIサービス連携です。Blender を操作するだけなら不要なツールも常駐するので、使わないサービスがあるなら、その分のトークンは払い損になります。
【実測】テレメトリは既定で有効——何が同意なしで送られるのか
ツール一覧に disable_telemetry があることに気づいたので、実装を確認しました。
config.py の設定はこうなっています。
@dataclass
class TelemetryConfig:
supabase_url: str = "https://yzasssndwqceclzilcdu.supabase.co"
enabled: bool = True
supabase_bucket: str = "telemetry-screenshots"
trajectory_steps_table: str = "trajectory_steps"
enabled の既定値は True です。送信先は Supabase で、スクリーンショット用のバケット名まで定義されています。
ただし 「スクリーンショットが勝手に送られる」わけではありません。 実装は2段構えで、telemetry.py の該当箇所にコメント付きで明記されています。
同意が無い場合、コードは次を明示的に落とします。
・prompt_text = None(ユーザーのプロンプト本文)
・metadata = None(コード片・パラメータ・スクリーンショット・シーン情報)
・error_message は「Error occurred (details withheld without consent)」に置換
一方、同意の有無にかかわらず送られるのは次です。
・customer_uuid(インストール識別子・永続)
・session_id / timestamp / platform(OS)/ version
・tool_name(どのツールを呼んだか)/ success / duration_ms
・blender_version
つまり 匿名利用統計は opt-out、プライベートデータは opt-in という設計です。ただし customer_uuid は永続的なインストール識別子なので、厳密には「匿名」ではなく「仮名」です。同一マシンからの利用は横断的に紐付きます。
止め方——環境変数が確実
MCPツールの disable_telemetry は、実装を読むと Blender 本体に set_telemetry_consent を送る構成です。つまり Blender が起動していないと機能しません。実際に Blender 無しで呼んでみました。
Error turning off data collection: Could not connect to Blender.
Make sure the Blender addon is running.
ここで1点、注意すべき挙動があります。 この失敗レスポンスは、MCPプロトコル上 isError: false で返ってきました。テキストとしては「エラー」と書かれているのに、プロトコルレベルでは成功扱いです。AIクライアントが isError を見て成否を判断していると、オプトアウトに失敗したのに成功したと解釈する可能性があります(同じサーバーの get_scene_info は失敗時にきちんと isError: true を返したので、disable_telemetry 固有の扱いです)。
確実なのは環境変数です。telemetry.py は3つの名前を受け付けます。
DISABLE_TELEMETRY=true blender-mcp
# BLENDER_MCP_DISABLE_TELEMETRY / MCP_DISABLE_TELEMETRY も同じ効果
# 受け付ける値: true / 1 / yes / on(大文字小文字は問わない)
実際に DISABLE_TELEMETRY=true を付けて起動すると、ログに次が出ることを確認しました。
blender-mcp-telemetry - WARNING - Telemetry disabled via environment variable
これは同意ゲートより手前で送信機構ごと無効化するため、Blender の起動状態に依存しません。業務環境で使うなら、MCPクライアントの設定でこの環境変数を渡しておくのが安全側です。
Blender未起動時の挙動——一覧は返るが実行は通らない
Blender を起動せずにサーバーだけ動かしたときの挙動を整理します。
・initialize → 成功(serverInfo: BlenderMCP 1.29.1)
・tools/list → 成功。25ツールすべて返る
・tools/call → 失敗。「Could not connect to Blender」
・起動時ログ → Failed to connect to Blender: [Errno 61] Connection refused
Errno 61 は macOS の ECONNREFUSED で、localhost のソケットに誰も待ち受けていないことを意味します。接続の流れを図にすると、どこで切れているのかがはっきりします。
(MCPサーバー)" participant A as "Blenderアドオン
(localhostソケット)" AI->>S: "initialize" S-->>AI: "成功 BlenderMCP 1.29.1" AI->>S: "tools/list" S-->>AI: "成功 25ツール・6,480トークン" Note over AI,S: "ここまでBlenderは不要" AI->>S: "tools/call get_scene_info" S->>A: "ソケット接続" A--xS: "Errno 61 Connection refused" S-->>AI: "Could not connect to Blender" Note over S,A: "Blender本体+アドオンの両方が要る"
この「一覧は fail-open、実行は fail-closed」というパターンは、Notion MCP ローカル版でも同じでした。MCPサーバー一般に共通する構造と考えてよさそうです。実務上の含意は同じで、繋がっていなくてもトークンは消費されるということです。Blender を使わない日もMCPサーバーを繋ぎっぱなしにしていると、6,480トークンを毎セッション払い続けます。
なお、ツール呼び出しの引数検証は pydantic で行われており、必須引数を省くと次のように弾かれます。
Error executing tool get_scene_info: 1 validation error for get_scene_infoArguments
user_prompt Field required [type=missing, ...]
ほぼ全ツールが user_prompt を必須引数として要求する設計です。これはテレメトリでプロンプト本文を収集するための引数でもあるため、同意していない場合はサーバー側で破棄されます。
実務で使うときの判断材料
規模と公式性を混同しない。 ★26,360 は MCP サーバーとしては最大級ですが、Blender Foundation とは無関係です。業務で使うなら、コミュニティプラグインであることを前提にした評価が要ります。オープンIssue が18件と少なく、最終pushが実測日の前日という点は、メンテナンスが活発である積極的な材料です。
execute_blender_code の意味を理解しておく。 このツールはAIが生成した任意のPythonコードを Blender 上で実行します。Blender の Python API(bpy)は標準ライブラリをそのまま呼べるため、ファイルシステムへの読み書きもネットワークアクセスも原理的に可能です。これはサンドボックスではありません。 MCPサーバーが動いているOSユーザーの権限がそのまま及びます。
このため、次のような構成は避けるべきです。外部から取り込んだテキスト(Web検索結果、他人から受け取った .blend の説明文、共有ドキュメント)をそのままAIに読ませたうえで Blender MCP を接続しておく、という組み合わせです。プロンプトインジェクションが成立すると execute_blender_code が攻撃者の意図した任意コードの実行口になります。信頼できる入力だけを扱うセッションに限定するのが現実的な運用です。
アセットの取得先を確認する。 前述のとおり Sketchfab・Poly Haven からのダウンロードツールが既定で有効です。社内ネットワークで外部ダウンロードに制限がある環境では、これらのツールが失敗する前提で運用計画を立ててください。
テレメトリは環境変数で止める。 MCPツール経由の停止は Blender 起動が前提で、しかも失敗が isError: false で返ります。設定ファイルに環境変数を書くほうが確実です。
Blender MCP 使い方の情報は版のズレに注意する。 PyPI が 1.8.7、serverInfo が 1.29.1 と2系統の版数が併存しているため、ネット上の手順がどの版のものか判別しづらい状態です。ツール名は比較的安定していますが、引数(特に全ツールが要求する user_prompt)は途中で追加された可能性が高く、古い記事のコード例がそのままでは通らないことがあります。手元の tools/list を1回取って、実際の引数定義を見るのが最短です。
トークン予算を確認する。 6,480トークンは軽いほうですが、複数サーバーを繋ぐと積み上がります。ツールセット単位で絞り込める設計もあり、Backlog MCPとは|62ツール11,710トークンとENABLE_TOOLSETSでの半減を実測では ENABLE_TOOLSETS で46%削減できることを実測しました。Blender MCP には同等の絞り込み機構が無いため、25ツール全部を載せるか繋がないかの二択になります。MCPサーバーのコストの測り方はx64dbg-MCP Serverとは|AIにデバッガを操作させるZig製MCPプラグイン71ツール実測でも71ツール規模で扱っており、あわせて見ると規模感がつかめます。
まとめ
・Blender MCP は★26,360のコミュニティプラグイン。Blender公式ではない(MIT・作者は個人)
・実測 25ツール・25,678バイト・6,480トークン。依存2つ・仮想環境33MBと軽量
・ツール数が近い Notion MCP ローカル版より3.4倍軽い。差は引数スキーマの複雑さで決まる
・テレメトリは enabled = True で出荷。匿名統計は opt-out、プロンプト・コード・スクリーンショットは opt-in の2段構え
・停止は DISABLE_TELEMETRY=true(実測確認済み)。MCPツールの disable_telemetry は Blender 起動が前提で、失敗しても isError: false を返す
・Blender未起動でもツール一覧は返るので、繋ぎっぱなしはトークンの払い損になる
MCP 連携を評価するときに効くのは、README に書かれた機能一覧ではなく、繋いだ瞬間から発生する固定費と、既定で開いている経路です。Blender MCP の場合それは 6,480トークンと、テレメトリ送信・外部アセットダウンロード・任意Python実行の3つでした。いずれも止める手段は用意されていますが、既定では有効という点が判断の分かれ目になります。
本記事では Blender 本体を用意していないため、シーン生成・テクスチャ適用など実際の3D操作は未検証です。そこを確かめたい場合は、Blender とアドオンを入れたうえで get_scene_info が通るところから始めてください。
参照ソース
- ahujasid/blender-mcp — 公式リポジトリ。star・fork・ライセンス・最終push(2026-08-27 参照)
- blender-mcp — PyPI — バージョン履歴・依存関係・Python要件(2026-08-27 参照)
- 配布物
blender_mcp/config.py/telemetry.py(v1.8.7) — テレメトリ設定・同意ゲート・環境変数による無効化の実装(2026-08-27 実測) - Model Context Protocol 仕様 —
tools/list/tools/callとisErrorの定義(2026-08-27 参照)