具体例から見るMCP ~Blender MCPからMCPの雰囲気をつかむ~
こんにちは、株式会社Berryの古荘です!
私は今年2月に入社し、以降ヘルメット作成を効率化するための3DCGのツール開発などを行っています。
さて、先日Berryでは様々なAIを触るもくもく会が開催されたのですが、私は以下の理由からBlender MCPを触ってみました。
- 最近話題のMCP(Model Context Protocol)が何なのかよくわかっていなかった
- Blender × AI で何ができるのか気になった
本記事は、上記の会やその後のコードリーディングで得られた知見をまとめたものです。MCPの具体例であるBlender MCPを使うところから始め、MCPの一側面を見ていきます。MCPそのものの定義・仕様については触れません。
MCPって最近よく聞くけどなんだかいまいちピンとこないな、という方の一助になれば幸いです。
Blender MCP を使ってみる
claude for desktopにBlender MCPを設定し、BlenderアドオンでMCPサーバーの接続を待つと、以下のようにclaudeから対話式でBlenderを操作できるようになります。具体的な導入方法については、公式のinstallをご参照ください。
claude × Blenderによるモデル生成とモデル編集
以下は例として「Blenderでローポリの猫を作ってください」とお願いした結果です。
本当にローポリの猫を作ってくれました。
ただ、z=0よりも下に足があり、地面に埋まってしまっている気がします。
そこで「地面にめり込まないようにしてください」と指示すると…
足裏がz=0に来るように移動してくれました。しかも足場まで作ってくれています。抽象的な指示をしても、ある程度正確に解釈してくれるようです。
Blender MCP の実装を読んでみた
以下はBlender MCPの 2025/07 時点のコードを読んでのざっくり解説です。
概要
Blender MCPはfastmcpというライブラリを用いてMCPを実装しています。
fastmcpを用いることで、AIに特定のサービス(今回はBlender)の使い方を教えることができます。
AIに使用させたいメソッドに@mcp.tool()
のようなfastmcpアノテーションをつけると、AIは以下の情報をもとにそのメソッドの呼び出し方を推論し、使用できるようになります。
- メソッド名
- 引数名
- 引数の型
- 返り値の型
- ドキュメント(Pythonのdocstring)
特筆すべきは、AIは内部実装を見ずにメソッドの使い方を推論していることです。
すなわちAIがユーザーからサービス実行の指示を受けると、アノテーション付きのメソッド群のインターフェース情報だけをもとに呼ぶべきメソッドとその順番を推測し、サービスを操作します。
コード構成
Blender MCPは主に2つのPythonコードからなり、それぞれ以下のような特徴があります。
-
src/blender_mcp/server.py (MCP server)
- Claude for Desktop (MCP client)に設定する
- AIにfastmcpアノテーション付きメソッドを提供する
- 各メソッドでは通常addon.pyにデータを送るのみで具体的な処理は委譲する
-
addon.py
- Blender側でアドオンとしてインストールして利用する
- server.pyから送られてきたデータを元に、以下のような具体的な処理を行う
- Blenderを操作する
- 3Dモデルを公開しているWebサービスにアクセスして、モデルをダウンロードする
- 3Dモデルを生成するWebサービスにアクセスして、モデルを生成してもらう
これらの通信により、AIはBlenderを操作できるようになっています。
fastmcpアノテーション付きメソッド
Blender MCPでは以下2種類のfastmcpアノテーションを利用しています。
-
@mcp.tool
- データを変更するメソッド向け
- アドオンと連携するためのプロキシとしての役割を果たしている
-
@mcp.prompt
- LLMをガイドするためのプロンプトを返すメソッド向け
- アドオン側と連携は取らず、固定のテキスト(プロンプト)を返すのみ
src/blender_mcp/server.pyでは、これらのアノテーションを用いて以下のカテゴリーのメソッドをAIに提供しています。
- Blenderの直接操作
- シーンやオブジェクトの情報の取得
- スクリーンショットの撮影
- 任意のPythonコード実行
- 外部サービスとの連携
- Hyper3D (モデルの生成)
- Polyhaven (アセットの検索・ダウンロード)
- Sketchfab (アセットの検索・ダウンロード)
例えばユーザーが「Blenderで球のモデルを(2,0,0)の位置に作ってください」と言った場合、AIは対応するPythonスクリプトの文字列を用意し、任意のPythonコードを実行するexecute_blender_code
を呼んでユーザーの指示に応えます。
実際に試した結果が以下の画像です。AIの返信のexecute_blender_code
の中身を見ると、どのようなコードを実行したかを確認できます。
まとめ
本記事ではMCPそのものについては触れずに、Blender MCPやMCPの実装の1つであるfastmcpという具体例について概観しました。重要なことは以下3点と思われ、fastmcpを抽象化したMCPも同じ特徴を持ちます(実装方法はアノテーションとは限りません)。
- AIはMCP clientに設定されたMCP serverを利用できる
- AIはMCP serverの特定のメソッドのみを通してサービスにアクセスできる
- AIはメソッドのコード自体は読まず、メソッド名やドキュメントなどのメタ情報のみを参照する
すなわちMCP serverを用意してMCP clientに設定することで、AIは様々なサービスを操作できるようになります。そして、AIが操作できる機能はMCPに定義されたものに限定されます。具体的な処理についてはブラックボックスとして扱うため、例えばWebサービスで本来想定していないAPIエンドポイントをAIが推論で見つけて呼んでしまう、といった問題も防げると考えられます。
一方で、Blender MCPのexecute_blender_code
のように任意のPythonコードを実行するといった、非常に柔軟性の高いメソッドも定義できます。これにより、Blender MCPでは理論上Blender APIでできるすべての操作が実現できます。
ただし、任意のPythonコードを実行できるために、例えばプライベートファイルへのアクセスや想定外のネットワークアクセスといった様々なセキュリティリスクのあるコードもAI次第で実行できてしまう点には注意が必要です。
今後、AIとの対話を通じたサービス実行の需要はますます高まっていくと思われます。その中でMCPはAIがより安全にサービスを使うための鍵となる技術と言えそうです。
応募待っています
WEBエンジニア募集中です!医療業界での経験や3Dの知見は問いません。Berryの考え方や製品に少しでも興味が持てた方はお気軽に応募下さい。
Discussion