touchdesigner-mcp-server 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ja.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  TouchDesignerのためのMCP(Model Context Protocol) サーバー実装です。AIエージェントがTouchDesignerプロジェクトを制御・操作できるようになることを目指しています。
4
4
 
5
- [English](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/README.md) / [日本語](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/README.ja.md)
5
+ [English](README.md) / [日本語](README.ja.md)
6
6
 
7
7
  ## 概要
8
8
 
@@ -14,227 +14,9 @@ TouchDesigner MCPは、AIモデルとTouchDesigner WebServer DAT 間のブリッ
14
14
  - ノードプロパティやプロジェクト構造の照会
15
15
  - PythonスクリプトによるTouchDesignerのプログラム的制御
16
16
 
17
- ## アーキテクチャ
17
+ ## インストール方法
18
18
 
19
- ```mermaid
20
- flowchart LR
21
- A["🤖<br/>MCP client<br/>(Claude / Codex / ...)"]
22
-
23
- subgraph S [Node.js MCP server]
24
- B1["🧰<br/>Tools & prompts<br/>(src/features/tools)"]
25
- B2["🖌️<br/>Presenters & formatters<br/>(markdown output)"]
26
- B3["🌐<br/>OpenAPI HTTP client<br/>(src/tdClient)"]
27
- end
28
-
29
- subgraph T [TouchDesigner project]
30
- C1["🧩<br/>WebServer DAT<br/>(mcp_webserver_base.tox)"]
31
- C2["🐍<br/>Python controllers / services<br/>(td/modules/mcp)"]
32
- C3["🎛️<br/>Project nodes & parameters<br/>(/project1/...)"]
33
- end
34
-
35
- A --> B1
36
- B1 --> B2
37
- B1 --> B3
38
- B2 --> A
39
- B3 <--> C1
40
- C1 <--> C2
41
- C2 <--> C3
42
-
43
- %% Higher-contrast colors for readability
44
- classDef client fill:#d8e8ff,stroke:#1f6feb,stroke-width:2px,color:#111,font-weight:bold
45
- classDef server fill:#efe1ff,stroke:#8250df,stroke-width:2px,color:#111,font-weight:bold
46
- classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px,color:#111,font-weight:bold
47
- class A client;
48
- class B1,B2,B3 server;
49
- class C1,C2,C3 td;
50
- ```
51
-
52
- ## 利用方法
53
-
54
- <details>
55
- <summary>方法1: Claude Desktop + MCP Bundle(推奨)</summary>
56
-
57
- ##### 1. ファイルをダウンロード
58
-
59
- [リリースページ](https://github.com/8beeeaaat/touchdesigner-mcp/releases/latest)から以下をダウンロード:
60
-
61
- - **TouchDesigner Components**: `touchdesigner-mcp-td.zip`
62
- - **[MCP Bundle](https://github.com/modelcontextprotocol/mcpb) (.mcpb)**: `touchdesigner-mcp.mcpb`
63
-
64
- ##### 2. TouchDesignerコンポーネントを設置
65
-
66
- 1. `touchdesigner-mcp-td.zip`を展開
67
- 2. 展開したフォルダから`mcp_webserver_base.tox`を操作したいTouchDesignerプロジェクト直下にインポート
68
- 例: `/project1/mcp_webserver_base`となるように配置
69
-
70
- <https://github.com/user-attachments/assets/215fb343-6ed8-421c-b948-2f45fb819ff4>
71
-
72
- TouchDesignerのメニューからTextportを起動してサーバーの起動ログを確認できます。
73
-
74
- ![import](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/assets/textport.png)
75
-
76
- ##### 3. MCP Bundleをインストール
77
-
78
- `touchdesigner-mcp.mcpb`ファイルをダブルクリックしてClaude DesktopにMCP Bundleをインストール
79
-
80
- <https://github.com/user-attachments/assets/0786d244-8b82-4387-bbe4-9da048212854>
81
-
82
- ##### 4. MCP Bundleが自動的にTouchDesignerサーバー接続を処理
83
-
84
- **⚠️ 重要:** TouchDesignerコンポーネントのディレクトリ構造は展開した状態を正確に保持してください。`mcp_webserver_base.tox`コンポーネントは`modules/`ディレクトリやその他のファイルへの相対パスを参照しています。
85
-
86
- </details>
87
-
88
- <details>
89
- <summary>方法2: npxを利用する</summary>
90
-
91
- *Node.jsがインストールされていることが前提となります*
92
-
93
- ##### 1. TouchDesignerコンポーネントを設置
94
-
95
- 1. [リリースページ](https://github.com/8beeeaaat/touchdesigner-mcp/releases/latest)から`touchdesigner-mcp-td.zip`をダウンロード
96
- 2. zipファイルを展開し、`mcp_webserver_base.tox`を操作したいTouchDesignerプロジェクト直下にインポート
97
- 例: `/project1/mcp_webserver_base`となるように配置
98
-
99
- <https://github.com/user-attachments/assets/215fb343-6ed8-421c-b948-2f45fb819ff4>
100
-
101
- TouchDesignerのメニューからTextportを起動してサーバーの起動ログを確認できます。
102
-
103
- ![import](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/assets/textport.png)
104
-
105
- ##### 2. MCPサーバー設定
106
-
107
- *例 Claude Desktop*
108
-
109
- ```json
110
- {
111
- "mcpServers": {
112
- "touchdesigner": {
113
- "command": "npx",
114
- "args": ["-y", "touchdesigner-mcp-server@latest", "--stdio"]
115
- }
116
- }
117
- }
118
- ```
119
-
120
- **カスタマイズ:** `--host`と`--port`引数を追加してTouchDesignerサーバー接続をカスタマイズできます:
121
-
122
- ```json
123
- "args": [
124
- "-y",
125
- "touchdesigner-mcp-server@latest",
126
- "--stdio",
127
- "--host=http://custom_host",
128
- "--port=9982"
129
- ]
130
- ```
131
-
132
- </details>
133
-
134
- <details>
135
- <summary>方法3: Dockerイメージを利用</summary>
136
-
137
- [![tutorial](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/assets/tutorial_docker.png)](https://www.youtube.com/watch?v=BRWoIEVb0TU)
138
-
139
- ##### 1. リポジトリをクローン
140
-
141
- ```bash
142
- git clone https://github.com/8beeeaaat/touchdesigner-mcp.git
143
- cd touchdesigner-mcp
144
- ```
145
-
146
- ##### 2. Dockerイメージのビルド
147
-
148
- ```bash
149
- git clone https://github.com/8beeeaaat/touchdesigner-mcp.git
150
- cd touchdesigner-mcp
151
- make build
152
- ```
153
-
154
- ##### 3. TouchDesignerプロジェクトにMCP連携用のAPIサーバーを設置
155
-
156
- TouchDesignerを起動し、`td/mcp_webserver_base.tox`コンポーネントを操作したいTouchDesignerプロジェクト直下にインポートします。
157
- 例: `/project1/mcp_webserver_base`となるように配置
158
-
159
- toxファイルのインポートにより`td/import_modules.py`スクリプトが実行され、APIサーバーのコントローラなどのモジュールがロードされます。
160
-
161
- <https://github.com/user-attachments/assets/215fb343-6ed8-421c-b948-2f45fb819ff4>
162
-
163
- TouchDesignerのメニューからTextportを起動してサーバーの起動ログを確認できます。
164
-
165
- ![import](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/assets/textport.png)
166
-
167
- ##### 4. MCPサーバーのコンテナを起動
168
-
169
- ```bash
170
- docker-compose up -d
171
- ```
172
-
173
- ##### 5. AIエージェントがDockerコンテナを使用するように設定
174
-
175
- *例 Claude Desktop*
176
-
177
- ```json
178
- {
179
- "mcpServers": {
180
- "touchdesigner": {
181
- "command": "docker",
182
- "args": [
183
- "compose",
184
- "-f",
185
- "/path/to/your/touchdesigner-mcp/docker-compose.yml",
186
- "exec",
187
- "-i",
188
- "touchdesigner-mcp-server",
189
- "node",
190
- "dist/cli.js",
191
- "--stdio",
192
- "--host=http://host.docker.internal"
193
- ]
194
- }
195
- }
196
- }
197
- ```
198
-
199
- *Windows システムでは、ドライブレターを含めてください。例:`C:\\path\\to\\your\\touchdesigner-mcp\\docker-compose.yml`*
200
-
201
- **カスタマイズ:** `--port`引数を追加してTouchDesignerサーバー接続をカスタマイズできます:
202
-
203
- ```json
204
- "args": [
205
- ...,
206
- "--stdio",
207
- "--host=http://host.docker.internal",
208
- "--port=9982"
209
- ]
210
- ```
211
-
212
- </details>
213
-
214
- ## 接続確認
215
-
216
- MCPサーバーが認識されていればセットアップは完了です。
217
- 認識されない場合は、AIエージェントを再起動してください。
218
- 起動時にエラーが表示される場合は、TouchDesignerを先に起動してからAIエージェントを再度起動してください。
219
- TouchDesignerでAPIサーバーが実行されていれば、エージェントは提供されたツール等を通じてTouchDesignerを使用できます。
220
-
221
- ### ディレクトリ構造要件
222
-
223
- **重要:** どの方法(Docker、npx)を使用する場合でも、正確なディレクトリ構造を維持してください:
224
-
225
- ```
226
- td/
227
- ├── import_modules.py # モジュールローダースクリプト
228
- ├── mcp_webserver_base.tox # メインTouchDesignerコンポーネント
229
- └── modules/ # Pythonモジュールディレクトリ
230
- ├── mcp/ # MCPコアロジック
231
- ├── utils/ # 共有ユーティリティ
232
- └── td_server/ # 生成されたAPIサーバーコード
233
- ```
234
-
235
- `mcp_webserver_base.tox` コンポーネントは相対パスを使用してPythonモジュールを検索します。これらのファイルを移動したり再編成したりすると、TouchDesignerでインポートエラーが発生します。
236
-
237
- ![demo](https://github.com/8beeeaaat/touchdesigner-mcp/blob/main/assets/nodes_list.png)
19
+ **[インストールガイド](docs/installation.ja.md)** を参照してください。
238
20
 
239
21
  ## MCPサーバーの機能
240
22
 
@@ -275,104 +57,45 @@ td/
275
57
 
276
58
  ## 開発者向け
277
59
 
278
- ### 開発のクイックスタート
279
-
280
- 1. **環境設定:**
281
-
282
- ```bash
283
- # リポジトリをクローンして依存関係をインストール
284
- git clone https://github.com/8beeeaaat/touchdesigner-mcp.git
285
- cd touchdesigner-mcp
286
- npm install
287
- ```
288
-
289
- 2. **プロジェクトをビルド:**
290
-
291
- ```bash
292
- make build # Docker-based build(推奨)
293
- # または
294
- npm run build # Node.js-based build
295
- ```
296
-
297
- 3. **利用可能なコマンド:**
298
-
299
- ```bash
300
- npm run test # ユニットテストと統合テストを実行
301
- npm run dev # デバッグ用MCPインスペクターを起動
302
- ```
303
-
304
- **注意:** コードを更新した場合は、MCPサーバーとTouchDesignerの両方を再起動して変更を反映してください。
305
-
306
- ### プロジェクト構造の概要
307
-
308
- ```
309
- ├── src/ # MCPサーバーソースコード
310
- │ ├── api/ # TD WebServerに対するOpenAPI仕様
311
- │ ├── core/ # コアユーティリティ(ロガー、エラーハンドリング)
312
- │ ├── features/ # MCP機能実装
313
- │ │ ├── prompts/ # プロンプトハンドラ
314
- │ │ ├── resources/ # リソースハンドラ
315
- │ │ └── tools/ # ツールハンドラ (例: tdTools.ts)
316
- │ ├── gen/ # OpenAPIスキーマから生成されたMCPサーバー向けコード
317
- │ ├── server/ # MCPサーバーロジック (接続, メインサーバークラス)
318
- │ ├── tdClient/ # TD接続API用クライアント
319
- │ ├── index.ts # Node.jsサーバーのメインエントリーポイント
320
- │ └── ...
321
- ├── td/ # TouchDesigner関連ファイル
322
- │ ├── modules/ # TouchDesigner用Pythonモジュール
323
- │ │ ├── mcp/ # TD内でMCPからのリクエストを処理するコアロジック
324
- │ │ │ ├── controllers/ # APIリクエストコントローラ (api_controller.py, generated_handlers.py)
325
- │ │ │ └── services/ # ビジネスロジック (api_service.py)
326
- │ │ ├── td_server/ # OpenAPIスキーマから生成されたPythonモデルコード
327
- │ │ └── utils/ # 共有Pythonユーティリティ
328
- │ ├── templates/ # Pythonコード生成用Mustacheテンプレート
329
- │ ├── genHandlers.js # generated_handlers.py 生成用のNode.jsスクリプト
330
- │ ├── import_modules.py # TDへ APIサーバ関連モジュールをインポートするヘルパースクリプト
331
- │ └── mcp_webserver_base.tox # メインTouchDesignerコンポーネント
332
- ├── tests/ # テストコード
333
- │ ├── integration/
334
- │ └── unit/
335
- └── orval.config.ts # Orval 設定 (TSクライアント生成)
336
- ```
337
-
338
- ### APIコード生成ワークフロー
339
-
340
- このプロジェクトでは、OpenAPIによるコード生成ツール ( Orval / openapi-generator-cli )を使用しています:
341
-
342
- **API定義:** Node.js MCPサーバーとTouchDesigner内で実行されるPythonサーバー間のAPI規約は `src/api/index.yml` で定義されます。
343
-
344
- 1. **Pythonサーバー生成 (`npm run gen:webserver`):**
345
- - Docker経由で `openapi-generator-cli` を使用します。
346
- - `src/api/index.yml` を読み取ります。
347
- - API定義に基づいてPythonサーバーのスケルトン (`td/modules/td_server/`) を生成します。このコードはWebServer DATを介してTouchDesigner内で実行されます。
348
- - **Dockerがインストールされ、実行されている必要があります。**
349
- 2. **Pythonハンドラ生成 (`npm run gen:handlers`):**
350
- - カスタムNode.jsスクリプト (`td/genHandlers.js`) とMustacheテンプレート (`td/templates/`) を使用します。
351
- - 生成されたPythonサーバーコードまたはOpenAPI仕様を読み取ります。
352
- - `td/modules/mcp/services/api_service.py` にあるビジネスロジックに接続するハンドラ実装 (`td/modules/mcp/controllers/generated_handlers.py`) を生成します。
353
- 3. **TypeScriptクライアント生成 (`npm run gen:mcp`):**
354
- - `Orval` を使用し `openapi-generator-cli` がバンドルしたスキーマYAMLからAPIクライアントコードとToolの検証に用いるZodスキーマを生成します。
355
- - Node.jsサーバーが WebServerDAT にリクエストを行うために使用する、型付けされたTypeScriptクライアント (`src/tdClient/`) を生成します。
356
-
357
- ビルドプロセス (`npm run build`) は、必要なすべての生成ステップ (`npm run gen`) を実行し、その後にTypeScriptコンパイル (`tsc`) を行います。
358
-
359
- ### バージョン管理
360
-
361
- - `package.json` はすべてのコンポーネントバージョンの唯一の信頼できる情報源です(Node.js MCPサーバー、TouchDesigner Python API、MCPバンドル、および `server.json` メタデータ)。
362
- - バージョンを更新する際は `npm version <patch|minor|major>`(または内部で使用される `npm run gen:version`)を実行してください。このスクリプトは `pyproject.toml`、`td/modules/utils/version.py`、`mcpb/manifest.json`、および `server.json` を書き換え、リリースワークフローがタグ値を信頼できるようにします。
363
- - GitHubリリースワークフロー(`.github/workflows/release.yml`)はコミットを `v${version}` としてタグ付けし、同じバージョン番号から `touchdesigner-mcp-td.zip` / `touchdesigner-mcp.mcpb` を公開します。リリースをトリガーする前に必ず同期ステップを実行し、すべてのアーティファクトが整合するようにしてください。
60
+ ローカル環境構築やクライアント設定、コード生成ワークフローなどの詳細は **[開発者ガイド](docs/development.ja.md)** を参照してください。
364
61
 
365
62
  ## トラブルシューティング
366
63
 
367
64
  ### バージョン互換性のトラブルシューティング
368
65
 
369
- - `ConnectionManager.connect` の実行中、MCPサーバーは自身のバージョンと `getTdInfo` が報告するTouchDesigner APIサーバーのバージョンを比較します。APIサーバーがバージョンを公開していない場合、またはバージョンが異なる場合(例:片方のみが更新された場合)、MCPサーバーはClaude/Codexコンソールおよび TouchDesigner ログ DAT に説明的なエラーメッセージを表示して接続を中止します。
370
- - 不一致を解決するには、TouchDesignerコンポーネントを再インストールしてください:
66
+ 柔軟な互換性チェックのために**セマンティックバージョニング**を使用しています
67
+
68
+ | MCP Server | API Server | 最小互換APIバージョン | 動作 | ステータス | 備考 |
69
+ |------------|------------|----------------|----------|--------|-------|
70
+ | 1.3.x | 1.3.0 | 1.3.0 | ✅ 正常動作 | 互換 | 推奨ベースライン構成 |
71
+ | 1.3.x | 1.4.0 | 1.3.0 | ⚠️ 警告表示、実行継続 | 警告 | 旧MCP MINORと新API、新機能未対応の可能性 |
72
+ | 1.4.0 | 1.3.x | 1.3.0 | ⚠️ 警告表示、実行継続 | 警告 | 新MCP MINORに追加機能がある可能性 |
73
+ | 1.3.2 | 1.3.1 | 1.3.2 | ❌ 実行停止 | エラー | APIが最小互換バージョン未満 |
74
+ | 2.0.0 | 1.x.x | N/A | ❌ 実行停止 | エラー | MAJORバージョン相違 = 破壊的変更 |
75
+
76
+ **互換性ルール**:
77
+
78
+ - ✅ **互換**: 同じMAJORバージョン、かつAPIバージョン ≥ 最小互換バージョン
79
+ - ⚠️ **警告**: 同じMAJOR内でMINORまたはPATCHバージョンが異なる(警告表示、実行継続)
80
+ - ❌ **エラー**: MAJORバージョンが異なる、またはAPIサーバー < 最小互換バージョン(即座に実行停止、更新が必要)
81
+
82
+ - **互換性エラーを解決するには:**
371
83
  1. リリースページから最新の [touchdesigner-mcp-td.zip](https://github.com/8beeeaaat/touchdesigner-mcp/releases/latest/download/touchdesigner-mcp-td.zip) をダウンロードします。
372
84
  2. 既存の `touchdesigner-mcp-td` フォルダを削除し、新しく展開した内容に置き換えます。
373
85
  3. TouchDesignerプロジェクトから古い `mcp_webserver_base` コンポーネントを削除し、新しいフォルダから `.tox` をインポートします。
374
86
  4. TouchDesignerとMCPサーバーを実行しているAIエージェント(例:Claude Desktop)を再起動します。
375
- - ローカルで開発している場合は、`package.json` を編集した後に `npm run gen:version` を実行してください(または単に `npm version ...` を使用してください)。これにより、Python API(`pyproject.toml` + `td/modules/utils/version.py`)、MCPバンドルマニフェスト、およびレジストリメタデータが同期され、ランタイム互換性チェックが成功するようになります。
87
+
88
+ - **開発者向け:** ローカルで開発している場合は、`package.json` を編集した後に `npm run version` を実行してください(または単に `npm version ...` を使用してください)。これにより、Python API(`pyproject.toml` + `td/modules/utils/version.py`)、MCPバンドルマニフェスト、およびレジストリメタデータが同期され、ランタイム互換性チェックが成功するようになります。
89
+
90
+ ### 接続エラーのトラブルシューティング
91
+
92
+ - `TouchDesignerClient` は接続に失敗した互換性チェック結果を **最大5秒間キャッシュ**し、その間のツール呼び出しでは同じエラーを再利用して TouchDesigner への無駄な負荷を避けます。TTL が切れると自動的に再試行します。
93
+ - MCP サーバーが TouchDesigner に接続できない場合は、次のようなガイド付きメッセージが表示されます:
94
+ - `ECONNREFUSED` / "connect refused": TouchDesigner を起動し、`mcp_webserver_base.tox` からインポートした WebServer DAT がアクティブか、ポート設定(デフォルト `9981`)が正しいか確認してください。
95
+ - `ETIMEDOUT` / "timeout": TouchDesigner の応答が遅い、またはネットワークが詰まっています。TouchDesigner/ WebServer DAT の再起動やネットワーク状況の確認を行ってください。
96
+ - `ENOTFOUND` / `getaddrinfo`: ホスト名が解決できません。特別な理由がなければ `127.0.0.1` を使用してください。
97
+ - これらの詳細なエラーテキストは `ILogger` にも出力されるため、MCP 側のログを確認すれば TouchDesigner に到達する前に止まった理由を把握できます。
98
+ - 問題を解決したら再度ツールを実行するだけで、キャッシュされたエラーがクリアされて接続チェックがやり直されます。
376
99
 
377
100
  ## 開発で貢献
378
101