はじめに
Model Context Protocol (MCP)流行っていますね。
そんな最中Houdini用のMCPが公開されました。これは試すしかない。
最初は以下のリポジトリでしたが、
最新のリポジトリは移動してこちらに変更となりました。
超簡単な説明
環境
筆者の環境
- macOS 15.0 (Sequoia)
- Houdini Indie 20.5.545
- Python 3.11.5
- Anthropicのアカウント(Claude利用:Proffesionalプラン)
Houdini MCPが要求する条件
- Houdini 19.0 以降
- Python 3.10以降
- uvパッケージマネージャ
uv パッケージマネージャのインストール(Mac)
まずはuvパッケージマネージャをインストールします
※3Dの文脈でのUVとは関係なく、Node.jsプロジェクトの依存関係を効率よく管理して、開発をよりスムーズにするためのツールです。
-
Macのターミナルを開きます
-
以下のコマンドを実行してuvをインストール
brew install uv
インストールが成功したか確認するには
uv --version
uv 0.6.9 (Homebrew 2025-03-20)などと表示されるかと思います
uv パッケージマネージャのインストール(Windows)
- Install uv
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
- uvをPATHに追加(ユーザーは変えて)。コマンドプロンプトから
set Path=C:\Users\<YourUserName>\.local\bin;%Path%
- uvプロジェクトまたはプラグインディレクトリで
cd C:/Users/<YourUserName>/Documents/houdini20.5/scripts/python/houdinimcp/
uv add "mcp[cli]"
- 確認
uv run python -c "import mcp.server.fastmcp; print('MCP is installed!')"
Houdini MCPプラグインのインストール
フォルダレイアウト
-
GitHubからファイルをgit clone、もしくはZIPダウンロードします。
-
Houdini スクリプト ディレクトリにフォルダーを作成します:
- Mac:
/Users/ユーザー名/Library/Preferences/houdini/20.5/scripts/
- (注:「20.5」の部分は、使用しているHoudiniのバージョンに合わせて変更してください)
- Windows:
C:/Users/ユーザー名/Documents/houdini20.5/scripts/python/houdinimcp/
- Mac:
-
ダウンロードした以下のファイルをhoudinimcpディレクトリにコピーします:
Houdiniシェルフツール サーバー切り替え機能
- Houdiniを起動します
- シェルフから
自分用のシェルフタブがあればスキップ・なければNewShelfTabをクリック
Accept

右クリック→ 「New Shelf...」で 「MCP」またはそれに似た名前を付けます
もう一度右クリック→ 「NewTool...」 名前: 「Toggle MCP Server」 ラベル: 「MCP」
スクリプトタブに移動し、次のような内容を挿入します:
import hou
import houdinimcp
if hasattr(hou.session, "houdinimcp_server") and hou.session.houdinimcp_server:
houdinimcp.stop_server()
hou.ui.displayMessage("Houdini MCP Server stopped")
else:
houdinimcp.start_server()
hou.ui.displayMessage("Houdini MCP Server started on localhost:9876")
貼り付けたらAccept
準備ができたらアイコンをクリックします。
まだモジュールが入っていないと言われる場合は、Houdiniがpython内のディレクトリを認識していないかもしれないのでHoudiniを再起動させます
この場合、適切なパスに先ほどの4点のスクリプトを配置できていない可能性があります。
問題なく動作すれば以下のコンソールがでます。
もう一度MCPを押すとサーバーが停止します
パッケージの統合
Houdini の起動時にプラグインを自動ロードする場合は、Houdini パッケージ フォルダ (例: C:/Users/YourUserName/Documents/houdini20.5/packages/) に houdinimcp.json という名前のパッケージ ファイルを作成します。
{
"path": "$HOME/houdini20.5/scripts/python/houdinimcp",
"load_package_once": true,
"version": "0.1",
"env": [
{
"PYTHONPATH": "$PYTHONPATH;$HOME/houdini20.5/scripts/python"
}
]
}
Claudeの手順
MCPはオープンなプロトコルフォーマットのため、Claudeデスクトップ以外のMCPクライアントでも利用可能です。とはいえ、まずはClaudeデスクトップアプリを使用していきましょう。
Claudeデスクトップアプリのインストール (Mac)
- Anthropicの公式サイトにアクセス
- macOS用インストーラー(.dmgファイル)をダウンロードしインストール
Claude デスクトップアプリの設定
-
Claudeアプリを開き、以下の手順でMCP設定を行います:
Win
{
"mcpServers": {
"houdini": {
"command": "uv",
"args": [
"run",
"python",
"C:/Users/<YourUserName>/Documents/houdini20.5/scripts/python/houdinimcp/houdini_mcp_server.py"
]
}
}
}
Mac
{
"mcpServers": {
"houdini": {
"command": "uv",
"args": [
"run",
"python",
"/Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp/houdini_mcp_server.py"
]
}
}
}
怒られました。ModuleNotFoundError で、mcp というモジュールが見つからないことが原因とのことです。
つまり、MCP のpythonSDKのパスが通っていません。
2025-04-05T08:56:21.965Z [houdini] [info] Initializing server...
2025-04-05T08:56:21.984Z [houdini] [info] Server started and connected successfully
2025-04-05T08:56:21.990Z [houdini] [info] Message from client: {"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
Python path: ['/Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp/.venv/Lib/site-packages', '/Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp', '/usr/local/Cellar/python@3.13/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python313.zip', '/usr/local/Cellar/python@3.13/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13', '/usr/local/Cellar/python@3.13/3.13.0_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/lib-dynload', '/usr/local/lib/python3.13/site-packages']
Traceback (most recent call last):
File "/Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp/houdini_mcp_server.py", line 29, in <module>
from mcp.server.fastmcp import FastMCP, Context
ModuleNotFoundError: No module named 'mcp'
2025-04-05T08:56:23.185Z [houdini] [info] Server transport closed
2025-04-05T08:56:23.185Z [houdini] [info] Client transport closed
2025-04-05T08:56:23.185Z [houdini] [info] Server transport closed unexpectedly, this is likely due to the process exiting early. If you are developing this MCP server you can add output to stderr (i.e. `console.error('...')` in JavaScript, `print('...', file=sys.stderr)` in python) and it will appear in this log.
2025-04-05T08:56:23.185Z [houdini] [error] Server disconnected. For troubleshooting guidance, please visit our [debugging documentation](https://modelcontextprotocol.io/docs/tools/debugging) {"context":"connection"}
2025-04-05T08:56:23.185Z [houdini] [info] Client transport closed
解決策としては.envとしてパスを通すか、mcpのSDKを全体のpythonにインストールするかの2択です。
.envを使う方法は、以下のようにして行います。
cd /Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp
# 仮想環境を作成
uv venv
# 仮想環境を起動
# Windowsの場合:.
.venv\Scripts\activate
# UnixまたはMacOSの場合:
source .venv/bin/activate
# 必要なパッケージをインストール
uv add mcp anthropic python-dotenv
その上で、
-
claude_desktop_config.json
に以下の内容を以下のようにします。
Mac
{
"mcpServers": {
"houdini": {
"command": "uv",
"args": [
"run",
"/Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp/.venv/bin/python",
"/Users/jyouryuusui/Library/Preferences/houdini/20.5/scripts/python/houdinimcp/houdini_mcp_server.py"
]
}
}
}
もしくは、仮想環境を利用しない方法もあります 推奨はされないですが
uv pip install mcp anthropic python-dotenv
などで全体のpythonにインストールしてしまう方法もあります。
HoudiniMCPを使おう
準備が全て完了していれば設定は以下のように
ホーム画面にもハンマーアイコンが表示されます
ハンマーアイコンを見ると機能が3つ存在することがわかります。
HoudiniMCPの機能
それぞれの機能は、以下の通りです。
- create_node : 新しいノードを作成
- execute_houdini_code : Houdiniの環境で任意のPythonコードを実行
- get_scene_info : Houdiniにシーン情報を問い合わせ。JSONを文字列として返却
少ないように見えますが、Pythonコードが実行できるということはHOMの全てを利用できるので、実質全部できる可能性があります。(じゃあ全部できるかというと別ですが)
機能テスト1(Sphere作成)
早速いきましょう!プロンプトはシンプルに
Houdini MCPを利用し、SOPレベルにSphereノードを作成してください
とします。
ツールを許可します。「このチャットで許可する」ボタンを押してください
2度ツールの許可を求められました。先ほど紹介した機能「create_node」と「execute_houdini_code」が利用されています。ここでどの機能を利用するかの判断はLLMのモデルの匙加減です。
結局のところ何をしているかというと、何がやりたいかをプロンプトから解釈し、MCPサーバーが解釈しやすい形式にして「これでお願い」と投げているだけです。
コード自体はHOMのシンプルなものです
{
`code`: `
# Create a Geometry node at OBJ level
geo_node = hou.node('/obj').createNode('geo', 'mySphereGeo')
# Create a Sphere node at SOP level inside the Geometry node
sphere_node = geo_node.createNode('sphere', 'mySphere')
# Return confirmation
print(\"Success: Created Sphere node at SOP level\")
print(\"Path: \" + sphere_node.path())
`
}
試した結果
さて、球はできました。しかし、命令が単純すぎたのか、ちょっとした命令違反があります。”SOPレベルで”と指定したのにPythonコードは/objに作成しています。結果的にはSOPレベルにできているからいいだろ?ということでしょうか。
うーん、そもそもコンテキストは理解しているのでしょうか。
もしくはプロンプトが悪い?もう少し試してみましょう。
機能テスト2(SOP内でColorノード色付け)
まずはOBJレベルとSOPレベルの違いを理解しているか確認します。次の命令は以下のようにしました。
まずはObjectレベル(/obj)に空のGeometryノードを作成し、そのGeometry内に移動。そのGeometry内のSOPレベルでSphereを作成し、Sphereの色を赤色に変更してください。色の変更はColorノードでも良いですし、Wrangleノード内でCdパラメータを赤色にする方法どちらでも良いです
結果
自分で作った方が早いわ!!という感じですが、検証は一つずつ行わなければ意味がありません。 MCPの実力をきちんと見極めていきましょう。
出力されたコードは以下のようなものでした。
{
`code`: `
# 1. Objectレベルに空のGeometryノードを作成
geo_node = hou.node('/obj').createNode('geo', 'redSphereGeo')
# 2. SOPレベルでSphereを作成
sphere_node = geo_node.createNode('sphere', 'sphere1')
# 3. Colorノードを作成してSphereの出力に接続
color_node = geo_node.createNode('color', 'redColor')
color_node.setInput(0, sphere_node)
# 4. Colorノードのパラメータを設定して赤色に変更
color_node.parm('colorr').set(1.0)
color_node.parm('colorg').set(0.0)
color_node.parm('colorb').set(0.0)
# 5. Colorノードをdisplayフラグとrenderフラグをオンに
color_node.setDisplayFlag(True)
color_node.setRenderFlag(True)
# レイアウトを整理
geo_node.layoutChildren()
print(\"Success: Created a red sphere\")
print(\"Path: \" + geo_node.path())
`
}
今回はきちんとコンテキストに沿って作成してくれました。いい感じです。
機能テスト3(途中のノードから再接続できるのか)
次は、途中のノードから再接続できるのかを試してみます。プロンプトは以下のようにしました。
現在のSphereに追加のノードを追加し、青色のSphereに変更させてください。
そして、位置をY方向に0.5移動させてください
結果。きちんと途中からノードを接続してくれます。えらい!
機能テスト4(遡って情報を修正できるのか)
ここまでは、新規に下に下につなげてきましたが、たとえば上流のノード変更を指示した場合どうなるでしょう。プロンプトは以下のようにします。
現在のSphereのタイプをプリミティブからポリゴンに変更し、何らかのノイズを加えてでこぼこの球にしてください。
ここでエラーが途中で発生します。
その直後、「get_scene_info」の機能が発火します。エラーは観測しなければ修正できません。状況を確認するために、現時点のシーン情報を取得しようとしています。
返ってきた値は以下のようなものです
{}
[{"type": "text", "text": "{\n \"name\": \"untitled.hip\",\n \"filepath\": \"untitled.hip\",\n \"node_count\": 30,\n \"nodes\": [\n {\n \"name\": \"redSphereGeo\",\n \"path\": \"/obj/redSphereGeo\",\n \"type\": \"geo\",\n \"category\": \"obj\"\n }\n ],\n \"fps\": 24.0,\n \"start_frame\": 1.0,\n \"end_frame\": 240.0\n}", "uuid": "d0e5997f-33bf-49ef-8846-e83aa58f8bb2"}]
これで、状況確認ができたので上手くいくだろうと思いましたが、
エラー発生しすぎだろ!
とはいえ、何度かのリレーののちに動作完了しました。
一応考え方としては合っています。(本当はSphereのPrimitive TypeをPrimitiveからPolygonsに変更して欲しかった。。)
しかし、何だか散らかっています。右側に試行錯誤のゴミが残っています。
加えて、OBJノードにもいくつかゴミが出来ています。
試すのはいいけど、ちゃんと掃除しろ!!!!!
タスクを投げ出して、色々手を出すんじゃない!!!!!
生まれたばかりの技術なので、挙動も好奇心旺盛な子供のようです。
機能テスト5(落下のRBD)
一度シーンを綺麗にして、次はシミュレーションを試します。
BOXをいくつか作成し、RBDで落下させるというものです。
プロンプトは慎重に
新しいシーンにします。その前提でHoudini mcpに命令する場合、どのように命令すればいいのかプロンプトを考えてください。実際に行いたいことは「10個ほどの複数のBOXを配置後、RBDのシミュレーションを行い、重力で落下。地面となるGroundに落ちて反発してバラバラになる」というシーンです まだHoudiniMCPには実行命令を出さないでください
と、一呼吸おいて
HoudiniMCPサーバーは立ち上がっています。HoudiniMCPに命令して実行してください
/objレベルに新しいGeometryノード「Boxes」を作成する
Boxesノード内にBox SOPとGrid SOP(10x10)を作成
Gridにはノイズをかけて位置をY方向にランダムにポイントを設定(全て0以上として空中に浮かせる)
Copy to Point SOPで複数(100個)のボックスをコピーして配置する
Houdini DOPネットワークを作成してRBDシミュレーションをセットアップする
新しいDOPネットワークノードを作成
RBD Objectsノードを作成してBoxesを接続
RBD Packed Objectノードを使用
Ground用のStaticオブジェクトを設定(ground plane)
重力を設定
コリジョンを設定
結果
DOPネットワークすら出来ていません。
しかしメッセージには誇らしげに
できてへんやんけーッ!! 基本的なことが〜〜〜!!
機能テスト5(落下のRBD 再挑戦)
そもそもプロンプトの単位が大きすぎるのが悪いかもしれません。
少しずつ分けていきましょう。
新しいGeometryノード「Boxes」を作成する
Boxesノード内にBox SOPとGrid SOP(10x10)を作成
Gridにはノイズをかけて位置をY方向にランダムにポイントを設定(全て0以上として空中に浮かせる)
Copy to Point SOPで複数(100個)のボックスをコピーして配置する
コピー処理が出来ていません。Copy to Point SOPで複数(100個)のボックスをコピーして配置させてください
パスに誤りがあります /obj/Boxes/geo/grid1 ではなく/obj/Boxes/grid1 であり /obj/Boxes/box1 が正しいパスです
これらのBOXをRBDのシミュレーションを行い、重力で落下させてください
RBD_simulationの中が空っぽです。Boxesの参照がされていません。加えて、重力ノードも存在しません
再実行後もRBD_simulationの中が空っぽです。再度get_scene_infoを実行して、状況を把握したのち、RBD_simulationの中に必要なノードを作成してください
まだ何もノードが作成されていません
test_gravityの上にBoxesのrbdobjectが存在していません
test_dopnet内のtest_gravityの上にBoxesのrbdobjectが存在していません
ここで断念
結果:失敗
まとめ
まだ出たばかりで試したのは2日程度ですが、Houdini MCPなかなか面白いです。
もう少しコツを掴めば上手く利用できそうです。
とはいえパスの階層情報や対象となるノード情報をMCPクライアント側から把握するのは意外と難しいようで、Houdiniの膨大なノード情報を整理しきれていない印象を受けました。あくまでHoudiniのPythonとしてHOMを MCPサーバーを介して実行しているだけなので、MCPサーバーの機能改修は今後必要になるかと思います。
なんだ全然しょぼいやん!と思った人もいるかもしれませんが、僕は生成AIでGoogleの猫の画像が出た時の感覚を思い出しました。最初は「何これ?」とみんなバカにしていましたが、そこは年月と技術者の努力で進化していきました。MCPを利用したワークフローも進化の余地は高いように感じます。
現状は「お片付けが出来ない雰囲気駆動の刹那的Houdini Engine」と言う感想です。
過度な期待をしすぎるとガッカリするかもしれません。
また、MCPの機能が改修されたり、面白い使い方が見つかれば追記していきます。