AI VJ時代の幕開け?力技で TouchDesigner MCP serverを作った話。
世界で初めてAIと 「もっとわっさ〜とダイナミックに動かして」 を分かりあった瞬間です。
成果物はこちら。
AIエージェントを使ってTouchDesignerをもっと気軽に触れるようにしたくて、MCPサーバーを作りました。その経緯と中身、開発の裏話、そしてこれからの話を書いていきます。
TouchDesigner とは?
TouchDesigner は、メディアアーティスト、VJ、インタラクティブデザイナーがリアルタイムのビジュアルや没入型の体験を生み出すためのノードベースのビジュアルプログラミングツールです。
ライブパフォーマンスやアートインスタレーションで使われることが多く、プロフェッショナルの現場でも用いられているツールです。
学習コストの高さが課題
しかし、初心者にとっては課題があります。
数百種に登るノードの種類やそれに紐づくパラメータの多さ、Pythonスクリプトの知識が必要なため、学習コストが高いのです。
AIの登場により、課題解決をAIと並走することができる様になったとは言え「それ、AIがやってよ〜」となるのが人間の業です。
この壁にぶち当たったユーザー(私)の課題を解決するべく、このMCPサーバーの開発を始めました。
MCPで初学者の「守・破・離」を高速化
一部の方には耳タコかもしれませんが、 MCP(Model Context Protocol)とは、アプリケーションが大規模言語モデル(LLM)にコンテキストを提供する方法を標準化するオープンなプロトコルです。例えるなら、AIアプリケーションのための「USB-Cポート」のようなもので、データソースやツールとの標準化された接続を可能にします(MCP公式ドキュメント)。
TouchDesigner MCPは、このプロトコルをTouchDesignerに適用したものです。
具体的には、AIエージェントがTouchDesignerのWebServer DATを通じてプロジェクトを操作できるようにするブリッジです。
WebServer DAT は TouchDesignerにバンドルされた Pythonで HTTP/HTTPS/WebSocket サーバを立ち上げてくれるモジュールです
このMCPサーバーによって、AIエージェントが初学者であるユーザーの意図に近い表現を生成し、ユーザーはその結果を調整しながら学びを深められます。
これによってTouchDesigner 初学者の「守・破・離」を高速化できると考えています。
また、ユーザーが作った表現をAIエージェントがパラメータ操作を行うことで表現の改善やVJの様に振る舞うことができる様になります。
主な特徴と技術的工夫
TouchDesigner MCPは、初心者でも扱いやすい MCP tool / promptを提供しています。
Claude Desktop、Cursor、VSCode CopilotChatなどのAIエージェントと連携が可能となり、これにより、ユーザーは自然言語で指示を出し、AIがTouchDesigner内で適切な操作を実行することができます。
つまり一々プロンプトを考えてAIに回答を出してもらって自分で実装するといった手間を省くことができます。
1. ノード操作の自動化
TouchDesigner MCPは、AIエージェントがノードを自由に操作できるツールを提供します。create_td_nodeやdelete_td_nodeでノードを動的に作成・削除・更新できますし、get_td_node_parametersやget_td_infoでノードやプロジェクトの詳細を取得したり、exec_node_methodでノードの関数を直接呼び出すこともできます。
複雑なノード設定をAIに任せて、クリエイティブな部分に集中できるわけです。
2. Pythonスクリプトの自動実行
TouchDesigner MCPは、TouchDesignerのPython環境でスクリプトを自動実行する機能を備えています。たとえば、Execute DATを作成し、Pythonコードを直接記述してノードを操作できます。
これにより、複雑な処理もAIエージェントに委ねられ、ユーザーの負担が軽減されます。
3. エラーの自己解析と修正
TouchDesignerのエラーは原因を特定するのが難しいことがありますが、MCP promptによりエラーを再帰的に解析し、修正案を提案します。
たとえば、パーティクルシステムのエミッターが見つからない場合、詳細なエラーレポートを生成し、修正をサポートします。この機能は、初心者にとって特に価値があります。本当にデバッグが大変なので...。
OpenAPIスキーマベースでZodスキーマ / APIクライアントコード / PythonのAPIサーバ コントローラ / サービスを開発
YAMLを書くだけでまるっとクライアントコードとバリデータを吐き出せるようにしたので、改善が容易になっています。
事例: 世界初のAIによるパーティクルシステム構築
AIエージェントだけで TouchDesigner を用いてパーティクルシステムを構築した(きっと多分)世界初の事例です。
パーティクルシステムは、煙や火花のような視覚効果を作成するもので、通常は複雑なノード設定が必要です。MCPを使えば、初心者でもこのような複雑な表現を簡単に実現できます。
この模様の全編は、YouTube動画でも公開しています。
ユーザーさんからのお喜びの声
開発の苦労と解決策
TouchDesigner MCPの開発は、決して簡単ではありませんでした。
そもそもMCPから直接アクセスするエンドポイントが TouchDesginer に生えていない
APIが公開されていたりするプロダクトですと、そのエンドポイントをリクエストするだけの実装で済みます。
TouchDesigner には外部公開されているエンドポイントが無いため、WebServer DATと連動するAPIコントローラを全てPythonで自前で実装する必要がありました。
普段Pythonを一切書かないため、Copilotにサポートしてもらいながらtoolsに対応するエンドポイントを全て自分で実装しました。
ノードタイプ / プロパティが膨大でスキーマ定義がつらい
TouchDesignerには、データ処理に使用されるノード(オペレータ)とそのプロパティが膨大に存在します。
当初の設計ではこれらすべてに対してZodスキーマを作成する必要がありました。
解決策はなかなかの荒技で、MCPに自身のtoolを使ってZodスキーマを量産させました。
ちなみにこのZodはその後の設計修正で削除されました。あの苦労は何だったのか...。
今後の展望
TouchDesigner MCPは、まだ発展途上ですが、やりたいことはたくさんあります。
たとえばYouTubeチュートリアルとの連携。AIエージェントがチュートリアル動画から手順を抽出し、プロジェクトを再現する機能があれば、初心者は動画を見ながら実際のプロジェクトを試せるようになって、学習がもっと直感的になりそうだな〜と思っています。
オープンソースプロジェクトとしてコミュニティが広がっていくのも楽しみです。ToolのZodスキーマやAPIクライアントコード / WebServer DATのルーティングコードはOpenAPIスキーマから生成できる様にしているので、開発者は簡単にMCPの改善に参加できます。(多分)
そして何より、MCPがライブビジュアルパフォーマンス(VJ)の新しい時代を切り開く...はず。
是非感想をください
今後、YouTubeとの連携やさらなる機能追加により、TouchDesigner MCPがアーティストやクリエイターにとって欠かせない存在になると良いな〜と思いながら開発を進めていきます!
是非このMCP serverを使った感想をXに呟いてください!モチベーションが高まるので!!
Discussion