touchdesigner-mcp-server 0.4.0-alpha.0 → 0.4.0-alpha.2
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 +4 -4
- package/README.md +4 -3
- package/dist/cli.js +0 -0
- package/dist/gen/endpoints/TouchDesignerAPI.js +1 -1
- package/dist/gen/mcp/touchDesignerAPI.zod.js +1 -1
- package/dist/index.js +0 -0
- package/dist/server/touchDesignerServer.js +1 -1
- package/package.json +14 -12
- package/td/genHandlers.js +0 -47
- package/td/import_modules.py +0 -52
- package/td/mcp_webserver_base.tox +0 -0
- package/td/modules/mcp/controllers/__init__.py +0 -9
- package/td/modules/mcp/controllers/api_controller.py +0 -637
- package/td/modules/mcp/controllers/generated_handlers.py +0 -365
- package/td/modules/mcp/controllers/openapi_router.py +0 -265
- package/td/modules/mcp/services/__init__.py +0 -8
- package/td/modules/mcp/services/api_service.py +0 -555
- package/td/modules/mcp_webserver_script.py +0 -134
- package/td/modules/td_server/.dockerignore +0 -72
- package/td/modules/td_server/.openapi-generator/FILES +0 -55
- package/td/modules/td_server/.openapi-generator/VERSION +0 -1
- package/td/modules/td_server/.openapi-generator-ignore +0 -23
- package/td/modules/td_server/.travis.yml +0 -14
- package/td/modules/td_server/Dockerfile +0 -16
- package/td/modules/td_server/README.md +0 -49
- package/td/modules/td_server/git_push.sh +0 -57
- package/td/modules/td_server/openapi_server/__init__.py +0 -0
- package/td/modules/td_server/openapi_server/__main__.py +0 -19
- package/td/modules/td_server/openapi_server/controllers/__init__.py +0 -0
- package/td/modules/td_server/openapi_server/controllers/default_controller.py +0 -162
- package/td/modules/td_server/openapi_server/controllers/security_controller.py +0 -2
- package/td/modules/td_server/openapi_server/encoder.py +0 -19
- package/td/modules/td_server/openapi_server/models/__init__.py +0 -33
- package/td/modules/td_server/openapi_server/models/base_model.py +0 -68
- package/td/modules/td_server/openapi_server/models/create_node200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/create_node200_response_data.py +0 -63
- package/td/modules/td_server/openapi_server/models/create_node_request.py +0 -123
- package/td/modules/td_server/openapi_server/models/delete_node200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/delete_node200_response_data.py +0 -91
- package/td/modules/td_server/openapi_server/models/exec_node_method200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/exec_node_method200_response_data.py +0 -65
- package/td/modules/td_server/openapi_server/models/exec_node_method_request.py +0 -153
- package/td/modules/td_server/openapi_server/models/exec_node_method_request_args_inner.py +0 -34
- package/td/modules/td_server/openapi_server/models/exec_python_script200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/exec_python_script200_response_data.py +0 -65
- package/td/modules/td_server/openapi_server/models/exec_python_script200_response_data_result.py +0 -63
- package/td/modules/td_server/openapi_server/models/exec_python_script_request.py +0 -65
- package/td/modules/td_server/openapi_server/models/get_node_detail200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/get_nodes200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/get_nodes200_response_data.py +0 -65
- package/td/modules/td_server/openapi_server/models/get_td_info200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/get_td_info200_response_data.py +0 -155
- package/td/modules/td_server/openapi_server/models/get_td_python_class_details200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/get_td_python_classes200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/get_td_python_classes200_response_data.py +0 -63
- package/td/modules/td_server/openapi_server/models/td_node.py +0 -175
- package/td/modules/td_server/openapi_server/models/td_node_family_type.py +0 -44
- package/td/modules/td_server/openapi_server/models/td_python_class_details.py +0 -191
- package/td/modules/td_server/openapi_server/models/td_python_class_info.py +0 -127
- package/td/modules/td_server/openapi_server/models/td_python_method_info.py +0 -121
- package/td/modules/td_server/openapi_server/models/td_python_property_info.py +0 -123
- package/td/modules/td_server/openapi_server/models/update_node200_response.py +0 -125
- package/td/modules/td_server/openapi_server/models/update_node200_response_data.py +0 -149
- package/td/modules/td_server/openapi_server/models/update_node200_response_data_failed_inner.py +0 -91
- package/td/modules/td_server/openapi_server/models/update_node_request.py +0 -93
- package/td/modules/td_server/openapi_server/openapi/openapi.yaml +0 -975
- package/td/modules/td_server/openapi_server/test/__init__.py +0 -16
- package/td/modules/td_server/openapi_server/test/test_default_controller.py +0 -201
- package/td/modules/td_server/openapi_server/typing_utils.py +0 -30
- package/td/modules/td_server/openapi_server/util.py +0 -147
- package/td/modules/td_server/requirements.txt +0 -13
- package/td/modules/td_server/setup.py +0 -37
- package/td/modules/td_server/test-requirements.txt +0 -4
- package/td/modules/td_server/tox.ini +0 -11
- package/td/modules/utils/config.py +0 -7
- package/td/modules/utils/error_handling.py +0 -104
- package/td/modules/utils/logging.py +0 -23
- package/td/modules/utils/result.py +0 -40
- package/td/modules/utils/serialization.py +0 -57
- package/td/modules/utils/types.py +0 -33
- package/td/modules/utils/utils_logging.py +0 -60
- package/td/templates/mcp/api_controller_handlers.mustache +0 -63
package/README.ja.md
CHANGED
|
@@ -24,11 +24,10 @@ TouchDesigner MCPは、AIモデルとTouchDesigner WebServer DAT 間のブリッ
|
|
|
24
24
|
|
|
25
25
|
npxを使用する場合、TouchDesignerコンポーネントを別途ダウンロードする必要があります:
|
|
26
26
|
1. [リリースページ](https://github.com/8beeeaaat/touchdesigner-mcp/releases)から `touchdesigner-mcp-td.zip` をダウンロード
|
|
27
|
-
2. zip
|
|
28
|
-
3. 展開したファイルから `mcp_webserver_base.tox` を操作したいTouchDesignerプロジェクト直下にimportします。
|
|
27
|
+
2. zipファイルを展開したフォルダから `mcp_webserver_base.tox` を操作したいTouchDesignerプロジェクト直下にimportします。
|
|
29
28
|
例: `/project1/mcp_webserver_base` となるように配置
|
|
30
29
|
|
|
31
|
-
**⚠️ 重要:**
|
|
30
|
+
**⚠️ 重要:** ディレクトリの構造は展開した状態を正確に保持する必要があります。`mcp_webserver_base.tox` コンポーネントは `modules/` ディレクトリやその他のファイルへの相対パスを参照しています。展開したディレクトリ内のファイルを移動したり再編成したりしないでください。
|
|
32
31
|
|
|
33
32
|
##### 2. AIエージェントの設定:
|
|
34
33
|
|
|
@@ -39,7 +38,8 @@ npxを使用する場合、TouchDesignerコンポーネントを別途ダウン
|
|
|
39
38
|
"touchdesigner": {
|
|
40
39
|
"command": "npx",
|
|
41
40
|
"args": [
|
|
42
|
-
"
|
|
41
|
+
"-y",
|
|
42
|
+
"touchdesigner-mcp-server@prerelease",
|
|
43
43
|
"--stdio"
|
|
44
44
|
]
|
|
45
45
|
}
|
package/README.md
CHANGED
|
@@ -24,11 +24,11 @@ TouchDesigner MCP acts as a bridge between AI models and the TouchDesigner WebSe
|
|
|
24
24
|
|
|
25
25
|
Since you're using npx, you'll need to download the TouchDesigner components separately:
|
|
26
26
|
1. Download `touchdesigner-mcp-td.zip` from the [releases page](https://github.com/8beeeaaat/touchdesigner-mcp/releases)
|
|
27
|
-
2. Extract the zip file to get the
|
|
27
|
+
2. Extract the zip file to get the directory
|
|
28
28
|
3. Import `mcp_webserver_base.tox` from the extracted files directly under the TouchDesigner project you want to control.
|
|
29
29
|
Example: Place it as `/project1/mcp_webserver_base`
|
|
30
30
|
|
|
31
|
-
**⚠️ Important:** The
|
|
31
|
+
**⚠️ Important:** The directory structure must be preserved exactly as extracted. The `mcp_webserver_base.tox` component references relative paths to the `modules/` directory and other files. Do not move or reorganize files within the extracted directory.
|
|
32
32
|
|
|
33
33
|
#### 2. Configure your AI agent:
|
|
34
34
|
|
|
@@ -39,7 +39,8 @@ Example: Place it as `/project1/mcp_webserver_base`
|
|
|
39
39
|
"touchdesigner": {
|
|
40
40
|
"command": "npx",
|
|
41
41
|
"args": [
|
|
42
|
-
"
|
|
42
|
+
"-y",
|
|
43
|
+
"touchdesigner-mcp-server@prerelease",
|
|
43
44
|
"--stdio"
|
|
44
45
|
]
|
|
45
46
|
}
|
package/dist/cli.js
CHANGED
|
File without changes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Do not edit manually.
|
|
4
4
|
* TouchDesigner API
|
|
5
5
|
* OpenAPI schema for generating TouchDesigner API client code
|
|
6
|
-
* OpenAPI spec version: 0.4.0-alpha.
|
|
6
|
+
* OpenAPI spec version: 0.4.0-alpha.2
|
|
7
7
|
*/
|
|
8
8
|
import { customInstance } from '../../api/customInstance.js';
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
package/dist/index.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "touchdesigner-mcp-server",
|
|
3
|
-
"version": "0.4.0-alpha.
|
|
3
|
+
"version": "0.4.0-alpha.2",
|
|
4
4
|
"description": "MCP server for TouchDesigner",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -16,6 +16,11 @@
|
|
|
16
16
|
"url": "https://github.com/8beeeaaat/touchdesigner-mcp/issues"
|
|
17
17
|
},
|
|
18
18
|
"homepage": "https://github.com/8beeeaaat/touchdesigner-mcp#readme",
|
|
19
|
+
"main": "dist/index.js",
|
|
20
|
+
"types": "dist/index.d.ts",
|
|
21
|
+
"bin": {
|
|
22
|
+
"touchdesigner-mcp-server": "dist/cli.js"
|
|
23
|
+
},
|
|
19
24
|
"dependencies": {
|
|
20
25
|
"@modelcontextprotocol/sdk": "^1.11.1",
|
|
21
26
|
"@mozilla/readability": "^0.6.0",
|
|
@@ -36,32 +41,31 @@
|
|
|
36
41
|
"mustache": "^4.2.0",
|
|
37
42
|
"npm-run-all": "^4.1.5",
|
|
38
43
|
"orval": "^7.9.0",
|
|
44
|
+
"shx": "^0.4.0",
|
|
39
45
|
"typescript": "^5.8.3",
|
|
40
46
|
"vitest": "^3.1.3",
|
|
41
47
|
"yaml": "^2.7.1"
|
|
42
48
|
},
|
|
43
49
|
"type": "module",
|
|
44
|
-
"main": "dist/index.js",
|
|
45
|
-
"types": "dist/index.d.ts",
|
|
46
|
-
"bin": {
|
|
47
|
-
"touchdesigner-mcp-server": "dist/cli.js",
|
|
48
|
-
"touchdesigner-mcp": "dist/cli.js"
|
|
49
|
-
},
|
|
50
50
|
"exports": {
|
|
51
51
|
".": {
|
|
52
52
|
"import": "./dist/index.js",
|
|
53
53
|
"types": "./dist/index.d.ts"
|
|
54
|
+
},
|
|
55
|
+
"./cli": {
|
|
56
|
+
"import": "./dist/cli.js",
|
|
57
|
+
"types": "./dist/cli.d.ts"
|
|
54
58
|
}
|
|
55
59
|
},
|
|
56
60
|
"scripts": {
|
|
57
61
|
"build": "run-s build:*",
|
|
58
62
|
"build:gen": "npm run gen",
|
|
59
|
-
"build:dist": "tsc",
|
|
63
|
+
"build:dist": "tsc && shx chmod +x dist/*.js",
|
|
60
64
|
"lint": "run-p lint:*",
|
|
61
65
|
"lint:biome": "biome check",
|
|
62
66
|
"lint:tsc": "tsc --noEmit",
|
|
63
67
|
"format": "biome check --fix",
|
|
64
|
-
"dev": "npx @modelcontextprotocol/inspector node dist/
|
|
68
|
+
"dev": "npx @modelcontextprotocol/inspector node dist/cli.js --stdio",
|
|
65
69
|
"test": "run-p test:*",
|
|
66
70
|
"test:integration": "vitest run ./tests/integration",
|
|
67
71
|
"test:unit": "vitest run ./tests/unit",
|
|
@@ -72,9 +76,7 @@
|
|
|
72
76
|
"gen:mcp": "orval --config ./orval.config.ts"
|
|
73
77
|
},
|
|
74
78
|
"files": [
|
|
75
|
-
"dist/**/*"
|
|
76
|
-
"td/**/*",
|
|
77
|
-
"README*"
|
|
79
|
+
"dist/**/*"
|
|
78
80
|
],
|
|
79
81
|
"msw": {
|
|
80
82
|
"workerDirectory": [
|
package/td/genHandlers.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import fs from "fs-extra";
|
|
3
|
-
import mustache from "mustache";
|
|
4
|
-
import yaml from "yaml";
|
|
5
|
-
|
|
6
|
-
const openapiPath = path.resolve(
|
|
7
|
-
"td/modules/td_server/openapi_server/openapi/openapi.yaml",
|
|
8
|
-
);
|
|
9
|
-
const templatePath = path.resolve(
|
|
10
|
-
"td/templates/mcp/api_controller_handlers.mustache",
|
|
11
|
-
);
|
|
12
|
-
const outputPath = path.resolve(
|
|
13
|
-
"td/modules/mcp/controllers/generated_handlers.py",
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
async function generateHandlers() {
|
|
17
|
-
try {
|
|
18
|
-
const yamlContent = await fs.readFile(openapiPath, "utf-8");
|
|
19
|
-
const openapiDoc = yaml.parse(yamlContent);
|
|
20
|
-
const operations = [];
|
|
21
|
-
|
|
22
|
-
if (openapiDoc.paths) {
|
|
23
|
-
for (const pathKey of Object.keys(openapiDoc.paths)) {
|
|
24
|
-
const methods = openapiDoc.paths[pathKey];
|
|
25
|
-
for (const methodKey of Object.keys(methods)) {
|
|
26
|
-
const operation = methods[methodKey];
|
|
27
|
-
if (operation.operationId) {
|
|
28
|
-
operations.push({ operationId: operation.operationId });
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
const template = await fs.readFile(templatePath, "utf-8");
|
|
34
|
-
const rendered = mustache.render(template, {
|
|
35
|
-
operations,
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
await fs.outputFile(outputPath, rendered);
|
|
39
|
-
|
|
40
|
-
console.log("✅ generated_handlers.py created successfully!");
|
|
41
|
-
} catch (error) {
|
|
42
|
-
console.error("❌ Error generating handlers:", error);
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
generateHandlers();
|
package/td/import_modules.py
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import sys
|
|
3
|
-
|
|
4
|
-
import yaml
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
def setup():
|
|
8
|
-
externaltox = parent().par.externaltox.eval()
|
|
9
|
-
tox_dir_path = os.path.dirname(externaltox)
|
|
10
|
-
modules_path = os.path.join(tox_dir_path, "modules")
|
|
11
|
-
|
|
12
|
-
if modules_path not in sys.path:
|
|
13
|
-
sys.path.append(modules_path)
|
|
14
|
-
|
|
15
|
-
td_server_path = os.path.join(modules_path, "td_server")
|
|
16
|
-
if td_server_path not in sys.path:
|
|
17
|
-
sys.path.append(td_server_path)
|
|
18
|
-
|
|
19
|
-
schema_path = find_openapi_schema_path(modules_path)
|
|
20
|
-
try:
|
|
21
|
-
if schema_path is None:
|
|
22
|
-
raise FileNotFoundError(
|
|
23
|
-
"OpenAPI schema file not found in any known location."
|
|
24
|
-
)
|
|
25
|
-
with open(schema_path, "r") as f:
|
|
26
|
-
openapi_schema = yaml.safe_load(f)
|
|
27
|
-
except Exception as e:
|
|
28
|
-
openapi_schema = {}
|
|
29
|
-
print("Failed to load OpenAPI schema:", e)
|
|
30
|
-
|
|
31
|
-
import mcp
|
|
32
|
-
|
|
33
|
-
mcp.openapi_schema = openapi_schema
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def find_openapi_schema_path(modules_path):
|
|
37
|
-
candidates = [
|
|
38
|
-
os.path.join(
|
|
39
|
-
modules_path, "td_server", "openapi_server", "openapi", "openapi.yaml"
|
|
40
|
-
),
|
|
41
|
-
os.path.join(
|
|
42
|
-
os.path.dirname(os.path.dirname(modules_path)),
|
|
43
|
-
"td_server",
|
|
44
|
-
"openapi_server",
|
|
45
|
-
"openapi",
|
|
46
|
-
"openapi.yaml",
|
|
47
|
-
),
|
|
48
|
-
]
|
|
49
|
-
for path in candidates:
|
|
50
|
-
if os.path.exists(path):
|
|
51
|
-
return path
|
|
52
|
-
return None
|
|
Binary file
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
MCP Controller package initialization
|
|
3
|
-
Exports controller classes for dependency injection
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from mcp.controllers.api_controller import APIControllerOpenAPI, api_controller_openapi
|
|
7
|
-
from mcp.controllers.openapi_router import OpenAPIRouter
|
|
8
|
-
|
|
9
|
-
__all__ = ["APIControllerOpenAPI", "api_controller_openapi", "OpenAPIRouter"]
|