1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code と Blender を MCP でつないで「机」を自動モデリングする

1
Last updated at Posted at 2026-05-29

Claude Code から Blender を操作できる 公式 MCP サーバーblender.org/lab/mcp-server)を使い、自然言語の指示だけで机を 3D モデリングするまでの手順をまとめます。

実際にハマったポイント(公式版とサードパーティ版の取り違え、レンダリング時のオブジェクト消失など)も含めて記録しています。

動作環境

  • Blender 5.1.2(EEVEE)
  • Claude Code(CLI)
  • macOS / uvuvx), git インストール済み

完成イメージ:

完成した机のレンダリング


0. 前提:Blender MCP には「公式」と「サードパーティ」がある

ここが最初の落とし穴です。blender-mcp という名前のものが 2 つ存在します。

公式(blender.org) サードパーティ(ahujasid 製)
入手元 Blender 公式フォージ projects.blender.org/lab/blender_mcp PyPI の blender-mcp
アドオン 公式 Lab 拡張リポジトリから追加 GitHub の addon.py を手動インストール
起動コマンド uvx --from "git+https://projects.blender.org/lab/blender_mcp.git#subdirectory=mcp" blender-mcp uvx blender-mcp
接続 UI アドオンのプリファレンス内(Start/Stop) 3D ビューの N パネル「BlenderMCP」タブ

パッケージ名がどちらも blender-mcp のため、uvx blender-mcp と書くと PyPI 版(サードパーティ)が起動します。
公式アドオンを入れているのにサーバー側がサードパーティ版だと、プロトコルが噛み合わず通信が壊れます

💡 症状:接続はできるのに、すべての応答が
Incomplete JSON response received
になる場合、まずこの「公式アドオン × サードパーティサーバー」のミスマッチを疑ってください(私はこれで詰まり、両者を公式に揃えたら解消しました)。

この記事では 公式アドオン + 公式サーバー に揃える手順を説明します。


1. Blender 側:公式アドオンを入れて有効化する

公式の最短手順は、ページ内のインストールリンクを Blender にドラッグする方法です。

  1. Blender を起動
  2. blender.org/lab/mcp-server を開き、インストールリンクを Blender のウィンドウにドラッグする
    • 初回は Lab 拡張リポジトリ(https://lab.blender.org/)の追加を求められるので許可し、もう一度ドラッグするとインストールされる
  3. 編集 > プリファレンス > アドオン で「MCP」を検索し、有効(チェック)になっていることを確認

Blender アドオン設定画面


2. Claude Code 側:MCP サーバーを「公式」に設定する

Claude Code に登録されている blender サーバーを、公式(git 版)に差し替えます。

# 既存の blender 設定を削除(サードパーティ版が入っている場合)
claude mcp remove blender -s user

# 公式サーバー(git 版)を登録
claude mcp add blender -s user -- \
  uvx --from "git+https://projects.blender.org/lab/blender_mcp.git#subdirectory=mcp" blender-mcp

設定内容の意味:

項目
取得元 Blender 公式フォージの mcp サブディレクトリ
起動方法 uvx が git からクローン&ビルドして stdio サーバーを起動
費用 OSS・無料(ローカル動作のみ)

登録できたか確認:

claude mcp list
blender: uvx --from git+https://projects.blender.org/lab/blender_mcp.git#subdirectory=mcp blender-mcp - ...

⚠️ MCP サーバーは Claude Code の起動時に読み込まれます。設定後は Claude Code を再起動してください。
初回起動時に git クローン&ビルドが走るため、少し時間がかかります。


3. Blender でサーバーを起動する(接続)

⚠️ サードパーティ版(ahujasid)は 3D ビューの N パネルに「BlenderMCP」タブができ、そこの Connect で接続します。
しかし公式アドオンには N パネルのタブはありません。接続(サーバー起動)は アドオンのプリファレンス内で行います。

  1. 編集 > プリファレンス > アドオン を開き、検索で「MCP」を絞り込む
  2. MCP アドオンの行を展開(> する
  3. プリファレンス内で設定・操作する
    • Host: localhost / Port: 9876(既定値のままで OK)
    • Auto Start を ON にすると Blender 起動時に自動でサーバーが立ち上がる
    • Start MCP Server を押すと開始(起動中は Stop MCP Server に変わり、下に Server is running と表示される)

MCP アドオンのプリファレンス:Host/Port と Start/Stop(Server is running 表示)

オペレーターとしては blmcp.server_start / blmcp.server_stop が割り当てられています。


4. 接続確認

Claude Code 側でシーン情報を取得できれば接続成功です。Claude には自然言語で頼むだけで、内部的に MCP ツール(get_objects_summary など)が呼ばれます。

例:「Blender のシーンの状態を教えて」

返ってくる JSON の例(初期シーン):

{
  "scene_name": "Scene",
  "active_object": "Cube",
  "collections": [
    { "name": "Collection",
      "objects": [
        {"name": "Camera", "type": "CAMERA"},
        {"name": "Cube",   "type": "MESH"},
        {"name": "Light",  "type": "LIGHT"}
      ]}
  ]
}

5. 机を作る

Claude Code に自然言語で指示するだけです。

「Blender で机を作成して。幅120×奥行60×高さ75cmの木製デスクで。」

Claude が内部で execute_blender_code ツールを使い、bpy の Python スクリプトを生成・実行します。実際に生成・実行されたスクリプトの例:

import bpy

# ---- パラメータ(メートル単位) ----
W, D, H = 1.2, 0.6, 0.75   # 幅 / 奥行 / 高さ
TOP_T = 0.04               # 天板の厚み
LEG = 0.05                 # 脚の角材サイズ
INSET = 0.04               # 端からの脚の差し込み量

def new_cube(name, size, location):
    bpy.ops.mesh.primitive_cube_add(size=1.0, location=location)
    ob = bpy.context.active_object
    ob.name = name
    ob.scale = size
    bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
    return ob

# 天板
top = new_cube("Desk_Top", (W, D, TOP_T), (0, 0, H - TOP_T/2))

# 脚 4 本
leg_h = H - TOP_T
dx, dy = W/2 - LEG/2 - INSET, D/2 - LEG/2 - INSET
legs = []
for i, (x, y) in enumerate([(dx, dy), (-dx, dy), (dx, -dy), (-dx, -dy)], 1):
    legs.append(new_cube(f"Desk_Leg_{i}", (LEG, LEG, leg_h), (x, y, leg_h/2)))

# 脚を天板の子にしてグループ化
for leg in legs:
    leg.parent = top
    leg.matrix_parent_inverse = top.matrix_world.inverted()

ハマりどころ① マテリアルのノード名がローカライズされる

「プリンシプル BSDF」に色を設定しようとして nodes.get("Principled BSDF") を使うと、
日本語 UI では実際のノード名が「プリンシプル BSDF」になっていて取得できません
名前ではなくノードの種類(bl_idname)で取得するのが安全です。

mat = bpy.data.materials.new("Desk_Wood")
mat.use_nodes = True
nt = mat.node_tree

# ❌ 名前指定はローカライズで失敗することがある
# bsdf = nt.nodes.get("Principled BSDF")

# ✅ 種類で取得する
bsdf = next(n for n in nt.nodes if n.bl_idname == 'ShaderNodeBsdfPrincipled')
bsdf.inputs["Base Color"].default_value = (0.30, 0.16, 0.07, 1.0)  # 木の茶色

ハマりどころ② 初期 Cube が机に重なって見えない

初期シーンの Cube2m 角で原点にあります。高さ 75cm の机はその内側に埋もれて見えません。
邪魔なら非表示にします(削除せず残す場合)。

cube = bpy.data.objects.get("Cube")
cube.hide_viewport = True   # ビューポートで非表示
cube.hide_render  = True    # ★ レンダーでも非表示にするにはこちらも必要

⚠️ hide_viewportビューポートだけの非表示です。
レンダリング画像に写り込ませたくない場合は hide_render = True も必須です(これを忘れて初期 Cube が全面に写り込みました)。


6. 引き出しを追加する

同じく自然言語で追加を依頼できます。

「天板の中央真下に、横長で浅い引き出しを 1 段追加して。取っ手は金属調で。」

生成されるスクリプトのポイントは「前板・箱本体・取っ手」を作り、すべて天板(Desk_Top)のにして机と一体で動くようにすることです。

# 前板 / 箱本体 / 取っ手 を作成し…
for ob in (front, body, handle):
    ob.parent = top                                   # 天板の子にする
    ob.matrix_parent_inverse = top.matrix_world.inverted()

取っ手は金属マテリアル(Metallic = 1.0)で差し色にしています。


7. 保存する

desk.blend として保存して。」

import os, bpy

# 注意: bpy は "~" を自動展開しないので os.path.expanduser で展開する
path = os.path.expanduser("~/your-project/desk.blend")
bpy.ops.wm.save_as_mainfile(filepath=path)

保存に成功すると Blender のログに 情報: 「desk.blend」で保存しました と出ます。


まとめ

  • blender-mcp には公式(git)とサードパーティ(PyPI)の同名パッケージがあり、アドオンとペアを揃える必要がある
  • 接続できるのに Incomplete JSON が続く → 公式 × サードパーティのミスマッチを疑う
  • 公式サーバーは uvx --from "git+https://projects.blender.org/lab/blender_mcp.git#subdirectory=mcp" blender-mcp で起動
  • 公式アドオンの接続はプリファレンス内の Start MCP Server / Auto Start(N パネルの Connect ボタンはサードパーティ版)
  • MCP 設定変更後は Claude Code の再起動が必要
  • 自然言語の指示だけで、Claude が bpy スクリプトを書いて Blender を操作してくれる
  • 日本語 UI ではノード名のローカライズ、レンダーでは hide_render に注意

自然言語で「机を作って」「引き出しを足して」と言うだけで、3D モデルが組み上がっていくのはなかなか体験として新しいです。ぜひ試してみてください。


参考リンク

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?