@hybridlabor-api/aos 4.2.0 → 4.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/.claude/hooks/memb-inject.mjs +121 -0
- package/.claude/settings.json +10 -0
- package/CLAUDE.md +37 -84
- package/CODEX.md +31 -12
- package/GEMINI.md +51 -58
- package/README.de.md +13 -14
- package/README.md +13 -14
- package/README.pt.md +13 -14
- package/THIRD_PARTY_NOTICES.md +54 -0
- package/docs/skills_table.md +0 -2
- package/installer.js +29 -16
- package/package.json +21 -2
- package/scripts/validate-skills.mjs +402 -0
- package/skills/basic/godmode-engineering/SKILL.md +1 -1
- package/skills/basic/godmode-shipping/SKILL.md +1 -1
- package/skills/github-repo/SKILL.md +1 -0
- package/skills/global_config/agent-tool-builder/SKILL.md +5 -4
- package/skills/global_config/ai-product/SKILL.md +3 -2
- package/skills/global_config/aos-project-init/SKILL.md +194 -0
- package/skills/global_config/aos-project-init/assets/AGENTS.template.md +56 -0
- package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +137 -0
- package/skills/global_config/aos-setup/SKILL.md +222 -0
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +262 -0
- package/skills/global_config/ask-tim/SKILL.md +4 -2
- package/skills/global_config/{bdb-adobe-suite-mcp.md → bdb-adobe-suite-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-after-effects-mcp.md → bdb-after-effects-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-blender-mcp.md → bdb-blender-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-computer-use-mcp.md → bdb-computer-use-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-davinci-mcp.md → bdb-davinci-mcp/SKILL.md} +1 -0
- package/skills/global_config/bdb-ecosystem-health/SKILL.md +3 -3
- package/skills/global_config/{bdb-grandma3-mcp.md → bdb-grandma3-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-memb-mcp.md → bdb-memb-mcp/SKILL.md} +10 -0
- package/skills/global_config/{bdb-resolume-mcp.md → bdb-resolume-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-rhino-mcp.md → bdb-rhino-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-touchdesigner-mcp.md → bdb-touchdesigner-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-unreal-mcp.md → bdb-unreal-mcp/SKILL.md} +1 -0
- package/skills/global_config/{bdb-vectorworks-mcp.md → bdb-vectorworks-mcp/SKILL.md} +1 -0
- package/skills/global_config/bdbsaashost/SKILL.md +50 -50
- package/skills/global_config/browser-automation/SKILL.md +4 -4
- package/skills/global_config/crewai/SKILL.md +3 -2
- package/skills/global_config/debugger/SKILL.md +3 -6
- package/skills/global_config/git-advanced-workflows/SKILL.md +0 -1
- package/skills/global_config/github-actions-templates/SKILL.md +0 -2
- package/skills/global_config/neon-postgres/SKILL.md +3 -2
- package/skills/global_config/playwright-skill/SKILL.md +1 -1
- package/skills/global_config/posix-shell-pro/SKILL.md +0 -1
- package/skills/global_config/postgres-best-practices/SKILL.md +1 -1
- package/skills/global_config/prompt-engineering-patterns/SKILL.md +0 -1
- package/skills/global_config/rag-engineer/SKILL.md +4 -3
- package/skills/global_config/react-best-practices/SKILL.md +1 -1
- package/skills/global_config/remotion/SKILL.md +0 -1
- package/skills/global_config/seo/SKILL.md +6 -41
- package/skills/global_config/systematic-debugging/CREATION-LOG.md +1 -1
- package/skills/global_config/systematic-debugging/root-cause-tracing.md +1 -1
- package/skills/global_config/turborepo-caching/SKILL.md +0 -1
- package/skills/global_config/using-neon/SKILL.md +1 -47
- package/skills/global_config/vector-database-engineer/SKILL.md +0 -1
- package/skills/global_config/web-artifacts-builder/LICENSE.txt +1 -1
- package/skills/global_config/web-artifacts-builder/SKILL.md +1 -1
- package/skills/global_config/webapp-testing/LICENSE.txt +1 -1
- package/skills/global_config/webapp-testing/SKILL.md +1 -1
- package/assets/Give_AI_Agents_Control_of_Creative_Software.mp4 +0 -0
- package/mcps/RhinoMCP/connector/icon-dark.png +0 -3
- package/mcps/RhinoMCP/connector/icon-light.png +0 -3
- package/mcps/RhinoMCP/connector/screenshots/casa-rhino.png +0 -3
- package/mcps/RhinoMCP/docs/assets/css/custom.css +0 -640
- package/mcps/RhinoMCP/docs/content/_index.md +0 -88
- package/mcps/RhinoMCP/docs/content/docs/_index.md +0 -35
- package/mcps/RhinoMCP/docs/content/docs/advanced/_index.md +0 -37
- package/mcps/RhinoMCP/docs/content/docs/advanced/bulk-file-processing.md +0 -70
- package/mcps/RhinoMCP/docs/content/docs/advanced/headless-render-farm.md +0 -60
- package/mcps/RhinoMCP/docs/content/docs/advanced/make-this-parametric.md +0 -56
- package/mcps/RhinoMCP/docs/content/docs/advanced/sketch-to-model.md +0 -58
- package/mcps/RhinoMCP/docs/content/docs/advanced/upgrade-gh1-to-gh2.md +0 -51
- package/mcps/RhinoMCP/docs/content/docs/developers/_index.md +0 -39
- package/mcps/RhinoMCP/docs/content/docs/developers/dev-troubleshooting.md +0 -15
- package/mcps/RhinoMCP/docs/content/docs/developers/plugin-prototyping.md +0 -56
- package/mcps/RhinoMCP/docs/content/docs/developers/upgrade-gh1-to-gh2.md +0 -98
- package/mcps/RhinoMCP/docs/content/docs/developers/upgrade-to-netcore.md +0 -53
- package/mcps/RhinoMCP/docs/content/docs/developers/windows-to-cross-platform.md +0 -58
- package/mcps/RhinoMCP/docs/content/docs/developers/wpf-to-eto.md +0 -64
- package/mcps/RhinoMCP/docs/content/docs/getting-started/_index.md +0 -45
- package/mcps/RhinoMCP/docs/content/docs/getting-started/cc-plugin.md +0 -116
- package/mcps/RhinoMCP/docs/content/docs/getting-started/connector.md +0 -65
- package/mcps/RhinoMCP/docs/content/docs/getting-started/copilot.md +0 -61
- package/mcps/RhinoMCP/docs/content/docs/getting-started/lm-studio.md +0 -62
- package/mcps/RhinoMCP/docs/content/docs/troubleshooting.md +0 -66
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/_index.md +0 -39
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/_index.md +0 -25
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/build-grasshopper.md +0 -26
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/generate-variations.md +0 -25
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/inspect-and-report.md +0 -26
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/layers.md +0 -28
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/examples/model-from-image.md +0 -27
- package/mcps/RhinoMCP/docs/content/docs/try-it-out/recipes.md +0 -178
- package/mcps/RhinoMCP/docs/data/icons.yaml +0 -3
- package/mcps/RhinoMCP/docs/go.mod +0 -5
- package/mcps/RhinoMCP/docs/go.sum +0 -4
- package/mcps/RhinoMCP/docs/hugo.yaml +0 -78
- package/mcps/RhinoMCP/docs/layouts/_partials/sidebar.html +0 -333
- package/mcps/RhinoMCP/docs/layouts/docs/list.html +0 -29
- package/mcps/RhinoMCP/docs/layouts/docs/single.html +0 -29
- package/mcps/RhinoMCP/docs/layouts/partials/custom/head-end.html +0 -3
- package/mcps/RhinoMCP/docs/layouts/shortcodes/download-asset.html +0 -21
- package/mcps/RhinoMCP/docs/layouts/shortcodes/github.html +0 -21
- package/mcps/RhinoMCP/docs/layouts/shortcodes/prompt.html +0 -23
- package/mcps/RhinoMCP/docs/layouts/shortcodes/yak.html +0 -21
- package/mcps/RhinoMCP/docs/static/developer/sel-arc.png +0 -3
- package/mcps/RhinoMCP/docs/static/developer/voxelizer-gh2-conversion.png +0 -3
- package/mcps/RhinoMCP/docs/static/examples/ai-kettle.png +0 -3
- package/mcps/RhinoMCP/docs/static/examples/casa_rhino_shapes.png +0 -3
- package/mcps/RhinoMCP/docs/static/examples/kettle.jpg +0 -0
- package/mcps/RhinoMCP/docs/static/examples/raygun-layers.png +0 -3
- package/mcps/RhinoMCP/docs/static/examples/raygun-thumbnail.png +0 -3
- package/mcps/RhinoMCP/docs/static/examples/twisty-tower-gh.png +0 -3
- package/mcps/RhinoMCP/docs/static/favicon.svg +0 -26
- package/mcps/RhinoMCP/docs/static/images/landing-dark.png +0 -3
- package/mcps/RhinoMCP/docs/static/images/landing.png +0 -3
- package/mcps/RhinoMCP/docs/static/images/logo-dark.svg +0 -26
- package/mcps/RhinoMCP/docs/static/images/logo.svg +0 -26
- package/mcps/RhinoMCP/docs/static/local-llm.png +0 -3
- package/mcps/RhinoMCP/rhino/plugin/icon.png +0 -3
- package/mcps/RhinoMCP/tests/Acp.Tests/Acp.Tests.csproj +0 -29
- package/mcps/RhinoMCP/tests/Acp.Tests/CoverageTests.cs +0 -52
- package/mcps/RhinoMCP/tests/Acp.Tests/Fakes.cs +0 -90
- package/mcps/RhinoMCP/tests/Acp.Tests/GlobalUsings.cs +0 -1
- package/mcps/RhinoMCP/tests/Acp.Tests/LoopbackTests.cs +0 -59
- package/mcps/RhinoMCP/tests/Acp.Tests/RobustnessTests.cs +0 -124
- package/mcps/RhinoMCP/tests/Acp.Tests/SerializationTests.cs +0 -94
- package/mcps/RhinoMCP/tests/Integration.Tests/AdoptedSlotTests.cs +0 -136
- package/mcps/RhinoMCP/tests/Integration.Tests/AutoSpawnNotificationTests.cs +0 -63
- package/mcps/RhinoMCP/tests/Integration.Tests/CloseSlotAgentTests.cs +0 -56
- package/mcps/RhinoMCP/tests/Integration.Tests/CloseSlotTests.cs +0 -37
- package/mcps/RhinoMCP/tests/Integration.Tests/DocLifecycleTests.cs +0 -42
- package/mcps/RhinoMCP/tests/Integration.Tests/GlobalUsings.cs +0 -3
- package/mcps/RhinoMCP/tests/Integration.Tests/GrasshopperStartTests.cs +0 -56
- package/mcps/RhinoMCP/tests/Integration.Tests/Harness/ReturnResult.cs +0 -28
- package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RhinoMcpFixture.cs +0 -90
- package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RhinoMcpRouter.cs +0 -111
- package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RhinoRouterPaths.cs +0 -83
- package/mcps/RhinoMCP/tests/Integration.Tests/Harness/RouterFixture.cs +0 -50
- package/mcps/RhinoMCP/tests/Integration.Tests/Integration.Tests.csproj +0 -31
- package/mcps/RhinoMCP/tests/Integration.Tests/ListSlotsShapeTests.cs +0 -55
- package/mcps/RhinoMCP/tests/Integration.Tests/ListSlotsTests.cs +0 -19
- package/mcps/RhinoMCP/tests/Integration.Tests/MacSharedProcessTests.cs +0 -87
- package/mcps/RhinoMCP/tests/Integration.Tests/MultiRouterTests.cs +0 -74
- package/mcps/RhinoMCP/tests/Integration.Tests/PluginToolTests.cs +0 -115
- package/mcps/RhinoMCP/tests/Integration.Tests/README.md +0 -35
- package/mcps/RhinoMCP/tests/Integration.Tests/RhinoCrashHandlingTests.cs +0 -107
- package/mcps/RhinoMCP/tests/Integration.Tests/SlotReapingTests.cs +0 -84
- package/mcps/RhinoMCP/tests/Integration.Tests/SpawnErrorTests.cs +0 -52
- package/mcps/RhinoMCP/tests/Integration.Tests/SpawnSlotTests.cs +0 -66
- package/mcps/RhinoMCP/tests/Integration.Tests/ToolDispatchBySlotTests.cs +0 -53
- package/mcps/RhinoMCP/tests/Integration.Tests/WindowsProcessIsolationTests.cs +0 -62
- package/mcps/RhinoMCP/tests/Router.Tests/CodegenTests.cs +0 -125
- package/mcps/RhinoMCP/tests/Router.Tests/ReturnResultTests.cs +0 -90
- package/mcps/RhinoMCP/tests/Router.Tests/RhinoCrashReportFinderTests.cs +0 -207
- package/mcps/RhinoMCP/tests/Router.Tests/RhinoLocatorOverrideTests.cs +0 -61
- package/mcps/RhinoMCP/tests/Router.Tests/RhinoLocatorTests.cs +0 -38
- package/mcps/RhinoMCP/tests/Router.Tests/RhinoManagerResolutionTests.cs +0 -151
- package/mcps/RhinoMCP/tests/Router.Tests/Router.Tests.csproj +0 -31
- package/mcps/RhinoMCP/tests/Router.Tests/RouterConfigTests.cs +0 -92
- package/mcps/RhinoMCP/tests/Router.Tests/SlotStoreLaunchingAbsenceTests.cs +0 -70
- package/mcps/RhinoMCP/tests/Router.Tests/SlotStorePortReservationTests.cs +0 -92
- package/mcps/RhinoMCP/tests/Router.Tests/SpawnDiagnosticsTests.cs +0 -100
- package/mcps/RhinoMCP/tests/Router.Tests/SpawnSlotToolDiagnoseTests.cs +0 -66
- package/mcps/RhinoMCP/tests/Server.Tests/McpConfigEditTests.cs +0 -223
- package/mcps/RhinoMCP/tests/Server.Tests/ParameterBinderTests.cs +0 -208
- package/mcps/RhinoMCP/tests/Server.Tests/ProtocolTests.cs +0 -200
- package/mcps/RhinoMCP/tests/Server.Tests/ResourceRegistryTests.cs +0 -218
- package/mcps/RhinoMCP/tests/Server.Tests/ResultUnwrapperTests.cs +0 -53
- package/mcps/RhinoMCP/tests/Server.Tests/SchemaBuilderTests.cs +0 -166
- package/mcps/RhinoMCP/tests/Server.Tests/Server.Tests.csproj +0 -40
- package/mcps/RhinoMCP/tests/StreamJson.Tests/AcpMessageMapperTests.cs +0 -82
- package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentPromptsTests.cs +0 -56
- package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentRegistryOverlayTests.cs +0 -88
- package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentRegistryResolutionTests.cs +0 -152
- package/mcps/RhinoMCP/tests/StreamJson.Tests/AgentRunnerTurnTests.cs +0 -149
- package/mcps/RhinoMCP/tests/StreamJson.Tests/ClaudeStreamJsonParserTests.cs +0 -118
- package/mcps/RhinoMCP/tests/StreamJson.Tests/CodexStreamJsonParserTests.cs +0 -100
- package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationStorePruneTests.cs +0 -94
- package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationStoreRoundTripTests.cs +0 -70
- package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationTests.cs +0 -153
- package/mcps/RhinoMCP/tests/StreamJson.Tests/ConversationUsageTests.cs +0 -56
- package/mcps/RhinoMCP/tests/StreamJson.Tests/GlobalUsings.cs +0 -12
- package/mcps/RhinoMCP/tests/StreamJson.Tests/Shims.cs +0 -93
- package/mcps/RhinoMCP/tests/StreamJson.Tests/StreamJson.Tests.csproj +0 -56
- package/mcps/RhinoMCP/tests/StreamJson.Tests/StreamJsonAgentLoopbackTests.cs +0 -75
- package/mcps/RhinoMCP/tests/StreamJson.Tests/StreamJsonParserEdgeCaseTests.cs +0 -128
- package/mcps/RhinoMCP/tests/StreamJson.Tests/TokenUsageTests.cs +0 -40
- package/mcps/RhinoMCP/tests/launcher/launcher.test.mjs +0 -461
- package/mcps/RhinoMCP/tests/launcher/package.json +0 -8
- package/mcps/ae-mcp/docs/demo.png +0 -0
- package/mcps/ae-mcp/docs/demo1.png +0 -0
- package/mcps/ae-mcp/docs/demo3.png +0 -0
- package/mcps/ae-mcp/docs/video.png +0 -0
- package/mcps/after-effects-mcp/assets/MCP Auto Bridge.png +0 -0
- package/mcps/bdb-remoteos-mcp/tests/__init__.py +0 -1
- package/mcps/bdb-remoteos-mcp/tests/mock_incus.py +0 -60
- package/mcps/bdb-remoteos-mcp/tests/test_mcp_server.py +0 -27
- package/mcps/bdb-remoteos-mcp/tests/test_security_redteam.py +0 -349
- package/mcps/bdb-remoteos-mcp/tests/test_webhook.py +0 -61
- package/mcps/blender-mcp/assets/addon-instructions.png +0 -0
- package/mcps/blender-mcp/assets/hammer-icon.png +0 -0
- package/mcps/blender-mcp-server/docs/architecture.md +0 -209
- package/mcps/blender-mcp-server/docs/images/demo_render.png +0 -0
- package/mcps/blender-mcp-server/docs/python-execute-design.md +0 -515
- package/mcps/blender-mcp-server/tests/__init__.py +0 -0
- package/mcps/blender-mcp-server/tests/test_addon.py +0 -953
- package/mcps/blender-mcp-server/tests/test_server.py +0 -364
- package/mcps/davinci-mcp-professional/docs/README.md +0 -67
- package/mcps/davinci-mcp-professional/docs/html/README_8md.html +0 -113
- package/mcps/davinci-mcp-professional/docs/html/____init_____8py.html +0 -126
- package/mcps/davinci-mcp-professional/docs/html/____init_____8py.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/____init_____8py_source.html +0 -125
- package/mcps/davinci-mcp-professional/docs/html/__version_8py.html +0 -130
- package/mcps/davinci-mcp-professional/docs/html/__version_8py.js +0 -9
- package/mcps/davinci-mcp-professional/docs/html/__version_8py_source.html +0 -130
- package/mcps/davinci-mcp-professional/docs/html/annotated.html +0 -123
- package/mcps/davinci-mcp-professional/docs/html/annotated_dup.js +0 -21
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveClient-members.html +0 -131
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveClient.html +0 -706
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveClient.js +0 -26
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError.html +0 -143
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__coll__graph.map +0 -7
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__inherit__graph.map +0 -7
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveConnectionError__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError.html +0 -143
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__coll__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__inherit__graph.map +0 -9
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveError__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError.html +0 -143
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__coll__graph.map +0 -7
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__inherit__graph.map +0 -7
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1resolve__client_1_1DaVinciResolveNotRunningError__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1server_1_1DaVinciMCPServer-members.html +0 -115
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1server_1_1DaVinciMCPServer.html +0 -325
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1server_1_1DaVinciMCPServer.js +0 -10
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool-members.html +0 -110
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool.html +0 -188
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__coll__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__inherit__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciMediaPool__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject-members.html +0 -113
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject.html +0 -248
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject.js +0 -8
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager-members.html +0 -113
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager.html +0 -252
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager.js +0 -8
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__coll__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__inherit__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProjectManager__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__coll__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__inherit__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciProject__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp-members.html +0 -115
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp.html +0 -288
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp.js +0 -10
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__coll__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__inherit__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciResolveApp__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline-members.html +0 -110
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline.html +0 -188
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__coll__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__coll__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__coll__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__inherit__graph.map +0 -5
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__inherit__graph.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/classdavinci__mcp_1_1types_1_1DaVinciTimeline__inherit__graph.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/classes.html +0 -111
- package/mcps/davinci-mcp-professional/docs/html/cli_8py.html +0 -135
- package/mcps/davinci-mcp-professional/docs/html/cli_8py.js +0 -11
- package/mcps/davinci-mcp-professional/docs/html/cli_8py_source.html +0 -249
- package/mcps/davinci-mcp-professional/docs/html/clipboard.js +0 -61
- package/mcps/davinci-mcp-professional/docs/html/cookie.js +0 -58
- package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe.html +0 -127
- package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe_dep.map +0 -4
- package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe_dep.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/dir_1a1069c9a5427270b3ccd00c87d405fe_dep.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603.html +0 -128
- package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603_dep.map +0 -4
- package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603_dep.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/dir_6a5346f4427b2e9426ba2ccfd9f0b603_dep.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef.html +0 -127
- package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef_dep.map +0 -4
- package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef_dep.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/dir_77c8a4d399bde190a30252eceec792ef_dep.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/dir_f94b29b73815c35a8351f4403bcc4f74.html +0 -129
- package/mcps/davinci-mcp-professional/docs/html/dir_f94b29b73815c35a8351f4403bcc4f74.js +0 -12
- package/mcps/davinci-mcp-professional/docs/html/doxygen.css +0 -2540
- package/mcps/davinci-mcp-professional/docs/html/doxygen.svg +0 -28
- package/mcps/davinci-mcp-professional/docs/html/doxygen_crawl.html +0 -170
- package/mcps/davinci-mcp-professional/docs/html/dynsections.js +0 -198
- package/mcps/davinci-mcp-professional/docs/html/files.html +0 -123
- package/mcps/davinci-mcp-professional/docs/html/files_dup.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/functions.html +0 -190
- package/mcps/davinci-mcp-professional/docs/html/functions_func.html +0 -184
- package/mcps/davinci-mcp-professional/docs/html/functions_vars.html +0 -110
- package/mcps/davinci-mcp-professional/docs/html/graph_legend.html +0 -165
- package/mcps/davinci-mcp-professional/docs/html/graph_legend.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/graph_legend.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/hierarchy.html +0 -123
- package/mcps/davinci-mcp-professional/docs/html/hierarchy.js +0 -18
- package/mcps/davinci-mcp-professional/docs/html/index.html +0 -200
- package/mcps/davinci-mcp-professional/docs/html/index.js +0 -9
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_0.map +0 -3
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_0.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_0.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_1.map +0 -3
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_1.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_1.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_2.map +0 -9
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_2.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_2.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_3.map +0 -13
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_3.md5 +0 -1
- package/mcps/davinci-mcp-professional/docs/html/inherit_graph_3.png +0 -0
- package/mcps/davinci-mcp-professional/docs/html/inherits.html +0 -145
- package/mcps/davinci-mcp-professional/docs/html/jquery.js +0 -204
- package/mcps/davinci-mcp-professional/docs/html/menu.js +0 -131
- package/mcps/davinci-mcp-professional/docs/html/menudata.js +0 -73
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp.html +0 -209
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp.js +0 -34
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1__version.html +0 -260
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1cli.html +0 -303
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1resolve__client.html +0 -147
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1resolve__client.js +0 -8
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1resources.html +0 -140
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1server.html +0 -144
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1server.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1tools.html +0 -140
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1types.html +0 -216
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1types.js +0 -13
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1utils.html +0 -155
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1utils.js +0 -11
- package/mcps/davinci-mcp-professional/docs/html/namespacedavinci__mcp_1_1utils_1_1platform.html +0 -232
- package/mcps/davinci-mcp-professional/docs/html/namespacemembers.html +0 -173
- package/mcps/davinci-mcp-professional/docs/html/namespacemembers_func.html +0 -114
- package/mcps/davinci-mcp-professional/docs/html/namespacemembers_vars.html +0 -121
- package/mcps/davinci-mcp-professional/docs/html/namespaces.html +0 -119
- package/mcps/davinci-mcp-professional/docs/html/namespaces_dup.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/navtree.css +0 -327
- package/mcps/davinci-mcp-professional/docs/html/navtree.js +0 -901
- package/mcps/davinci-mcp-professional/docs/html/navtreedata.js +0 -68
- package/mcps/davinci-mcp-professional/docs/html/navtreeindex0.js +0 -212
- package/mcps/davinci-mcp-professional/docs/html/platform_8py.html +0 -130
- package/mcps/davinci-mcp-professional/docs/html/platform_8py.js +0 -8
- package/mcps/davinci-mcp-professional/docs/html/platform_8py_source.html +0 -245
- package/mcps/davinci-mcp-professional/docs/html/resolve__client_8py.html +0 -132
- package/mcps/davinci-mcp-professional/docs/html/resolve__client_8py.js +0 -8
- package/mcps/davinci-mcp-professional/docs/html/resolve__client_8py_source.html +0 -501
- package/mcps/davinci-mcp-professional/docs/html/resources_2____init_____8py.html +0 -125
- package/mcps/davinci-mcp-professional/docs/html/resources_2____init_____8py.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/resources_2____init_____8py_source.html +0 -169
- package/mcps/davinci-mcp-professional/docs/html/search/all_0.js +0 -22
- package/mcps/davinci-mcp-professional/docs/html/search/all_1.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_10.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_11.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_12.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_13.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_2.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_3.js +0 -15
- package/mcps/davinci-mcp-professional/docs/html/search/all_4.js +0 -26
- package/mcps/davinci-mcp-professional/docs/html/search/all_5.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/all_6.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/all_7.js +0 -25
- package/mcps/davinci-mcp-professional/docs/html/search/all_8.js +0 -7
- package/mcps/davinci-mcp-professional/docs/html/search/all_9.js +0 -9
- package/mcps/davinci-mcp-professional/docs/html/search/all_a.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/all_b.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/all_c.js +0 -9
- package/mcps/davinci-mcp-professional/docs/html/search/all_d.js +0 -10
- package/mcps/davinci-mcp-professional/docs/html/search/all_e.js +0 -11
- package/mcps/davinci-mcp-professional/docs/html/search/all_f.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/classes_0.js +0 -13
- package/mcps/davinci-mcp-professional/docs/html/search/files_0.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/files_1.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/files_2.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/files_3.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/files_4.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/files_5.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/functions_0.js +0 -9
- package/mcps/davinci-mcp-professional/docs/html/search/functions_1.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/functions_2.js +0 -10
- package/mcps/davinci-mcp-professional/docs/html/search/functions_3.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/functions_4.js +0 -25
- package/mcps/davinci-mcp-professional/docs/html/search/functions_5.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/functions_6.js +0 -7
- package/mcps/davinci-mcp-professional/docs/html/search/functions_7.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/functions_8.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/functions_9.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/functions_a.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/functions_b.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/namespaces_0.js +0 -13
- package/mcps/davinci-mcp-professional/docs/html/search/pages_0.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_1.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/pages_2.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/pages_3.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_4.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/pages_5.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_6.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_7.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_8.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/pages_9.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/pages_a.js +0 -6
- package/mcps/davinci-mcp-professional/docs/html/search/pages_b.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_c.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/pages_d.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/search.css +0 -377
- package/mcps/davinci-mcp-professional/docs/html/search/search.js +0 -708
- package/mcps/davinci-mcp-professional/docs/html/search/searchdata.js +0 -33
- package/mcps/davinci-mcp-professional/docs/html/search/variables_0.js +0 -14
- package/mcps/davinci-mcp-professional/docs/html/search/variables_1.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/variables_2.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/variables_3.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/variables_4.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/variables_5.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/variables_6.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/search/variables_7.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/variables_8.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/search/variables_9.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/server_8py.html +0 -129
- package/mcps/davinci-mcp-professional/docs/html/server_8py.js +0 -5
- package/mcps/davinci-mcp-professional/docs/html/server_8py_source.html +0 -318
- package/mcps/davinci-mcp-professional/docs/html/tabs.css +0 -1
- package/mcps/davinci-mcp-professional/docs/html/tools_2____init_____8py.html +0 -125
- package/mcps/davinci-mcp-professional/docs/html/tools_2____init_____8py.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/tools_2____init_____8py_source.html +0 -253
- package/mcps/davinci-mcp-professional/docs/html/types_8py.html +0 -137
- package/mcps/davinci-mcp-professional/docs/html/types_8py.js +0 -13
- package/mcps/davinci-mcp-professional/docs/html/types_8py_source.html +0 -309
- package/mcps/davinci-mcp-professional/docs/html/utils_2____init_____8py.html +0 -125
- package/mcps/davinci-mcp-professional/docs/html/utils_2____init_____8py.js +0 -4
- package/mcps/davinci-mcp-professional/docs/html/utils_2____init_____8py_source.html +0 -123
- package/mcps/davinci-mcp-professional/tests/README.md +0 -49
- package/mcps/davinci-mcp-professional/tests/__init__.py +0 -1
- package/mcps/davinci-mcp-professional/tests/conftest.py +0 -75
- package/mcps/davinci-mcp-professional/tests/test_security.py +0 -251
- package/mcps/davinci-resolve-mcp/docs/README.md +0 -56
- package/mcps/davinci-resolve-mcp/docs/SKILL.md +0 -1635
- package/mcps/davinci-resolve-mcp/docs/authoring/fuse-dctl-authoring.md +0 -242
- package/mcps/davinci-resolve-mcp/docs/authoring/script-plugin-authoring.md +0 -195
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/README.md +0 -152
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/category-patterns.md +0 -780
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/controls.md +0 -259
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/format.md +0 -568
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/gotchas.md +0 -168
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/references/thumbnails.md +0 -106
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Blur.setting +0 -46
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Color Tint.setting +0 -78
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Cross Dissolve.setting +0 -57
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Fade Title.setting +0 -111
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Glow.setting +0 -55
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Gradient.setting +0 -52
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Iris.setting +0 -127
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Lower Third.setting +0 -192
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Noise.setting +0 -74
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Solid Color.setting +0 -55
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Title.setting +0 -105
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Vignette.setting +0 -98
- package/mcps/davinci-resolve-mcp/docs/authoring/setting-files/templates/MCP Test Wipe.setting +0 -98
- package/mcps/davinci-resolve-mcp/docs/contributing.md +0 -82
- package/mcps/davinci-resolve-mcp/docs/guides/color-decision-guide.md +0 -427
- package/mcps/davinci-resolve-mcp/docs/guides/control-panel.md +0 -234
- package/mcps/davinci-resolve-mcp/docs/guides/editorial-decision-guide.md +0 -165
- package/mcps/davinci-resolve-mcp/docs/guides/media-analysis-guide.md +0 -763
- package/mcps/davinci-resolve-mcp/docs/guides/multicam-setup-guide.md +0 -138
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/01-overview.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/02-review-bin-grid.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/03-clip-detail.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/04-transcript.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/05-shot-detail.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/06-inventory.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/07-diagnostics-resolve.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/08-preferences-analysis.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/09-ai-console.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/10-history.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/images/control-panel/11-edit-plans.png +0 -0
- package/mcps/davinci-resolve-mcp/docs/install.md +0 -208
- package/mcps/davinci-resolve-mcp/docs/integrations/workflow-integrations.md +0 -120
- package/mcps/davinci-resolve-mcp/docs/kernels/README.md +0 -28
- package/mcps/davinci-resolve-mcp/docs/kernels/audio-fairlight-kernel.md +0 -86
- package/mcps/davinci-resolve-mcp/docs/kernels/color-grade-kernel.md +0 -103
- package/mcps/davinci-resolve-mcp/docs/kernels/extension-authoring-kernel.md +0 -101
- package/mcps/davinci-resolve-mcp/docs/kernels/fusion-composition-kernel.md +0 -121
- package/mcps/davinci-resolve-mcp/docs/kernels/media-pool-ingest-kernel.md +0 -147
- package/mcps/davinci-resolve-mcp/docs/kernels/project-lifecycle-kernel.md +0 -120
- package/mcps/davinci-resolve-mcp/docs/kernels/render-deliver-kernel.md +0 -92
- package/mcps/davinci-resolve-mcp/docs/kernels/review-annotation-kernel.md +0 -110
- package/mcps/davinci-resolve-mcp/docs/kernels/timeline-conform-interchange-kernel.md +0 -102
- package/mcps/davinci-resolve-mcp/docs/kernels/timeline-edit-kernel.md +0 -189
- package/mcps/davinci-resolve-mcp/docs/notes/codec-plugin-notes.md +0 -136
- package/mcps/davinci-resolve-mcp/docs/notes/dctl-notes.md +0 -234
- package/mcps/davinci-resolve-mcp/docs/notes/fusion-template-notes.md +0 -136
- package/mcps/davinci-resolve-mcp/docs/notes/lut-notes.md +0 -136
- package/mcps/davinci-resolve-mcp/docs/notes/openfx-notes.md +0 -120
- package/mcps/davinci-resolve-mcp/docs/process/release-process.md +0 -180
- package/mcps/davinci-resolve-mcp/docs/reference/api-coverage.md +0 -521
- package/mcps/davinci-resolve-mcp/docs/reference/api-limitations.md +0 -259
- package/mcps/davinci-resolve-mcp/docs/reference/readwrite-symmetry.md +0 -25
- package/mcps/davinci-resolve-mcp/docs/reference/resolve_scripting_api.txt +0 -1024
- package/mcps/davinci-resolve-mcp/tests/_error_envelope_helpers.py +0 -35
- package/mcps/davinci-resolve-mcp/tests/benchmark_server.py +0 -270
- package/mcps/davinci-resolve-mcp/tests/create_test_timeline.py +0 -177
- package/mcps/davinci-resolve-mcp/tests/live_api_gap_verification.py +0 -274
- package/mcps/davinci-resolve-mcp/tests/live_audio_fairlight_validation.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/live_auto_sync_settings_check.py +0 -76
- package/mcps/davinci-resolve-mcp/tests/live_color_grade_validation.py +0 -89
- package/mcps/davinci-resolve-mcp/tests/live_delete_governance_check.py +0 -71
- package/mcps/davinci-resolve-mcp/tests/live_duplicate_clips_validation.py +0 -831
- package/mcps/davinci-resolve-mcp/tests/live_edit_engine_validation.py +0 -277
- package/mcps/davinci-resolve-mcp/tests/live_enum_settings_check.py +0 -89
- package/mcps/davinci-resolve-mcp/tests/live_extension_authoring_validation.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/live_fuse_diagnose.py +0 -230
- package/mcps/davinci-resolve-mcp/tests/live_fuse_smoke.py +0 -250
- package/mcps/davinci-resolve-mcp/tests/live_fusion_composition_validation.py +0 -82
- package/mcps/davinci-resolve-mcp/tests/live_fusion_keyframe_validation.py +0 -116
- package/mcps/davinci-resolve-mcp/tests/live_fusion_mask_title_validation.py +0 -286
- package/mcps/davinci-resolve-mcp/tests/live_marker_validation.py +0 -439
- package/mcps/davinci-resolve-mcp/tests/live_media_pool_ingest_validation.py +0 -98
- package/mcps/davinci-resolve-mcp/tests/live_metadata_field_inventory_validation.py +0 -379
- package/mcps/davinci-resolve-mcp/tests/live_metadata_publish_validation.py +0 -192
- package/mcps/davinci-resolve-mcp/tests/live_multicam_setup_validation.py +0 -198
- package/mcps/davinci-resolve-mcp/tests/live_path_probe.py +0 -119
- package/mcps/davinci-resolve-mcp/tests/live_project_lifecycle_validation.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/live_render_deliver_validation.py +0 -82
- package/mcps/davinci-resolve-mcp/tests/live_review_annotation_validation.py +0 -91
- package/mcps/davinci-resolve-mcp/tests/live_script_smoke.py +0 -141
- package/mcps/davinci-resolve-mcp/tests/live_sync_event_validation.py +0 -165
- package/mcps/davinci-resolve-mcp/tests/live_timeline_conform_validation.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/live_v233_validation.py +0 -282
- package/mcps/davinci-resolve-mcp/tests/test-after-restart.bat +0 -83
- package/mcps/davinci-resolve-mcp/tests/test-after-restart.sh +0 -87
- package/mcps/davinci-resolve-mcp/tests/test_action_help.py +0 -47
- package/mcps/davinci-resolve-mcp/tests/test_action_list_drift.py +0 -163
- package/mcps/davinci-resolve-mcp/tests/test_ai_console_dispatch.py +0 -91
- package/mcps/davinci-resolve-mcp/tests/test_analysis_caps.py +0 -210
- package/mcps/davinci-resolve-mcp/tests/test_analysis_runs.py +0 -157
- package/mcps/davinci-resolve-mcp/tests/test_analysis_store.py +0 -366
- package/mcps/davinci-resolve-mcp/tests/test_api_limitations_doc.py +0 -56
- package/mcps/davinci-resolve-mcp/tests/test_api_truth.py +0 -64
- package/mcps/davinci-resolve-mcp/tests/test_api_truth_mitigations.py +0 -45
- package/mcps/davinci-resolve-mcp/tests/test_append_clip_infos_result_handling.py +0 -679
- package/mcps/davinci-resolve-mcp/tests/test_audio_fairlight_probe.py +0 -216
- package/mcps/davinci-resolve-mcp/tests/test_auto_run.py +0 -76
- package/mcps/davinci-resolve-mcp/tests/test_auto_sync_audio.py +0 -171
- package/mcps/davinci-resolve-mcp/tests/test_batch_cli.py +0 -253
- package/mcps/davinci-resolve-mcp/tests/test_brain_edits.py +0 -218
- package/mcps/davinci-resolve-mcp/tests/test_bridge_metrics.py +0 -52
- package/mcps/davinci-resolve-mcp/tests/test_bulk_match_to_hero.py +0 -219
- package/mcps/davinci-resolve-mcp/tests/test_caps_events_and_history.py +0 -147
- package/mcps/davinci-resolve-mcp/tests/test_caps_integration.py +0 -315
- package/mcps/davinci-resolve-mcp/tests/test_cdl_and_install_config.py +0 -372
- package/mcps/davinci-resolve-mcp/tests/test_clip_query.py +0 -57
- package/mcps/davinci-resolve-mcp/tests/test_cloud_settings.py +0 -62
- package/mcps/davinci-resolve-mcp/tests/test_color_grade_probe.py +0 -230
- package/mcps/davinci-resolve-mcp/tests/test_confirm_token.py +0 -85
- package/mcps/davinci-resolve-mcp/tests/test_confirm_token_preferences.py +0 -22
- package/mcps/davinci-resolve-mcp/tests/test_contracts.py +0 -81
- package/mcps/davinci-resolve-mcp/tests/test_create_subtitles_settings.py +0 -111
- package/mcps/davinci-resolve-mcp/tests/test_custom_timeline.py +0 -137
- package/mcps/davinci-resolve-mcp/tests/test_cut_executor.py +0 -87
- package/mcps/davinci-resolve-mcp/tests/test_cut_ir.py +0 -82
- package/mcps/davinci-resolve-mcp/tests/test_dashboard_transport.py +0 -47
- package/mcps/davinci-resolve-mcp/tests/test_deep_vision.py +0 -311
- package/mcps/davinci-resolve-mcp/tests/test_description_xml_shape.py +0 -71
- package/mcps/davinci-resolve-mcp/tests/test_destructive_decorator_coverage.py +0 -92
- package/mcps/davinci-resolve-mcp/tests/test_destructive_hook.py +0 -245
- package/mcps/davinci-resolve-mcp/tests/test_destructive_registry_drift.py +0 -108
- package/mcps/davinci-resolve-mcp/tests/test_edit_engine.py +0 -574
- package/mcps/davinci-resolve-mcp/tests/test_embeddings.py +0 -302
- package/mcps/davinci-resolve-mcp/tests/test_entities.py +0 -225
- package/mcps/davinci-resolve-mcp/tests/test_error_envelope.py +0 -179
- package/mcps/davinci-resolve-mcp/tests/test_exhaustive_wave_a.py +0 -101
- package/mcps/davinci-resolve-mcp/tests/test_extension_authoring_probe.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/test_extract_frames.py +0 -42
- package/mcps/davinci-resolve-mcp/tests/test_extract_source_frame_ranges.py +0 -129
- package/mcps/davinci-resolve-mcp/tests/test_failure_tracker.py +0 -103
- package/mcps/davinci-resolve-mcp/tests/test_fuse_dctl_authoring.py +0 -596
- package/mcps/davinci-resolve-mcp/tests/test_fusion_comp_targeting.py +0 -269
- package/mcps/davinci-resolve-mcp/tests/test_fusion_composition_probe.py +0 -156
- package/mcps/davinci-resolve-mcp/tests/test_fusion_group_settings.py +0 -284
- package/mcps/davinci-resolve-mcp/tests/test_fusion_mask_title.py +0 -205
- package/mcps/davinci-resolve-mcp/tests/test_fusion_node_ops.py +0 -212
- package/mcps/davinci-resolve-mcp/tests/test_governance_identity.py +0 -155
- package/mcps/davinci-resolve-mcp/tests/test_grade_evidence_base.py +0 -132
- package/mcps/davinci-resolve-mcp/tests/test_import.py +0 -153
- package/mcps/davinci-resolve-mcp/tests/test_improvements.py +0 -334
- package/mcps/davinci-resolve-mcp/tests/test_inventory_exclude_bins.py +0 -139
- package/mcps/davinci-resolve-mcp/tests/test_live_api.py +0 -315
- package/mcps/davinci-resolve-mcp/tests/test_marker_params.py +0 -234
- package/mcps/davinci-resolve-mcp/tests/test_mcp_prompts.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/test_mcp_resources.py +0 -117
- package/mcps/davinci-resolve-mcp/tests/test_mcp_transport.py +0 -74
- package/mcps/davinci-resolve-mcp/tests/test_media_analysis.py +0 -4637
- package/mcps/davinci-resolve-mcp/tests/test_media_pool_append_verification.py +0 -153
- package/mcps/davinci-resolve-mcp/tests/test_media_pool_changes.py +0 -105
- package/mcps/davinci-resolve-mcp/tests/test_media_pool_delete_governance.py +0 -69
- package/mcps/davinci-resolve-mcp/tests/test_media_pool_ingest_probe.py +0 -546
- package/mcps/davinci-resolve-mcp/tests/test_media_pool_walk.py +0 -79
- package/mcps/davinci-resolve-mcp/tests/test_multicam_setup.py +0 -178
- package/mcps/davinci-resolve-mcp/tests/test_object_inspection.py +0 -140
- package/mcps/davinci-resolve-mcp/tests/test_open_control_panel.py +0 -172
- package/mcps/davinci-resolve-mcp/tests/test_p1_param_validation.py +0 -57
- package/mcps/davinci-resolve-mcp/tests/test_p1_whitelist_and_delete.py +0 -81
- package/mcps/davinci-resolve-mcp/tests/test_page_lock.py +0 -52
- package/mcps/davinci-resolve-mcp/tests/test_panel_docs_drift.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/test_partial_success_manifest.py +0 -113
- package/mcps/davinci-resolve-mcp/tests/test_persistence_safety.py +0 -147
- package/mcps/davinci-resolve-mcp/tests/test_prefer_handle.py +0 -89
- package/mcps/davinci-resolve-mcp/tests/test_project_cleanup.py +0 -111
- package/mcps/davinci-resolve-mcp/tests/test_project_lifecycle_probe.py +0 -256
- package/mcps/davinci-resolve-mcp/tests/test_project_lint.py +0 -79
- package/mcps/davinci-resolve-mcp/tests/test_project_spec.py +0 -246
- package/mcps/davinci-resolve-mcp/tests/test_propose_grade.py +0 -116
- package/mcps/davinci-resolve-mcp/tests/test_provenance.py +0 -88
- package/mcps/davinci-resolve-mcp/tests/test_readback.py +0 -77
- package/mcps/davinci-resolve-mcp/tests/test_readwrite_audit.py +0 -43
- package/mcps/davinci-resolve-mcp/tests/test_reel_name_writeback.py +0 -149
- package/mcps/davinci-resolve-mcp/tests/test_render_deliver_probe.py +0 -250
- package/mcps/davinci-resolve-mcp/tests/test_resolve20_api.py +0 -282
- package/mcps/davinci-resolve-mcp/tests/test_resolve21_actions.py +0 -386
- package/mcps/davinci-resolve-mcp/tests/test_resolve_ai_governance.py +0 -92
- package/mcps/davinci-resolve-mcp/tests/test_resolve_ai_ledger.py +0 -89
- package/mcps/davinci-resolve-mcp/tests/test_resolve_busy.py +0 -134
- package/mcps/davinci-resolve-mcp/tests/test_review_annotation_probe.py +0 -162
- package/mcps/davinci-resolve-mcp/tests/test_sampling_modes.py +0 -293
- package/mcps/davinci-resolve-mcp/tests/test_script_plugin.py +0 -750
- package/mcps/davinci-resolve-mcp/tests/test_shot_relationships.py +0 -254
- package/mcps/davinci-resolve-mcp/tests/test_spec_lint_wiring.py +0 -311
- package/mcps/davinci-resolve-mcp/tests/test_static_undefined_names.py +0 -45
- package/mcps/davinci-resolve-mcp/tests/test_structural_diff.py +0 -67
- package/mcps/davinci-resolve-mcp/tests/test_sync_detection.py +0 -213
- package/mcps/davinci-resolve-mcp/tests/test_thumbnail_image.py +0 -55
- package/mcps/davinci-resolve-mcp/tests/test_timeline_brain_db.py +0 -230
- package/mcps/davinci-resolve-mcp/tests/test_timeline_conform_probe.py +0 -229
- package/mcps/davinci-resolve-mcp/tests/test_timeline_editorial_helpers.py +0 -88
- package/mcps/davinci-resolve-mcp/tests/test_timeline_export_enum.py +0 -59
- package/mcps/davinci-resolve-mcp/tests/test_timeline_kernel_probe.py +0 -70
- package/mcps/davinci-resolve-mcp/tests/test_timeline_title_text_utils.py +0 -64
- package/mcps/davinci-resolve-mcp/tests/test_timeline_versioning.py +0 -419
- package/mcps/davinci-resolve-mcp/tests/test_tool_choice_hint.py +0 -42
- package/mcps/davinci-resolve-mcp/tests/test_tool_exposure.py +0 -159
- package/mcps/davinci-resolve-mcp/tests/test_tool_registration.py +0 -91
- package/mcps/davinci-resolve-mcp/tests/test_transcript_read.py +0 -74
- package/mcps/davinci-resolve-mcp/tests/test_update_check.py +0 -171
- package/mcps/davinci-resolve-mcp/tests/test_update_hardening.py +0 -171
- package/mcps/davinci-resolve-mcp/tests/test_update_history.py +0 -116
- package/mcps/davinci-resolve-mcp/tests/test_v232_helpers.py +0 -265
- package/mcps/davinci-resolve-mcp/tests/test_v233_helpers.py +0 -307
- package/mcps/davinci-resolve-mcp/tests/test_validation_guards.py +0 -108
- package/mcps/davinci-resolve-mcp/tests/test_verification_stats.py +0 -32
- package/mcps/davinci-resolve-mcp/tests/test_waveb_p2_p3.py +0 -65
- package/mcps/golem-rhino-mcp/Nexus-AI-Agents.png +0 -0
- package/mcps/golem-rhino-mcp/docs/ARCHITECTURE.md +0 -277
- package/mcps/golem-rhino-mcp/docs/PROTOCOL.md +0 -247
- package/mcps/golem-rhino-mcp/docs/TOOL_REFERENCE.md +0 -1571
- package/mcps/golem-rhino-mcp/docs/TROUBLESHOOTING.md +0 -396
- package/mcps/golem-rhino-mcp/mcp_server/Screenshot 2026-03-20 at 18.33.06.png +0 -0
- package/mcps/golem-rhino-mcp/mcp_server/Screenshot 2026-03-21 at 1.43.01.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CAIO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CEO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CFO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CHRO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CISO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CLO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CMO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/COO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CPO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CRO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/CTO.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/king-hippo.png +0 -0
- package/mcps/golem-rhino-mcp/nexus-pngs/tier-0-csuite.png +0 -0
- package/mcps/golem-rhino-mcp/screenshots/city_monument.png +0 -0
- package/mcps/golem-rhino-mcp/screenshots/city_skyline.png +0 -0
- package/mcps/golem-rhino-mcp/screenshots/city_street.png +0 -0
- package/mcps/golem-rhino-mcp/screenshots/city_wide.png +0 -0
- package/mcps/golem-rhino-mcp/tests/__init__.py +0 -0
- package/mcps/golem-rhino-mcp/tests/conftest.py +0 -150
- package/mcps/golem-rhino-mcp/tests/test_connection.py +0 -543
- package/mcps/golem-rhino-mcp/tests/test_integration.py +0 -344
- package/mcps/golem-rhino-mcp/tests/test_models.py +0 -749
- package/mcps/golem-rhino-mcp/tests/test_protocol.py +0 -334
- package/mcps/golem-rhino-mcp/tests/test_tools_mock.py +0 -689
- package/mcps/tdmcp/.github/social-preview.png +0 -0
- package/mcps/tdmcp/docs/.vitepress/config.ts +0 -397
- package/mcps/tdmcp/docs/AI_PARTY_LLM_TRAINING_PLAN.md +0 -118
- package/mcps/tdmcp/docs/AI_PARTY_POC.md +0 -142
- package/mcps/tdmcp/docs/AI_PARTY_POC_PLAN.md +0 -112
- package/mcps/tdmcp/docs/CREATIVE_RAG.md +0 -346
- package/mcps/tdmcp/docs/DEPLOYMENT.md +0 -113
- package/mcps/tdmcp/docs/PROJECT_RAG.md +0 -477
- package/mcps/tdmcp/docs/ROADMAP.md +0 -1346
- package/mcps/tdmcp/docs/guide/ai-controlled-party.md +0 -215
- package/mcps/tdmcp/docs/guide/body-tracking.md +0 -169
- package/mcps/tdmcp/docs/guide/codex.md +0 -107
- package/mcps/tdmcp/docs/guide/components.md +0 -126
- package/mcps/tdmcp/docs/guide/dashboard-foh.md +0 -93
- package/mcps/tdmcp/docs/guide/faq.md +0 -62
- package/mcps/tdmcp/docs/guide/first-visual.md +0 -76
- package/mcps/tdmcp/docs/guide/generators.md +0 -230
- package/mcps/tdmcp/docs/guide/glossary.md +0 -123
- package/mcps/tdmcp/docs/guide/install.md +0 -200
- package/mcps/tdmcp/docs/guide/local-copilot.md +0 -154
- package/mcps/tdmcp/docs/guide/lops-integration.md +0 -133
- package/mcps/tdmcp/docs/guide/mcp-resources.md +0 -96
- package/mcps/tdmcp/docs/guide/mediapipe-adapters.md +0 -90
- package/mcps/tdmcp/docs/guide/physical-installations.md +0 -129
- package/mcps/tdmcp/docs/guide/prompt-cookbook.md +0 -2285
- package/mcps/tdmcp/docs/guide/recipes.md +0 -72
- package/mcps/tdmcp/docs/guide/session-profile.md +0 -90
- package/mcps/tdmcp/docs/guide/shader-park.md +0 -94
- package/mcps/tdmcp/docs/guide/show-timelines.md +0 -125
- package/mcps/tdmcp/docs/guide/troubleshooting.md +0 -121
- package/mcps/tdmcp/docs/guide/what-is-tdmcp.md +0 -62
- package/mcps/tdmcp/docs/index.md +0 -49
- package/mcps/tdmcp/docs/privacy.md +0 -85
- package/mcps/tdmcp/docs/pt/CREATIVE_RAG.md +0 -370
- package/mcps/tdmcp/docs/pt/PROJECT_RAG.md +0 -420
- package/mcps/tdmcp/docs/pt/guide/ai-controlled-party.md +0 -218
- package/mcps/tdmcp/docs/pt/guide/body-tracking.md +0 -175
- package/mcps/tdmcp/docs/pt/guide/codex.md +0 -113
- package/mcps/tdmcp/docs/pt/guide/components.md +0 -129
- package/mcps/tdmcp/docs/pt/guide/dashboard-foh.md +0 -95
- package/mcps/tdmcp/docs/pt/guide/faq.md +0 -62
- package/mcps/tdmcp/docs/pt/guide/first-visual.md +0 -81
- package/mcps/tdmcp/docs/pt/guide/generators.md +0 -243
- package/mcps/tdmcp/docs/pt/guide/glossary.md +0 -127
- package/mcps/tdmcp/docs/pt/guide/install.md +0 -196
- package/mcps/tdmcp/docs/pt/guide/local-copilot.md +0 -164
- package/mcps/tdmcp/docs/pt/guide/lops-integration.md +0 -143
- package/mcps/tdmcp/docs/pt/guide/mcp-resources.md +0 -96
- package/mcps/tdmcp/docs/pt/guide/mediapipe-adapters.md +0 -93
- package/mcps/tdmcp/docs/pt/guide/physical-installations.md +0 -135
- package/mcps/tdmcp/docs/pt/guide/prompt-cookbook.md +0 -2342
- package/mcps/tdmcp/docs/pt/guide/recipes.md +0 -59
- package/mcps/tdmcp/docs/pt/guide/session-profile.md +0 -92
- package/mcps/tdmcp/docs/pt/guide/shader-park.md +0 -95
- package/mcps/tdmcp/docs/pt/guide/show-timelines.md +0 -128
- package/mcps/tdmcp/docs/pt/guide/troubleshooting.md +0 -109
- package/mcps/tdmcp/docs/pt/guide/what-is-tdmcp.md +0 -61
- package/mcps/tdmcp/docs/pt/index.md +0 -49
- package/mcps/tdmcp/docs/pt/privacy.md +0 -91
- package/mcps/tdmcp/docs/pt/reference/architecture.md +0 -178
- package/mcps/tdmcp/docs/pt/reference/environment.md +0 -70
- package/mcps/tdmcp/docs/public/favicon.svg +0 -12
- package/mcps/tdmcp/docs/public/logo-400.png +0 -0
- package/mcps/tdmcp/docs/public/og-image.jpg +0 -0
- package/mcps/tdmcp/docs/public/robots.txt +0 -4
- package/mcps/tdmcp/docs/reference/API_STABILITY.md +0 -116
- package/mcps/tdmcp/docs/reference/architecture.md +0 -191
- package/mcps/tdmcp/docs/reference/bridge-api.md +0 -155
- package/mcps/tdmcp/docs/reference/cli.md +0 -288
- package/mcps/tdmcp/docs/reference/coverage-harness.md +0 -61
- package/mcps/tdmcp/docs/reference/environment.md +0 -116
- package/mcps/tdmcp/docs/reference/packages.md +0 -98
- package/mcps/tdmcp/docs/reference/tool-contract.md +0 -74
- package/mcps/tdmcp/docs/superpowers/plans/2026-05-29-shader-park-animus-integrations.md +0 -76
- package/mcps/tdmcp/docs/superpowers/plans/2026-06-02-doctor-fix-textport-auto-install.md +0 -131
- package/mcps/tdmcp/docs/superpowers/plans/2026-06-06-body-bubbles.md +0 -138
- package/mcps/tdmcp/docs/superpowers/plans/2026-06-08-deep-doppelganger-implementation.md +0 -201
- package/mcps/tdmcp/docs/superpowers/plans/2026-06-10-ai-party-ollama-integration.md +0 -55
- package/mcps/tdmcp/docs/superpowers/plans/2026-06-24-kinect-wall-harp-calibration-wizard.md +0 -53
- package/mcps/tdmcp/docs/superpowers/plans/2026-06-24-kinect-wall-harp-external-kinect.md +0 -286
- package/mcps/tdmcp/docs/superpowers/specs/2026-05-31-create-vector-lines-design.md +0 -308
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-01-ai-controlled-party-plan.md +0 -461
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-04-ai-party-ui24r-scene-arming-design.md +0 -296
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-08-ai-controlled-party-producer-poc.md +0 -232
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-08-deep-doppelganger-design.md +0 -136
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-10-hermes-ai-party-poc.md +0 -383
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-23-kinect-wall-harp-design.md +0 -340
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-24-kinect-environment-diagnostic-design.md +0 -151
- package/mcps/tdmcp/docs/superpowers/specs/2026-06-24-kinect-wall-harp-external-kinect-design.md +0 -104
- package/mcps/tdmcp/training/showintent/data/curated/.gitkeep +0 -1
- package/mcps/tdmcp/training/showintent/data/curated/curated-approved.jsonl +0 -1
- package/mcps/tdmcp/training/showintent/data/curation_template.csv +0 -1
- package/mcps/tdmcp/training/showintent/data/generated/.gitkeep +0 -1
- package/mcps/tdmcp/training/showintent/data/generated/showintent-synthetic.jsonl +0 -2000
- package/mcps/tdmcp/training/showintent/data/raw/.gitkeep +0 -1
- package/mcps/tdmcp/training/showintent/data/splits/.gitkeep +0 -1
- package/mcps/tdmcp/training/showintent/data/splits/train-compact.jsonl +0 -1800
- package/mcps/tdmcp/training/showintent/data/splits/train.jsonl +0 -1800
- package/mcps/tdmcp/training/showintent/data/splits/validation-compact.jsonl +0 -200
- package/mcps/tdmcp/training/showintent/data/splits/validation.jsonl +0 -200
- package/mcps/touchdesigner-mcp/assets/import.png +0 -0
- package/mcps/touchdesigner-mcp/assets/nodes_list.png +0 -0
- package/mcps/touchdesigner-mcp/assets/particle_on_youtube.png +0 -0
- package/mcps/touchdesigner-mcp/assets/textport.png +0 -0
- package/mcps/touchdesigner-mcp/assets/tutorial.png +0 -0
- package/mcps/touchdesigner-mcp/assets/tutorial_docker.png +0 -0
- package/mcps/touchdesigner-mcp/docs/architecture.md +0 -1245
- package/mcps/touchdesigner-mcp/docs/development.ja.md +0 -197
- package/mcps/touchdesigner-mcp/docs/development.md +0 -212
- package/mcps/touchdesigner-mcp/docs/installation.ja.md +0 -370
- package/mcps/touchdesigner-mcp/docs/installation.md +0 -406
- package/mcps/unreal_mcp/Public/icon.png +0 -0
- package/mcps/unreal_mcp/docs/Engine-API-Reference.md +0 -2251
- package/mcps/unreal_mcp/docs/Roadmap.md +0 -2269
- package/mcps/unreal_mcp/docs/editor-plugin-extension.md +0 -373
- package/mcps/unreal_mcp/docs/handler-mapping.md +0 -1170
- package/mcps/unreal_mcp/docs/native-automation-progress.md +0 -431
- package/mcps/unreal_mcp/docs/testing-guide.md +0 -149
- package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Domains/Test/McpAutomationBridge_TestHandlers.cpp +0 -74
- package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Tests/McpCustomHandlerAliasTests.cpp +0 -191
- package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Tests/McpEnvironmentSnapshotSchemaTests.cpp +0 -192
- package/mcps/unreal_mcp/plugins/McpAutomationBridge/Source/McpAutomationBridge/Private/Tests/McpPropertyReflectionImportTests.cpp +0 -269
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAcpClientProtocolAutomation.cpp +0 -152
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAcpProtocolTestHelpers.cpp +0 -136
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAcpProtocolTestHelpers.h +0 -49
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationTestDelegates.h +0 -12
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationTests.cpp +0 -34
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationWidgetHelpers.cpp +0 -116
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentAutomationWidgetHelpers.h +0 -15
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentFakeAcpScript.cpp +0 -76
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelAutomation.h +0 -35
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelAutomationFixture.cpp +0 -118
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelHistoryChecks.cpp +0 -162
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelLayoutChecks.cpp +0 -158
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentPanelTranscriptChecks.cpp +0 -117
- package/mcps/unreal_mcp/plugins/UnrealAgent/Source/UnrealAgent/Private/Tests/UnrealAgentStudioKitAutomationChecks.cpp +0 -155
- package/mcps/unreal_mcp/tests/AGENTS.md +0 -73
- package/mcps/unreal_mcp/tests/expectation-utils.mjs +0 -29
- package/mcps/unreal_mcp/tests/heartbeat-progress.test.mjs +0 -143
- package/mcps/unreal_mcp/tests/integration/get_ai_info_characterization.mjs +0 -216
- package/mcps/unreal_mcp/tests/integration.mjs +0 -94
- package/mcps/unreal_mcp/tests/mcp-tools/core/control-actor.test.mjs +0 -114
- package/mcps/unreal_mcp/tests/mcp-tools/core/control-editor.test.mjs +0 -86
- package/mcps/unreal_mcp/tests/mcp-tools/core/inspect.test.mjs +0 -85
- package/mcps/unreal_mcp/tests/mcp-tools/core/manage-asset.test.mjs +0 -302
- package/mcps/unreal_mcp/tests/mcp-tools/core/manage-blueprint.test.mjs +0 -331
- package/mcps/unreal_mcp/tests/mcp-tools/core/manage-level.test.mjs +0 -73
- package/mcps/unreal_mcp/tests/mcp-tools/core/manage-tools.test.mjs +0 -30
- package/mcps/unreal_mcp/tests/mcp-tools/core/system-control.test.mjs +0 -205
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/animation-physics.test.mjs +0 -277
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-ai.test.mjs +0 -299
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-character.test.mjs +0 -85
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-combat.test.mjs +0 -106
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-effect.test.mjs +0 -108
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-gas.test.mjs +0 -96
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-interaction.test.mjs +0 -122
- package/mcps/unreal_mcp/tests/mcp-tools/gameplay/manage-inventory.test.mjs +0 -146
- package/mcps/unreal_mcp/tests/mcp-tools/utility/behavior-tree-get-tree.test.mjs +0 -233
- package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-audio.test.mjs +0 -160
- package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-behavior-tree.test.mjs +0 -223
- package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-networking.test.mjs +0 -635
- package/mcps/unreal_mcp/tests/mcp-tools/utility/manage-sequence.test.mjs +0 -95
- package/mcps/unreal_mcp/tests/mcp-tools/world/build-environment.test.mjs +0 -282
- package/mcps/unreal_mcp/tests/mcp-tools/world/manage-geometry.test.mjs +0 -130
- package/mcps/unreal_mcp/tests/mcp-tools/world/manage-level-structure.test.mjs +0 -149
- package/mcps/unreal_mcp/tests/mcp-tools/world/manage-pcg.test.mjs +0 -471
- package/mcps/unreal_mcp/tests/mcp-tools/world/rendering-cases.cjs +0 -775
- package/mcps/unreal_mcp/tests/mcp-tools/world/rendering.test.mjs +0 -15
- package/mcps/unreal_mcp/tests/native-mcp-parity-audit.mjs +0 -260
- package/mcps/unreal_mcp/tests/native-mcp-source-parser.mjs +0 -229
- package/mcps/unreal_mcp/tests/native-mcp-typescript-parity-parser.mjs +0 -121
- package/mcps/unreal_mcp/tests/parameter-audit-cli.mjs +0 -23
- package/mcps/unreal_mcp/tests/parameter-audit-context.mjs +0 -14
- package/mcps/unreal_mcp/tests/parameter-audit-coverage.mjs +0 -164
- package/mcps/unreal_mcp/tests/parameter-audit-schema.mjs +0 -190
- package/mcps/unreal_mcp/tests/parameter-audit-suites.mjs +0 -218
- package/mcps/unreal_mcp/tests/parameter-combination-audit.mjs +0 -37
- package/mcps/unreal_mcp/tests/test-runner-response-utils.mjs +0 -132
- package/mcps/unreal_mcp/tests/test-runner.mjs +0 -1798
- package/mcps/unreal_mcp/tests/unit/automation/bridge_host_validation.test.ts +0 -165
- package/mcps/unreal_mcp/tests/unit/config.test.ts +0 -205
- package/mcps/unreal_mcp/tests/unit/native_mcp_parity_audit.test.ts +0 -281
- package/mcps/unreal_mcp/tests/unit/native_mcp_parity_comment_filtering.test.ts +0 -175
- package/mcps/unreal_mcp/tests/unit/parameter_audit_schema.test.ts +0 -273
- package/mcps/unreal_mcp/tests/unit/plugin/automation_event_stream_contracts.test.ts +0 -195
- package/mcps/unreal_mcp/tests/unit/plugin/environment_asset_name_contracts.test.ts +0 -115
- package/mcps/unreal_mcp/tests/unit/plugin/environment_build_adapter_contracts.test.ts +0 -377
- package/mcps/unreal_mcp/tests/unit/plugin/environment_snapshot_path_contracts.test.ts +0 -122
- package/mcps/unreal_mcp/tests/unit/plugin/handler_routing_contracts.test.ts +0 -120
- package/mcps/unreal_mcp/tests/unit/plugin/level_lighting_contracts.test.ts +0 -125
- package/mcps/unreal_mcp/tests/unit/plugin/plugin_manifest_contracts.test.ts +0 -154
- package/mcps/unreal_mcp/tests/unit/plugin/plugin_packaging_contracts.test.ts +0 -124
- package/mcps/unreal_mcp/tests/unit/plugin/runtime_behavior_contracts.test.ts +0 -372
- package/mcps/unreal_mcp/tests/unit/plugin/security_contracts.test.ts +0 -81
- package/mcps/unreal_mcp/tests/unit/plugin/source_structure.test.ts +0 -101
- package/mcps/unreal_mcp/tests/unit/plugin/source_structure_contracts.test.ts +0 -103
- package/mcps/unreal_mcp/tests/unit/plugin/websocket_origin_contracts.test.ts +0 -25
- package/mcps/unreal_mcp/tests/unit/server_shutdown_contracts.test.ts +0 -33
- package/mcps/unreal_mcp/tests/unit/source_structure.test.ts +0 -79
- package/mcps/unreal_mcp/tests/unit/test_runner.test.ts +0 -342
- package/mcps/unreal_mcp/tests/unit/test_runner_response_utils.test.ts +0 -105
- package/mcps/unreal_mcp/tests/unit/tools/asset_handlers_security.test.ts +0 -246
- package/mcps/unreal_mcp/tests/unit/tools/behavior_tree_get_tree.test.ts +0 -20
- package/mcps/unreal_mcp/tests/unit/tools/blueprint_handlers.test.ts +0 -122
- package/mcps/unreal_mcp/tests/unit/tools/editor.test.ts +0 -56
- package/mcps/unreal_mcp/tests/unit/tools/handler_structure.test.ts +0 -59
- package/mcps/unreal_mcp/tests/unit/tools/inspect_handlers.test.ts +0 -231
- package/mcps/unreal_mcp/tests/unit/tools/level.test.ts +0 -56
- package/mcps/unreal_mcp/tests/unit/tools/level_security.test.ts +0 -45
- package/mcps/unreal_mcp/tests/unit/tools/lighting_timeout_propagation.test.ts +0 -123
- package/mcps/windows-computer-use-mcp/cua-reports/app-1781542686.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/bridge-1781542694.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/bridge-ok-1781442393.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/bridge-ok-1781442915.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/bridge-snap-1781444105.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/bridge-snap-1781444214.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/bridge-snap-1781457035.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781440024.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781440234.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781442383.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781442906.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781444096.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781444209.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/cua-smoke-1781457029.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/dashboard-1781542713.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/help-1781542738.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/logging-1781542722.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-dashboard-1781444225.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-dashboard-1781457051.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-help-1781444245.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-help-1781457075.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-logging-1781444232.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-logging-1781457059.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-settings-1781444239.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/nav-settings-1781457067.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav/settings-1781542730.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav-dashboard-1781442925.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav-help-1781442941.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav-logging-1781442930.png +0 -0
- package/mcps/windows-computer-use-mcp/cua-reports/nav-settings-1781442936.png +0 -0
- package/mcps/windows-computer-use-mcp/docs/ARCHITECTURE.md +0 -46
- package/mcps/windows-computer-use-mcp/docs/ASSESSMENT_BY_CURSOR_2026-06-14_CUA_NSIS.md +0 -383
- package/mcps/windows-computer-use-mcp/docs/AUTOMATION_ASSERT_SPEC.md +0 -202
- package/mcps/windows-computer-use-mcp/docs/CUA_PARITY.md +0 -39
- package/mcps/windows-computer-use-mcp/docs/DEVELOPMENT.md +0 -51
- package/mcps/windows-computer-use-mcp/docs/MEMOPS_CUA.md +0 -147
- package/mcps/windows-computer-use-mcp/docs/PRD.md +0 -93
- package/mcps/windows-computer-use-mcp/docs/README.md +0 -34
- package/mcps/windows-computer-use-mcp/docs/ROADMAP.md +0 -142
- package/mcps/windows-computer-use-mcp/docs/SAFETY.md +0 -138
- package/mcps/windows-computer-use-mcp/docs/TESTING.md +0 -90
- package/mcps/windows-computer-use-mcp/docs/TOOLS.md +0 -80
- package/mcps/windows-computer-use-mcp/docs/TOOL_DOCSTRING_STANDARD.md +0 -538
- package/mcps/windows-computer-use-mcp/docs/_stale/AHK_VS_PYWINAUTO_COMPARISON.md +0 -353
- package/mcps/windows-computer-use-mcp/docs/_stale/ASSESSMENT.md +0 -54
- package/mcps/windows-computer-use-mcp/docs/_stale/ASSESSMENT_2026-06-08.md +0 -309
- package/mcps/windows-computer-use-mcp/docs/_stale/COMPLETE_DOCUMENTATION_STRUCTURE.md +0 -5
- package/mcps/windows-computer-use-mcp/docs/_stale/CUA_ASSISTANT_TODO.md +0 -84
- package/mcps/windows-computer-use-mcp/docs/_stale/CUA_PARITY_ROADMAP.md +0 -81
- package/mcps/windows-computer-use-mcp/docs/_stale/CUA_ROADMAP.md +0 -306
- package/mcps/windows-computer-use-mcp/docs/_stale/DESKTOP_APP.md +0 -125
- package/mcps/windows-computer-use-mcp/docs/_stale/DOCUMENTATION_INDEX.md +0 -59
- package/mcps/windows-computer-use-mcp/docs/_stale/GLAMA_AI_CRITICISM_ANALYSIS.md +0 -259
- package/mcps/windows-computer-use-mcp/docs/_stale/GLAMA_AI_PLATFORM.md +0 -175
- package/mcps/windows-computer-use-mcp/docs/_stale/GLAMA_AI_RESCAN_GUIDE.md +0 -216
- package/mcps/windows-computer-use-mcp/docs/_stale/GOLD_STATUS_ACHIEVEMENT.md +0 -197
- package/mcps/windows-computer-use-mcp/docs/_stale/LLM_REPO_CONTEXT.md +0 -7
- package/mcps/windows-computer-use-mcp/docs/_stale/MCP_PRODUCTION_CHECKLIST.md +0 -105
- package/mcps/windows-computer-use-mcp/docs/_stale/OFFICE_BACKGROUND_MATRIX.md +0 -19
- package/mcps/windows-computer-use-mcp/docs/_stale/OPERATOR_PROTOCOL.md +0 -37
- package/mcps/windows-computer-use-mcp/docs/_stale/ORGANIZATION_SUMMARY.md +0 -305
- package/mcps/windows-computer-use-mcp/docs/_stale/RENAME-TO-AUTOMATION-MCP.md +0 -191
- package/mcps/windows-computer-use-mcp/docs/_stale/STATUS_REPORT.md +0 -288
- package/mcps/windows-computer-use-mcp/docs/_stale/TARGETS_PAGE_SKETCH.md +0 -977
- package/mcps/windows-computer-use-mcp/docs/_stale/TOOL_DOCSTRING_MIGRATION.md +0 -365
- package/mcps/windows-computer-use-mcp/docs/_stale/USAGE_SCENARIOS.md +0 -697
- package/mcps/windows-computer-use-mcp/docs/_stale/desktop-state-tool.md +0 -464
- package/mcps/windows-computer-use-mcp/docs/_stale/development/README.md +0 -18
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/AI_DEVELOPMENT_RULES.md +0 -928
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/AI_DEVELOPMENT_TOOLS_COMPARISON.md +0 -364
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/BULLETPROOF_MCP_GUIDE.md +0 -793
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/DEBUGGING_LESSONS_LEARNED.md +0 -635
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/DEVELOPMENT_PAIN_POINTS.md +0 -699
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/FILE_VALIDATION_COMPLETE.md +0 -410
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/FILE_VALIDATION_GUIDE.md +0 -575
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/LINK_PARSER_FIX.md +0 -769
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/MCP_SYNC_DEBUGGING_GUIDE.md +0 -512
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/PYTHON_DEPENDENCY_HELL_FIX.md +0 -568
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/PYTHON_SNIPPETS_USAGE_GUIDE.md +0 -717
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/README.md +0 -25
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/SYNC_HEALTH_IMPROVEMENTS_SUMMARY.md +0 -496
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/SYNC_HEALTH_INTEGRATION.md +0 -381
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/SYSTEMATIC_PROJECT_UPDATES.md +0 -532
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/mcp-prompt-templates-vs-docstrings.md +0 -657
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/mcp-tool-docstring-best-practices.md +0 -439
- package/mcps/windows-computer-use-mcp/docs/_stale/development/archive/mcp-tool-documentation-standards.md +0 -1153
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/CI_CD_GLAMA_OPTIMIZATION_GUIDE.md +0 -850
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_CRITICISM_ANALYSIS.md +0 -259
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_OPTIMIZATION_SUMMARY.md +0 -204
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_PLATFORM.md +0 -175
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_AI_RESCAN_GUIDE.md +0 -216
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_GITHUB_APP_SETUP.md +0 -199
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_INTEGRATION.md +0 -181
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GLAMA_RESCAN_EMAIL.txt +0 -43
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GOLD_STATUS_ACHIEVEMENT.md +0 -197
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/GOLD_STATUS_UPDATE_2025_10_08.md +0 -378
- package/mcps/windows-computer-use-mcp/docs/_stale/glama-platform/README.md +0 -632
- package/mcps/windows-computer-use-mcp/docs/_stale/legacy/requirements-fastmcp.txt +0 -8
- package/mcps/windows-computer-use-mcp/docs/_stale/legacy/requirements_minimal.txt +0 -4
- package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/CLAUDE_DESKTOP_DEBUGGING.md +0 -561
- package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/CONTAINERIZATION_GUIDELINES.md +0 -707
- package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/MCP_PRODUCTION_CHECKLIST.md +0 -101
- package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/MONITORING_STACK_DEPLOYMENT.md +0 -532
- package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/README.md +0 -266
- package/mcps/windows-computer-use-mcp/docs/_stale/mcp-technical/TROUBLESHOOTING_FASTMCP_2.12.md +0 -670
- package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/MCPB_BUILDING_GUIDE.md +0 -1921
- package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/MCPB_IMPLEMENTATION_SUMMARY.md +0 -387
- package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/PYPI_PUBLISHING_GUIDE.md +0 -789
- package/mcps/windows-computer-use-mcp/docs/_stale/mcpb-packaging/README.md +0 -404
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/COMMUNITY_AND_SUPPORT.md +0 -976
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/LANGUAGE_SERVER_PROTOCOL_EXPLAINED.md +0 -416
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/MCP_TOOL_CORRUPTION_ISSUE.md +0 -279
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_ALTERNATIVES.md +0 -308
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_COLOR_FIX_2025_10_08.md +0 -187
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_COMPLETE_GUIDE.md +0 -1259
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NOTEPADPP_NUCLEAR_REINSTALL_2025_10_08.md +0 -196
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/NPP_WHITE_ON_WHITE_BATTLE_PLAN.md +0 -336
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/PLUGIN_ECOSYSTEM_COMPREHENSIVE.md +0 -887
- package/mcps/windows-computer-use-mcp/docs/_stale/notepadpp/README.md +0 -472
- package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/BACKUP_AND_RECOVERY_GUIDE.md +0 -455
- package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/BRANCH_PROTECTION_SETTINGS.md +0 -236
- package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/BRANCH_STRATEGY_AND_AI_WORKFLOW.md +0 -616
- package/mcps/windows-computer-use-mcp/docs/_stale/repository-protection/README.md +0 -333
- package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_COPY_TO_OTHER_REPOS.md +0 -159
- package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_GUIDE.md +0 -632
- package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_INSTALL_AND_TEST.md +0 -569
- package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_NEXT_STEPS.md +0 -351
- package/mcps/windows-computer-use-mcp/docs/_stale/serena/SERENA_QUICK_INSTALL.md +0 -195
- package/mcps/windows-computer-use-mcp/docs/_stale/state-tool-implementation.md +0 -498
- package/mcps/windows-computer-use-mcp/docs/composing-with-playwright.md +0 -55
- package/mcps/windows-computer-use-mcp/docs/cua-nsis-certification.md +0 -101
- package/mcps/windows-computer-use-mcp/docs/ocr.md +0 -107
- package/mcps/windows-computer-use-mcp/docs/py-stack.md +0 -47
- package/mcps/windows-computer-use-mcp/native/icons/icon.png +0 -0
- package/mcps/windows-computer-use-mcp/screenshot_demo.png +0 -0
- package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/export_complete_toast.png +0 -0
- package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/export_dialog_title.png +0 -0
- package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/file_dialog_path_field.png +0 -0
- package/mcps/windows-computer-use-mcp/src/windows_computer_use_mcp/templates/vroidstudio/default/sample_tile_female.png +0 -0
- package/mcps/windows-computer-use-mcp/tests/README.md +0 -155
- package/mcps/windows-computer-use-mcp/tests/__init__.py +0 -1
- package/mcps/windows-computer-use-mcp/tests/conftest.py +0 -281
- package/mcps/windows-computer-use-mcp/tests/conftest_env.py +0 -116
- package/mcps/windows-computer-use-mcp/tests/e2e/conftest.py +0 -96
- package/mcps/windows-computer-use-mcp/tests/e2e/test_libreoffice_cua_loop.py +0 -72
- package/mcps/windows-computer-use-mcp/tests/test_app_integration.py +0 -83
- package/mcps/windows-computer-use-mcp/tests/test_app_profiles.py +0 -28
- package/mcps/windows-computer-use-mcp/tests/test_automation_assert.py +0 -185
- package/mcps/windows-computer-use-mcp/tests/test_automation_dialog.py +0 -43
- package/mcps/windows-computer-use-mcp/tests/test_automation_elements.py +0 -138
- package/mcps/windows-computer-use-mcp/tests/test_automation_keyboard.py +0 -57
- package/mcps/windows-computer-use-mcp/tests/test_automation_mouse.py +0 -57
- package/mcps/windows-computer-use-mcp/tests/test_automation_shortcut.py +0 -41
- package/mcps/windows-computer-use-mcp/tests/test_automation_task.py +0 -115
- package/mcps/windows-computer-use-mcp/tests/test_automation_windows.py +0 -105
- package/mcps/windows-computer-use-mcp/tests/test_cameras_api.py +0 -43
- package/mcps/windows-computer-use-mcp/tests/test_cua_parity.py +0 -51
- package/mcps/windows-computer-use-mcp/tests/test_dependency_failures.py +0 -39
- package/mcps/windows-computer-use-mcp/tests/test_desktop_state.py +0 -99
- package/mcps/windows-computer-use-mcp/tests/test_face_recognition.py +0 -238
- package/mcps/windows-computer-use-mcp/tests/test_face_recognition_api.py +0 -161
- package/mcps/windows-computer-use-mcp/tests/test_images/README.md +0 -28
- package/mcps/windows-computer-use-mcp/tests/test_mission.py +0 -42
- package/mcps/windows-computer-use-mcp/tests/test_portmanteau_windows_mock.py +0 -173
- package/mcps/windows-computer-use-mcp/tests/test_portmanteau_windows_real.py +0 -139
- package/mcps/windows-computer-use-mcp/tests/test_retry.py +0 -26
- package/mcps/windows-computer-use-mcp/tests/test_safety_api.py +0 -24
- package/mcps/windows-computer-use-mcp/tests/test_template_library.py +0 -53
- package/mcps/windows-computer-use-mcp/tests/test_utils.py +0 -185
- package/mcps/windows-computer-use-mcp/web_sota/src-tauri/icons/icon.png +0 -0
- package/skills/global_config/google-sheets-automation/SKILL.md +0 -150
- package/skills/global_config/senior-fullstack/SKILL.md +0 -221
- package/skills/global_config/senior-fullstack/references/architecture_patterns.md +0 -103
- package/skills/global_config/senior-fullstack/references/development_workflows.md +0 -103
- package/skills/global_config/senior-fullstack/references/tech_stack_guide.md +0 -103
- package/skills/global_config/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
- package/skills/global_config/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
- package/skills/global_config/senior-fullstack/scripts/project_scaffolder.py +0 -114
|
@@ -1,1245 +0,0 @@
|
|
|
1
|
-
# TouchDesigner MCP Server Architecture
|
|
2
|
-
|
|
3
|
-
This document describes the architecture of the TouchDesigner MCP server.
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
1. [Overview](#overview)
|
|
8
|
-
2. [System Architecture](#system-architecture)
|
|
9
|
-
3. [Transport Layer](#transport-layer)
|
|
10
|
-
4. [Core Layer](#core-layer)
|
|
11
|
-
5. [TouchDesigner Integration Layer](#touchdesigner-integration-layer)
|
|
12
|
-
6. [Data Flow](#data-flow)
|
|
13
|
-
7. [Transport Selection Guide](#transport-selection-guide)
|
|
14
|
-
8. [Design Principles](#design-principles)
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Overview
|
|
19
|
-
|
|
20
|
-
The TouchDesigner MCP Server is an MCP (Model Context Protocol) implementation that connects AI agents (Claude, Codex, etc.) with TouchDesigner projects.
|
|
21
|
-
|
|
22
|
-
### Key Features
|
|
23
|
-
|
|
24
|
-
- **Dual-Process Architecture**: Composed of two processes: Node.js MCP server and TouchDesigner Python WebServer
|
|
25
|
-
- **Multiple Transport Support**: Supports Stdio (standard I/O) and Streamable HTTP (HTTP + SSE)
|
|
26
|
-
- **SDK-First Approach**: Maximizes use of MCP SDK built-in features while minimizing custom code
|
|
27
|
-
- **Type Safety**: Strict type checking and runtime validation using TypeScript and Zod
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## System Architecture
|
|
32
|
-
|
|
33
|
-
### High-Level Architecture
|
|
34
|
-
|
|
35
|
-
```mermaid
|
|
36
|
-
flowchart TB
|
|
37
|
-
subgraph Client ["AI Agent Layer"]
|
|
38
|
-
A1["🤖 Claude"]
|
|
39
|
-
A2["🤖 Codex"]
|
|
40
|
-
A3["🤖 Other MCP Clients"]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
subgraph Transport ["Transport Layer<br/>(Node.js)"]
|
|
44
|
-
B1["📡 TransportFactory<br/>(src/transport/factory.ts)"]
|
|
45
|
-
B2["📞 StdioServerTransport<br/>(MCP SDK)"]
|
|
46
|
-
B3["🌐 StreamableHTTPServerTransport<br/>(MCP SDK)"]
|
|
47
|
-
B4["🖥️ ExpressHttpManager<br/>(src/transport/expressHttpManager.ts)"]
|
|
48
|
-
B5["🔐 SessionManager<br/>(src/transport/sessionManager.ts)"]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
subgraph Core ["Core Layer<br/>(Node.js)"]
|
|
52
|
-
C1["🎯 TouchDesignerServer<br/>(src/server/touchDesignerServer.ts)"]
|
|
53
|
-
C2["🔌 ConnectionManager<br/>(src/server/connectionManager.ts)"]
|
|
54
|
-
C3["🧰 Tool Handlers<br/>(src/features/tools/handlers)"]
|
|
55
|
-
C4["🌐 TouchDesignerClient<br/>(src/tdClient)"]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
subgraph TD ["TouchDesigner Integration Layer<br/>(Python)"]
|
|
59
|
-
D1["🧩 WebServer DAT<br/>(mcp_webserver_base.tox)"]
|
|
60
|
-
D2["🎛️ API Controller<br/>(api_controller.py)"]
|
|
61
|
-
D3["⚙️ API Service<br/>(api_service.py)"]
|
|
62
|
-
D4["🎨 TouchDesigner Nodes<br/>(/project1/...)"]
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
A1 & A2 & A3 --> B1
|
|
66
|
-
B1 --> B2 & B3
|
|
67
|
-
B3 --> B4
|
|
68
|
-
B4 --> B5
|
|
69
|
-
B2 & B3 --> C1
|
|
70
|
-
C1 --> C2
|
|
71
|
-
C2 --> C3
|
|
72
|
-
C3 --> C4
|
|
73
|
-
C4 <--> D1
|
|
74
|
-
D1 <--> D2
|
|
75
|
-
D2 <--> D3
|
|
76
|
-
D3 <--> D4
|
|
77
|
-
|
|
78
|
-
classDef client fill:#d8e8ff,stroke:#1f6feb,stroke-width:2px
|
|
79
|
-
classDef transport fill:#fff3cd,stroke:#ffc107,stroke-width:2px
|
|
80
|
-
classDef core fill:#efe1ff,stroke:#8250df,stroke-width:2px
|
|
81
|
-
classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px
|
|
82
|
-
|
|
83
|
-
class A1,A2,A3 client
|
|
84
|
-
class B1,B2,B3,B4,B5 transport
|
|
85
|
-
class C1,C2,C3,C4 core
|
|
86
|
-
class D1,D2,D3,D4 td
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### Connection Modes Comparison
|
|
90
|
-
|
|
91
|
-
#### Stdio Mode Architecture
|
|
92
|
-
|
|
93
|
-
```mermaid
|
|
94
|
-
flowchart LR
|
|
95
|
-
subgraph Client ["Claude Desktop"]
|
|
96
|
-
C1["MCP Client"]
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
subgraph Server ["MCP Server Process"]
|
|
100
|
-
S1["StdioServerTransport<br/>(stdin/stdout)"]
|
|
101
|
-
S2["TouchDesignerServer"]
|
|
102
|
-
S3["TouchDesignerClient<br/>(HTTP)"]
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
subgraph TD ["TouchDesigner"]
|
|
106
|
-
T1["WebServer DAT<br/>:9981"]
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
C1 <-->|"stdio<br/>(single connection)"| S1
|
|
110
|
-
S1 --> S2
|
|
111
|
-
S2 --> S3
|
|
112
|
-
S3 <-->|"HTTP API"| T1
|
|
113
|
-
|
|
114
|
-
classDef client fill:#d8e8ff,stroke:#1f6feb,stroke-width:2px
|
|
115
|
-
classDef server fill:#fff3cd,stroke:#ffc107,stroke-width:2px
|
|
116
|
-
classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px
|
|
117
|
-
|
|
118
|
-
class C1 client
|
|
119
|
-
class S1,S2,S3 server
|
|
120
|
-
class T1 td
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Key Characteristics**:
|
|
124
|
-
|
|
125
|
-
- **Single Process**: 1 MCP server process = 1 client connection
|
|
126
|
-
- **Standard I/O**: Communication via stdin/stdout pipes
|
|
127
|
-
- **No Session Management**: Direct 1:1 connection
|
|
128
|
-
- **Local Only**: Cannot accept remote connections
|
|
129
|
-
|
|
130
|
-
#### Streamable HTTP Mode Architecture
|
|
131
|
-
|
|
132
|
-
```mermaid
|
|
133
|
-
flowchart TB
|
|
134
|
-
subgraph Clients ["Multiple AI Agents"]
|
|
135
|
-
C1["Claude Code"]
|
|
136
|
-
C2["MCP Inspector"]
|
|
137
|
-
C3["Web Browser"]
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
subgraph Server ["MCP Server Process"]
|
|
141
|
-
direction TB
|
|
142
|
-
S1["ExpressHttpManager<br/>:6280"]
|
|
143
|
-
S2["SessionManager<br/>(TTL cleanup)"]
|
|
144
|
-
S3["StreamableHTTPServerTransport<br/>(MCP SDK)"]
|
|
145
|
-
S4["TouchDesignerServer"]
|
|
146
|
-
S5["TouchDesignerClient<br/>(HTTP)"]
|
|
147
|
-
|
|
148
|
-
S1 --> S2
|
|
149
|
-
S1 --> S3
|
|
150
|
-
S3 --> S4
|
|
151
|
-
S4 --> S5
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
subgraph TD ["TouchDesigner"]
|
|
155
|
-
T1["WebServer DAT<br/>:9981"]
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
C1 -->|"HTTP/SSE<br/>Session 1"| S1
|
|
159
|
-
C2 -->|"HTTP/SSE<br/>Session 2"| S1
|
|
160
|
-
C3 -->|"HTTP/SSE<br/>Session 3"| S1
|
|
161
|
-
|
|
162
|
-
S5 <-->|"HTTP API"| T1
|
|
163
|
-
|
|
164
|
-
classDef client fill:#d8e8ff,stroke:#1f6feb,stroke-width:2px
|
|
165
|
-
classDef server fill:#fff3cd,stroke:#ffc107,stroke-width:2px
|
|
166
|
-
classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px
|
|
167
|
-
|
|
168
|
-
class C1,C2,C3 client
|
|
169
|
-
class S1,S2,S3,S4,S5 server
|
|
170
|
-
class T1 td
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Key Characteristics**:
|
|
174
|
-
|
|
175
|
-
- **Multi-Session**: Single MCP server process handles multiple concurrent clients via TransportRegistry
|
|
176
|
-
- **HTTP/SSE**: RESTful API + Server-Sent Events for streaming
|
|
177
|
-
- **Session Management**: TTL-based automatic cleanup with per-session isolation
|
|
178
|
-
- **Network Accessible**: Can accept remote connections
|
|
179
|
-
- **Per-Session State**: Each client gets independent MCP protocol state (transport + server instances)
|
|
180
|
-
|
|
181
|
-
#### Architecture Layers
|
|
182
|
-
|
|
183
|
-
**Stdio Mode**
|
|
184
|
-
|
|
185
|
-
```mermaid
|
|
186
|
-
flowchart LR
|
|
187
|
-
A["🤖 AI Agent CLI"]
|
|
188
|
-
|
|
189
|
-
subgraph Node ["Node.js MCP Server"]
|
|
190
|
-
T1["📞 StdioServerTransport"]
|
|
191
|
-
S1["🎯 TouchDesignerServer"]
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
subgraph TD ["TouchDesigner"]
|
|
195
|
-
W1["🧩 WebServer DAT"]
|
|
196
|
-
P1["🎨 TouchDesigner Nodes"]
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
A -->|"stdin/stdout"| T1 --> S1 --> W1 --> P1
|
|
200
|
-
|
|
201
|
-
classDef node fill:#fff3cd,stroke:#ffc107,stroke-width:2px
|
|
202
|
-
classDef core fill:#efe1ff,stroke:#8250df,stroke-width:2px
|
|
203
|
-
classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px
|
|
204
|
-
|
|
205
|
-
class T1 node
|
|
206
|
-
class S1 core
|
|
207
|
-
class W1,P1 td
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Streamable HTTP Mode**
|
|
211
|
-
|
|
212
|
-
```mermaid
|
|
213
|
-
flowchart LR
|
|
214
|
-
C["🤖 AI Agent / Browser"]
|
|
215
|
-
subgraph HTTP ["HTTP Edge"]
|
|
216
|
-
H1["🌐 Streamable HTTP<br/>Server Transport"]
|
|
217
|
-
H2["🖥️ ExpressHttpManager"]
|
|
218
|
-
H3["🔐 SessionManager"]
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
subgraph NodeCore ["Node.js Core"]
|
|
222
|
-
S2["🎯 TouchDesignerServer"]
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
subgraph TouchDesigner ["TouchDesigner"]
|
|
226
|
-
W2["🧩 WebServer DAT"]
|
|
227
|
-
P2["🎨 TouchDesigner Nodes"]
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
C -->|"HTTPS + SSE"| H1 --> H2 --> H3 --> S2 --> W2 --> P2
|
|
231
|
-
|
|
232
|
-
classDef transport fill:#fff3cd,stroke:#ffc107,stroke-width:2px
|
|
233
|
-
classDef core fill:#efe1ff,stroke:#8250df,stroke-width:2px
|
|
234
|
-
classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px
|
|
235
|
-
|
|
236
|
-
class H1,H2,H3 transport
|
|
237
|
-
class S2 core
|
|
238
|
-
class W2,P2 td
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## Transport Layer
|
|
244
|
-
|
|
245
|
-
The transport layer provides a pluggable architecture that supports multiple MCP transport protocols.
|
|
246
|
-
|
|
247
|
-
### Component Structure
|
|
248
|
-
|
|
249
|
-
```mermaid
|
|
250
|
-
graph TB
|
|
251
|
-
subgraph Factory ["TransportFactory"]
|
|
252
|
-
F1["create(config)"]
|
|
253
|
-
F2["validate(config)"]
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
subgraph Config ["TransportConfig"]
|
|
257
|
-
C1["StdioTransportConfig"]
|
|
258
|
-
C2["StreamableHttpTransportConfig<br/>- port: number<br/>- host: string<br/>- endpoint: string<br/>- sessionConfig: SessionConfig"]
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
subgraph HTTP ["HTTP Management"]
|
|
262
|
-
H1["ExpressHttpManager<br/>- start/stop lifecycle<br/>- /mcp endpoint<br/>- /health endpoint<br/>- Graceful shutdown"]
|
|
263
|
-
H2["TransportRegistry<br/>- getOrCreate(sessionId, request)<br/>- Per-session transport isolation<br/>- Session lifecycle management"]
|
|
264
|
-
H3["SessionManager<br/>- create(metadata)<br/>- cleanup(sessionId)<br/>- TTL-based expiration<br/>- Active session tracking"]
|
|
265
|
-
end
|
|
266
|
-
|
|
267
|
-
F1 --> C1 & C2
|
|
268
|
-
C2 --> H1
|
|
269
|
-
H1 --> H2
|
|
270
|
-
H2 --> H3
|
|
271
|
-
|
|
272
|
-
classDef factory fill:#fff3cd,stroke:#ffc107,stroke-width:2px
|
|
273
|
-
classDef config fill:#d8e8ff,stroke:#1f6feb,stroke-width:2px
|
|
274
|
-
classDef http fill:#efe1ff,stroke:#8250df,stroke-width:2px
|
|
275
|
-
|
|
276
|
-
class F1,F2 factory
|
|
277
|
-
class C1,C2 config
|
|
278
|
-
class H1,H2,H3 http
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
### TransportFactory
|
|
282
|
-
|
|
283
|
-
**Responsibility**: Generate transport instances based on configuration
|
|
284
|
-
|
|
285
|
-
**Implementation**: [src/transport/factory.ts](../src/transport/factory.ts)
|
|
286
|
-
|
|
287
|
-
```typescript
|
|
288
|
-
class TransportFactory {
|
|
289
|
-
static create(
|
|
290
|
-
config: TransportConfig,
|
|
291
|
-
logger?: ILogger,
|
|
292
|
-
sessionManager?: ISessionManager | null
|
|
293
|
-
): Result<Transport, Error>
|
|
294
|
-
}
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
**Key Features**:
|
|
298
|
-
|
|
299
|
-
- **Logger Integration**: Session lifecycle events logged via ILogger
|
|
300
|
-
- **SessionManager Integration**: SDK callbacks wired to SessionManager methods
|
|
301
|
-
- `onsessioninitialized` → `sessionManager.register(sessionId)`
|
|
302
|
-
- `onsessionclosed` → `sessionManager.cleanup(sessionId)`
|
|
303
|
-
|
|
304
|
-
**Supported Transports**:
|
|
305
|
-
|
|
306
|
-
1. **Stdio**: Standard I/O based transport (default)
|
|
307
|
-
- For local CLI usage
|
|
308
|
-
- No session management required
|
|
309
|
-
- Single connection
|
|
310
|
-
- Logger and SessionManager parameters ignored
|
|
311
|
-
|
|
312
|
-
2. **Streamable HTTP**: HTTP + SSE based transport
|
|
313
|
-
- For remote clients/web applications
|
|
314
|
-
- Full session management support via SDK callbacks
|
|
315
|
-
- Multiple concurrent sessions support
|
|
316
|
-
- Logger and SessionManager parameters utilized
|
|
317
|
-
|
|
318
|
-
### TransportRegistry
|
|
319
|
-
|
|
320
|
-
**Responsibility**: Per-session transport and server instance management
|
|
321
|
-
|
|
322
|
-
**Implementation**: [src/transport/transportRegistry.ts](../src/transport/transportRegistry.ts)
|
|
323
|
-
|
|
324
|
-
**Key Features**:
|
|
325
|
-
|
|
326
|
-
- **Per-Session Isolation**: Each client gets independent transport + server instances
|
|
327
|
-
- **Session Lifecycle**: Manages creation, reuse, and cleanup of session resources
|
|
328
|
-
- **Request Routing**: Routes HTTP requests to appropriate transport based on session ID
|
|
329
|
-
- **Graceful Cleanup**: Closes all active sessions during shutdown
|
|
330
|
-
|
|
331
|
-
**Architecture**:
|
|
332
|
-
|
|
333
|
-
```typescript
|
|
334
|
-
interface SessionEntry {
|
|
335
|
-
transport: StreamableHTTPServerTransport;
|
|
336
|
-
server: McpServer;
|
|
337
|
-
createdAt: number;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
class TransportRegistry {
|
|
341
|
-
private readonly sessions: Map<string, SessionEntry>;
|
|
342
|
-
|
|
343
|
-
async getOrCreate(
|
|
344
|
-
sessionId: string | undefined,
|
|
345
|
-
requestBody: JSONRPCMessage,
|
|
346
|
-
serverFactory: () => McpServer,
|
|
347
|
-
): Promise<StreamableHTTPServerTransport | null>
|
|
348
|
-
}
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
**Request Handling Logic**:
|
|
352
|
-
|
|
353
|
-
1. **Existing Session** (`sessionId` exists in registry) → Return cached transport
|
|
354
|
-
2. **New Session** (no `sessionId` + `initialize` request) → Create new transport + server
|
|
355
|
-
3. **Invalid Session** (all other cases) → Return `null` (triggers 400 error)
|
|
356
|
-
|
|
357
|
-
**Session Creation Flow**:
|
|
358
|
-
|
|
359
|
-
```typescript
|
|
360
|
-
// 1. Create transport with lifecycle callbacks
|
|
361
|
-
const transport = new StreamableHTTPServerTransport({
|
|
362
|
-
sessionIdGenerator: () => randomUUID(),
|
|
363
|
-
onsessioninitialized: (sessionId) => {
|
|
364
|
-
// Store in registry
|
|
365
|
-
this.sessions.set(sessionId, { transport, server, createdAt });
|
|
366
|
-
// Register with SessionManager for TTL tracking
|
|
367
|
-
sessionManager?.register(sessionId);
|
|
368
|
-
},
|
|
369
|
-
onsessionclosed: (sessionId) => {
|
|
370
|
-
// Remove from registry
|
|
371
|
-
this.remove(sessionId);
|
|
372
|
-
// Cleanup from SessionManager
|
|
373
|
-
sessionManager?.cleanup(sessionId);
|
|
374
|
-
},
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
// 2. Create server instance via factory
|
|
378
|
-
const server = serverFactory();
|
|
379
|
-
|
|
380
|
-
// 3. Connect server to transport
|
|
381
|
-
await server.connect(transport);
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
**Multi-Session Support**:
|
|
385
|
-
|
|
386
|
-
The registry enables multiple concurrent clients by maintaining independent MCP protocol state per session:
|
|
387
|
-
|
|
388
|
-
```text
|
|
389
|
-
Client 1 → POST /mcp (no session) → TransportRegistry.getOrCreate()
|
|
390
|
-
→ New transport + server (Session A)
|
|
391
|
-
→ Response includes mcp-session-id: A
|
|
392
|
-
|
|
393
|
-
Client 1 → POST /mcp (session: A) → TransportRegistry.getOrCreate()
|
|
394
|
-
→ Reuse existing transport (Session A)
|
|
395
|
-
|
|
396
|
-
Client 2 → POST /mcp (no session) → TransportRegistry.getOrCreate()
|
|
397
|
-
→ New transport + server (Session B)
|
|
398
|
-
→ Response includes mcp-session-id: B
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
### ExpressHttpManager
|
|
402
|
-
|
|
403
|
-
**Responsibility**: HTTP server lifecycle management
|
|
404
|
-
|
|
405
|
-
**Implementation**: [src/transport/expressHttpManager.ts](../src/transport/expressHttpManager.ts)
|
|
406
|
-
|
|
407
|
-
**Key Features**:
|
|
408
|
-
|
|
409
|
-
- Express app generation using SDK's `createMcpExpressApp()`
|
|
410
|
-
- `/mcp` endpoint: Routes to TransportRegistry for per-session handling
|
|
411
|
-
- `/health` endpoint: Health check (includes active session count)
|
|
412
|
-
- Graceful shutdown with registry cleanup
|
|
413
|
-
|
|
414
|
-
**Request Handling Flow**:
|
|
415
|
-
|
|
416
|
-
```typescript
|
|
417
|
-
const handleMcpRequest: RequestHandler = async (req, res) => {
|
|
418
|
-
// Extract session ID from header
|
|
419
|
-
const sessionId = req.headers["mcp-session-id"] as string | undefined;
|
|
420
|
-
|
|
421
|
-
// Get or create transport for this session via TransportRegistry
|
|
422
|
-
const transport = await this.registry.getOrCreate(
|
|
423
|
-
sessionId,
|
|
424
|
-
req.body,
|
|
425
|
-
this.serverFactory,
|
|
426
|
-
);
|
|
427
|
-
|
|
428
|
-
if (!transport) {
|
|
429
|
-
// Invalid session (session ID provided but not found, or non-initialize without session)
|
|
430
|
-
res.status(400).json({
|
|
431
|
-
jsonrpc: "2.0",
|
|
432
|
-
error: { code: -32000, message: "Invalid session" },
|
|
433
|
-
id: null
|
|
434
|
-
});
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
// Delegate request to per-session transport
|
|
439
|
-
await transport.handleRequest(req, res, req.body);
|
|
440
|
-
};
|
|
441
|
-
|
|
442
|
-
// MCP protocol endpoints
|
|
443
|
-
app.post('/mcp', handleMcpRequest); // JSON-RPC requests
|
|
444
|
-
app.get('/mcp', handleMcpRequest); // SSE streaming
|
|
445
|
-
app.delete('/mcp', handleMcpRequest); // Session termination
|
|
446
|
-
|
|
447
|
-
// Health check
|
|
448
|
-
app.get('/health', (req, res) => {
|
|
449
|
-
res.json({
|
|
450
|
-
status: 'ok',
|
|
451
|
-
sessions: this.registry.getCount(),
|
|
452
|
-
timestamp: new Date().toISOString()
|
|
453
|
-
});
|
|
454
|
-
});
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
### SessionManager
|
|
458
|
-
|
|
459
|
-
**Responsibility**: Client session management
|
|
460
|
-
|
|
461
|
-
**Implementation**: [src/transport/sessionManager.ts](../src/transport/sessionManager.ts)
|
|
462
|
-
|
|
463
|
-
**Key Features**:
|
|
464
|
-
|
|
465
|
-
- Session registration (SDK-generated UUIDs)
|
|
466
|
-
- Session cleanup
|
|
467
|
-
- TTL-based automatic expiration with error handling
|
|
468
|
-
- Active session tracking
|
|
469
|
-
|
|
470
|
-
**SDK Integration**:
|
|
471
|
-
|
|
472
|
-
Session lifecycle is fully integrated with MCP SDK callbacks:
|
|
473
|
-
|
|
474
|
-
- **Session Creation**: SDK generates session IDs via `onsessioninitialized` callback
|
|
475
|
-
- **Session Registration**: `SessionManager.register()` tracks SDK-created sessions
|
|
476
|
-
- **Session Validation**: Handled by SDK (`StreamableHTTPServerTransport.handleRequest()`)
|
|
477
|
-
- **Session Cleanup**: `SessionManager.cleanup()` called from `onsessionclosed` callback
|
|
478
|
-
- **Automatic Expiration**: TTL-based cleanup runs independently
|
|
479
|
-
|
|
480
|
-
```typescript
|
|
481
|
-
interface ISessionManager {
|
|
482
|
-
create(metadata?: Record<string, unknown>): string; // Manual creation (not used with SDK)
|
|
483
|
-
register(sessionId: string, metadata?: Record<string, unknown>): void; // SDK integration
|
|
484
|
-
cleanup(sessionId: string): Result<void, Error>;
|
|
485
|
-
list(): Session[];
|
|
486
|
-
startTTLCleanup(): void;
|
|
487
|
-
stopTTLCleanup(): void;
|
|
488
|
-
getActiveSessionCount(): number;
|
|
489
|
-
}
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
---
|
|
493
|
-
|
|
494
|
-
## Core Layer
|
|
495
|
-
|
|
496
|
-
The core layer handles MCP server business logic and communication with TouchDesigner WebServer.
|
|
497
|
-
|
|
498
|
-
### TouchDesignerServer
|
|
499
|
-
|
|
500
|
-
**Responsibility**: Main entry point for MCP server
|
|
501
|
-
|
|
502
|
-
**Implementation**: [src/server/touchDesignerServer.ts](../src/server/touchDesignerServer.ts)
|
|
503
|
-
|
|
504
|
-
**Key Features**:
|
|
505
|
-
|
|
506
|
-
- Transport connection management
|
|
507
|
-
- Registration of MCP tools, prompts, and resources
|
|
508
|
-
- TouchDesigner compatibility verification
|
|
509
|
-
|
|
510
|
-
```typescript
|
|
511
|
-
class TouchDesignerServer {
|
|
512
|
-
async connect(transport: Transport): Promise<Result<void, Error>>
|
|
513
|
-
async disconnect(): Promise<Result<void, Error>>
|
|
514
|
-
getTransportInfo(): TransportInfo
|
|
515
|
-
}
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
### ConnectionManager
|
|
519
|
-
|
|
520
|
-
**Responsibility**: Transport connection lifecycle management
|
|
521
|
-
|
|
522
|
-
**Implementation**: [src/server/connectionManager.ts](../src/server/connectionManager.ts)
|
|
523
|
-
|
|
524
|
-
**Key Features**:
|
|
525
|
-
|
|
526
|
-
- Transport-agnostic connection management
|
|
527
|
-
- Connection metadata tracking
|
|
528
|
-
- Transport type detection
|
|
529
|
-
|
|
530
|
-
```typescript
|
|
531
|
-
class ConnectionManager {
|
|
532
|
-
async connect(transport: Transport): Promise<Result<void, Error>>
|
|
533
|
-
async disconnect(): Promise<Result<void, Error>>
|
|
534
|
-
getTransportType(): TransportType | null
|
|
535
|
-
getConnectionMetadata(): ConnectionMetadata
|
|
536
|
-
isConnected(): boolean
|
|
537
|
-
}
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
### Tool Handlers
|
|
541
|
-
|
|
542
|
-
**Definitions**: [src/features/tools/toolDefinitions.ts](../src/features/tools/toolDefinitions.ts) — the `TOOL_DEFINITIONS` table is the single source of truth for each tool's name, description, input schema, and handler.
|
|
543
|
-
|
|
544
|
-
**Registration**: [src/features/tools/handlers/tdTools.ts](../src/features/tools/handlers/tdTools.ts) — registers every `TOOL_DEFINITIONS` entry in a loop plus the `describe_td_tools` meta tool, whose manifest (parameter metadata) is derived from each tool's Zod schema by introspection ([metadata/touchDesignerToolMetadata.ts](../src/features/tools/metadata/touchDesignerToolMetadata.ts)).
|
|
545
|
-
|
|
546
|
-
MCP tool implementations categorized as follows:
|
|
547
|
-
|
|
548
|
-
1. **Node Operations**:
|
|
549
|
-
- `create_td_node`: Create node
|
|
550
|
-
- `delete_td_node`: Delete node
|
|
551
|
-
- `get_td_nodes`: Get node list
|
|
552
|
-
|
|
553
|
-
2. **Parameter Operations**:
|
|
554
|
-
- `get_td_node_parameters`: Get parameters
|
|
555
|
-
- `update_td_node_parameters`: Update parameters
|
|
556
|
-
|
|
557
|
-
3. **Python Execution**:
|
|
558
|
-
- `execute_python_script`: Execute Python script
|
|
559
|
-
|
|
560
|
-
4. **Class/Module**:
|
|
561
|
-
- `get_td_classes`: Get TouchDesigner class list
|
|
562
|
-
- `get_td_class_details`: Get class details
|
|
563
|
-
- `get_td_module_help`: Get module help
|
|
564
|
-
|
|
565
|
-
### TouchDesignerClient
|
|
566
|
-
|
|
567
|
-
**Implementation**: [src/tdClient/](../src/tdClient/)
|
|
568
|
-
|
|
569
|
-
**Responsibility**: HTTP communication with TouchDesigner WebServer
|
|
570
|
-
|
|
571
|
-
- Auto-generated from OpenAPI schema
|
|
572
|
-
- Type safety with Zod schemas
|
|
573
|
-
- Connection pooling
|
|
574
|
-
|
|
575
|
-
#### Version Compatibility Verification
|
|
576
|
-
|
|
577
|
-
`TouchDesignerClient` includes a built-in compatibility gate in [src/tdClient/touchDesignerClient.ts](../src/tdClient/touchDesignerClient.ts) that protects every tool call from running against outdated TouchDesigner `.tox` files. Without this guard the MCP server might call APIs that no longer exist (or behaved differently) in older `.tox` packages, which would lead to silent TouchDesigner errors. By failing fast with structured guidance, agents can prompt users to update their TouchDesigner components before any destructive action is taken.
|
|
578
|
-
|
|
579
|
-
- `verifyCompatibility()` runs before any API call. It first checks the **success cache** (valid for 5 minutes) via `hasValidSuccessCache()`; if expired it forces a new handshake.
|
|
580
|
-
- `verifyVersionCompatibility()` fetches `/api/td/server/td` (`getTdInfo`) and compares `mcpApiVersion` with the MCP server version using the rules in `core/compatibility.ts`.
|
|
581
|
-
- Compatibility failures are cached through `verifiedCompatibilityError` for 60 seconds (`ERROR_CACHE_TTL_MS`) so repeated tool calls surface the same guidance without spamming TouchDesigner.
|
|
582
|
-
- Manual version checks such as `get_td_info` call `invalidateCompatibilityCache()` to bypass the success cache and always re-verify.
|
|
583
|
-
- When the API is still usable but versions differ (warning level), a **compatibility notice** is stored and appended to every tool response so users see upgrade prompts inline, not just in transport-level notifications.
|
|
584
|
-
|
|
585
|
-
```mermaid
|
|
586
|
-
sequenceDiagram
|
|
587
|
-
participant Tool as MCP Tool Call
|
|
588
|
-
participant Client as TouchDesignerClient
|
|
589
|
-
participant TD as TouchDesigner API
|
|
590
|
-
|
|
591
|
-
Tool->>Client: any tool request
|
|
592
|
-
alt success cache valid ( < 5 min )
|
|
593
|
-
Client-->>Tool: reuse last compatibility verdict
|
|
594
|
-
else cache expired
|
|
595
|
-
Client->>TD: GET /api/td/server/td
|
|
596
|
-
TD-->>Client: { mcpApiVersion, ... }
|
|
597
|
-
Client->>Client: compare via compatibility rules
|
|
598
|
-
alt incompatible
|
|
599
|
-
Client-->>Tool: throw compatibility error (cached 60s)
|
|
600
|
-
else compatible
|
|
601
|
-
Client-->>Tool: proceed with original request<br/>and store success timestamp
|
|
602
|
-
Note over Client,Tool: If result is warning-level,<br>an inline compatibility notice<br>is appended to the tool response
|
|
603
|
-
end
|
|
604
|
-
end
|
|
605
|
-
```
|
|
606
|
-
|
|
607
|
-
This mechanism balances safety and performance: normal operations reuse cached verdicts, but users still see timely upgrade prompts when their TouchDesigner API server is too old. For user-facing guidance see the ["Troubleshooting version compatibility" section](../README.md#troubleshooting-version-compatibility).
|
|
608
|
-
|
|
609
|
-
---
|
|
610
|
-
|
|
611
|
-
## TouchDesigner Integration Layer
|
|
612
|
-
|
|
613
|
-
The TouchDesigner integration layer handles Python WebServer and node operations within TouchDesigner.
|
|
614
|
-
|
|
615
|
-
### WebServer DAT Component
|
|
616
|
-
|
|
617
|
-
**File**: [td/mcp_webserver_base.tox](../td/mcp_webserver_base.tox)
|
|
618
|
-
|
|
619
|
-
**Responsibility**: Provide HTTP API endpoints
|
|
620
|
-
|
|
621
|
-
**Key Features**:
|
|
622
|
-
|
|
623
|
-
- HTTP API endpoints based on OpenAPI specification
|
|
624
|
-
- JSON-RPC style request/response
|
|
625
|
-
- Error handling and logging
|
|
626
|
-
|
|
627
|
-
### Python Controllers & Services
|
|
628
|
-
|
|
629
|
-
**Implementation**: [td/modules/mcp/](../td/modules/mcp/)
|
|
630
|
-
|
|
631
|
-
**Key Components**:
|
|
632
|
-
|
|
633
|
-
1. **api_controller.py**: HTTP request routing
|
|
634
|
-
2. **api_service.py**: Business logic for TouchDesigner operations
|
|
635
|
-
3. **generated_handlers.py**: Auto-generated handler stubs
|
|
636
|
-
|
|
637
|
-
**Node Operation Example**:
|
|
638
|
-
|
|
639
|
-
```python
|
|
640
|
-
# Node creation
|
|
641
|
-
def create_node(parent_path: str, node_type: str, node_name: str = None):
|
|
642
|
-
parent = op(parent_path)
|
|
643
|
-
node = parent.create(node_type, node_name)
|
|
644
|
-
return {
|
|
645
|
-
'path': node.path,
|
|
646
|
-
'type': node.type,
|
|
647
|
-
'name': node.name
|
|
648
|
-
}
|
|
649
|
-
```
|
|
650
|
-
|
|
651
|
-
---
|
|
652
|
-
|
|
653
|
-
## Data Flow
|
|
654
|
-
|
|
655
|
-
### Stdio Transport Flow
|
|
656
|
-
|
|
657
|
-
```mermaid
|
|
658
|
-
sequenceDiagram
|
|
659
|
-
participant Client as MCP Client
|
|
660
|
-
participant Stdio as StdioServerTransport
|
|
661
|
-
participant Server as TouchDesignerServer
|
|
662
|
-
participant TDClient as TouchDesignerClient
|
|
663
|
-
participant TD as TouchDesigner<br/>WebServer
|
|
664
|
-
|
|
665
|
-
Client->>Stdio: JSON-RPC request (stdin)
|
|
666
|
-
Stdio->>Server: MCP message
|
|
667
|
-
Server->>TDClient: HTTP POST /api/...
|
|
668
|
-
TDClient->>TD: HTTP request
|
|
669
|
-
TD-->>TDClient: JSON response
|
|
670
|
-
TDClient-->>Server: parsed response
|
|
671
|
-
Server-->>Stdio: MCP response
|
|
672
|
-
Stdio-->>Client: JSON-RPC response (stdout)
|
|
673
|
-
```
|
|
674
|
-
|
|
675
|
-
### HTTP Transport Flow
|
|
676
|
-
|
|
677
|
-
```mermaid
|
|
678
|
-
sequenceDiagram
|
|
679
|
-
participant Client as MCP Client
|
|
680
|
-
participant Express as ExpressHttpManager
|
|
681
|
-
participant Transport as StreamableHTTP<br/>Transport
|
|
682
|
-
participant Session as SessionManager
|
|
683
|
-
participant Server as TouchDesignerServer
|
|
684
|
-
participant TD as TouchDesigner<br/>WebServer
|
|
685
|
-
|
|
686
|
-
Client->>Express: POST /mcp (initialize)
|
|
687
|
-
Express->>Transport: handleRequest()
|
|
688
|
-
Note over Transport: SDK generates sessionId (UUID)
|
|
689
|
-
Transport->>Session: register(sessionId)<br/>[via onsessioninitialized]
|
|
690
|
-
Session-->>Session: Track session with metadata
|
|
691
|
-
Transport->>Server: MCP initialize
|
|
692
|
-
Server->>TD: verifyCompatibility()
|
|
693
|
-
TD-->>Server: { mcpApiVersion: "1.3.1" }
|
|
694
|
-
Server-->>Transport: initialize response
|
|
695
|
-
Transport-->>Express: HTTP 200 + Set-Cookie
|
|
696
|
-
Express-->>Client: JSON-RPC + sessionId header
|
|
697
|
-
|
|
698
|
-
Client->>Express: POST /mcp (tools/list)<br/>Cookie: sessionId
|
|
699
|
-
Express->>Transport: handleRequest()
|
|
700
|
-
Note over Transport: SDK validates sessionId
|
|
701
|
-
Transport->>Server: tools/list
|
|
702
|
-
Server-->>Transport: tools array
|
|
703
|
-
Transport-->>Express: HTTP 200
|
|
704
|
-
Express-->>Client: JSON-RPC response
|
|
705
|
-
|
|
706
|
-
Client->>Express: DELETE /mcp<br/>Cookie: sessionId
|
|
707
|
-
Express->>Transport: handleRequest()
|
|
708
|
-
Transport->>Session: cleanup(sessionId)<br/>[via onsessionclosed]
|
|
709
|
-
Session-->>Session: Remove session
|
|
710
|
-
Transport-->>Express: HTTP 200
|
|
711
|
-
Express-->>Client: Session terminated
|
|
712
|
-
|
|
713
|
-
Client->>Express: GET /health
|
|
714
|
-
Express->>Session: getActiveSessionCount()
|
|
715
|
-
Session-->>Express: session count
|
|
716
|
-
Express-->>Client: { status: "ok", sessions: N, timestamp: "..." }
|
|
717
|
-
```
|
|
718
|
-
|
|
719
|
-
### Session Lifecycle
|
|
720
|
-
|
|
721
|
-
```mermaid
|
|
722
|
-
stateDiagram-v2
|
|
723
|
-
[*] --> Created: initialize request
|
|
724
|
-
Created --> Active: session created (UUID)
|
|
725
|
-
Active --> Active: update lastAccessedAt
|
|
726
|
-
Active --> Expired: TTL exceeded
|
|
727
|
-
Active --> Terminated: DELETE /mcp
|
|
728
|
-
Expired --> Cleaned: TTL cleanup task
|
|
729
|
-
Terminated --> Cleaned: explicit cleanup
|
|
730
|
-
Cleaned --> [*]
|
|
731
|
-
|
|
732
|
-
note right of Active
|
|
733
|
-
SessionManager tracks:
|
|
734
|
-
- createdAt
|
|
735
|
-
- lastAccessedAt
|
|
736
|
-
- metadata
|
|
737
|
-
end note
|
|
738
|
-
|
|
739
|
-
note right of Expired
|
|
740
|
-
TTL cleanup runs every
|
|
741
|
-
TTL/2 interval
|
|
742
|
-
end note
|
|
743
|
-
```
|
|
744
|
-
|
|
745
|
-
---
|
|
746
|
-
|
|
747
|
-
## Transport Selection Guide
|
|
748
|
-
|
|
749
|
-
### Overview
|
|
750
|
-
|
|
751
|
-
The TouchDesigner MCP Server supports two transport modes, each optimized for different use cases. Both modes provide identical functionality through the same `TouchDesignerServer` implementation—the only difference is the communication protocol.
|
|
752
|
-
|
|
753
|
-
### Transport Comparison
|
|
754
|
-
|
|
755
|
-
| Feature | Stdio Mode | HTTP Mode |
|
|
756
|
-
| --- | --- | --- |
|
|
757
|
-
| **Connection** | Standard I/O (stdin/stdout) | HTTP/SSE (Server-Sent Events) |
|
|
758
|
-
| **Use Case** | Local CLI tools, desktop applications | Remote agents, web applications, microservices |
|
|
759
|
-
| **Session Management** | Single connection | Multi-session with TTL expiration |
|
|
760
|
-
| **Concurrency** | 1 process = 1 connection | Multiple concurrent sessions |
|
|
761
|
-
| **Remote Access** | Not supported | Supported (network accessible) |
|
|
762
|
-
| **Health Check** | Not available | `GET /health` endpoint |
|
|
763
|
-
| **Monitoring** | Limited | Session tracking, metrics |
|
|
764
|
-
| **Debugging** | Requires MCP Inspector | Standard HTTP tools (curl, Postman, browser DevTools) |
|
|
765
|
-
| **Scalability** | Limited (1:1 process model) | High (load balancing, horizontal scaling) |
|
|
766
|
-
| **Security** | Process isolation | DNS rebinding protection, session validation |
|
|
767
|
-
| **Deployment** | Simple (local binary) | Requires HTTP server setup |
|
|
768
|
-
|
|
769
|
-
### When to Use Stdio Mode
|
|
770
|
-
|
|
771
|
-
**Best For**:
|
|
772
|
-
|
|
773
|
-
- Local development and testing
|
|
774
|
-
- Claude Desktop integration
|
|
775
|
-
- Single-user desktop applications
|
|
776
|
-
- Development environments where simplicity is prioritized
|
|
777
|
-
- Scenarios requiring strict process isolation
|
|
778
|
-
|
|
779
|
-
**Example Use Cases**:
|
|
780
|
-
|
|
781
|
-
1. **Claude Desktop Integration**
|
|
782
|
-
|
|
783
|
-
```json
|
|
784
|
-
{
|
|
785
|
-
"mcpServers": {
|
|
786
|
-
"touchdesigner": {
|
|
787
|
-
"command": "npx",
|
|
788
|
-
"args": ["-y", "touchdesigner-mcp-server@latest", "--stdio"]
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
```
|
|
793
|
-
|
|
794
|
-
2. **Local Development**
|
|
795
|
-
|
|
796
|
-
```bash
|
|
797
|
-
# Direct MCP server execution
|
|
798
|
-
npx touchdesigner-mcp-server --stdio
|
|
799
|
-
|
|
800
|
-
# With MCP Inspector for debugging
|
|
801
|
-
npx @modelcontextprotocol/inspector node dist/cli.js --stdio
|
|
802
|
-
```
|
|
803
|
-
|
|
804
|
-
3. **Docker Integration** (Local)
|
|
805
|
-
|
|
806
|
-
```json
|
|
807
|
-
{
|
|
808
|
-
"mcpServers": {
|
|
809
|
-
"touchdesigner": {
|
|
810
|
-
"command": "docker",
|
|
811
|
-
"args": [
|
|
812
|
-
"compose", "-f", "/path/to/docker-compose.yml",
|
|
813
|
-
"exec", "-i", "touchdesigner-mcp-server",
|
|
814
|
-
"node", "dist/cli.js", "--stdio",
|
|
815
|
-
"--host=http://host.docker.internal"
|
|
816
|
-
]
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
```
|
|
821
|
-
|
|
822
|
-
**Advantages**:
|
|
823
|
-
|
|
824
|
-
- Simple setup (no port configuration)
|
|
825
|
-
- Strong process isolation
|
|
826
|
-
- No network exposure
|
|
827
|
-
- Minimal attack surface
|
|
828
|
-
- Works with standard POSIX tools
|
|
829
|
-
|
|
830
|
-
**Limitations**:
|
|
831
|
-
|
|
832
|
-
- Cannot accept remote connections
|
|
833
|
-
- Limited to single client
|
|
834
|
-
- No built-in health checking
|
|
835
|
-
- Harder to debug (requires specialized tools)
|
|
836
|
-
|
|
837
|
-
### When to Use HTTP Mode
|
|
838
|
-
|
|
839
|
-
**Best For**:
|
|
840
|
-
|
|
841
|
-
- Production deployments
|
|
842
|
-
- Web application integrations
|
|
843
|
-
- Remote access scenarios
|
|
844
|
-
- Multiple concurrent clients
|
|
845
|
-
- Monitoring and observability requirements
|
|
846
|
-
- Scalable architectures
|
|
847
|
-
|
|
848
|
-
**Example Use Cases**:
|
|
849
|
-
|
|
850
|
-
1. **Production Server**
|
|
851
|
-
|
|
852
|
-
```bash
|
|
853
|
-
# Start HTTP server
|
|
854
|
-
touchdesigner-mcp-server \
|
|
855
|
-
--mcp-http-port=6280 \
|
|
856
|
-
--mcp-http-host=127.0.0.1 \
|
|
857
|
-
--host=http://127.0.0.1 \
|
|
858
|
-
--port=9981
|
|
859
|
-
|
|
860
|
-
# Health check
|
|
861
|
-
curl http://localhost:6280/health
|
|
862
|
-
# Response: {"status":"ok","sessions":0,"timestamp":"2025-12-06T..."}
|
|
863
|
-
|
|
864
|
-
```
|
|
865
|
-
|
|
866
|
-
2. **Web Browser Integration**
|
|
867
|
-
|
|
868
|
-
```javascript
|
|
869
|
-
// Browser-based MCP client
|
|
870
|
-
const eventSource = new EventSource('http://localhost:6280/mcp');
|
|
871
|
-
|
|
872
|
-
eventSource.onmessage = (event) => {
|
|
873
|
-
const response = JSON.parse(event.data);
|
|
874
|
-
console.log('TouchDesigner response:', response);
|
|
875
|
-
};
|
|
876
|
-
|
|
877
|
-
// Send JSON-RPC request
|
|
878
|
-
fetch('http://localhost:6280/mcp', {
|
|
879
|
-
method: 'POST',
|
|
880
|
-
headers: { 'Content-Type': 'application/json' },
|
|
881
|
-
body: JSON.stringify({
|
|
882
|
-
jsonrpc: '2.0',
|
|
883
|
-
method: 'tools/call',
|
|
884
|
-
params: {
|
|
885
|
-
name: 'get_td_nodes',
|
|
886
|
-
arguments: { parentPath: '/project1' },
|
|
887
|
-
}
|
|
888
|
-
}),
|
|
889
|
-
});
|
|
890
|
-
```
|
|
891
|
-
|
|
892
|
-
3. **Multi-Client Architecture**
|
|
893
|
-
|
|
894
|
-
```bash
|
|
895
|
-
# Multiple AI agents can connect simultaneously
|
|
896
|
-
# Client 1: Claude Desktop (via HTTP client library)
|
|
897
|
-
# Client 2: Web application
|
|
898
|
-
# Client 3: VSCode extension
|
|
899
|
-
# All sharing the same MCP server instance
|
|
900
|
-
```
|
|
901
|
-
|
|
902
|
-
4. **Monitoring Integration**
|
|
903
|
-
|
|
904
|
-
```bash
|
|
905
|
-
# Prometheus metrics scraping
|
|
906
|
-
curl http://localhost:6280/health
|
|
907
|
-
# Load balancer health check
|
|
908
|
-
# Configure ALB/NLB to check /health endpoint
|
|
909
|
-
|
|
910
|
-
```
|
|
911
|
-
|
|
912
|
-
**Advantages**:
|
|
913
|
-
|
|
914
|
-
- Remote access capability
|
|
915
|
-
- Multiple concurrent sessions
|
|
916
|
-
- Standard HTTP debugging tools
|
|
917
|
-
- Built-in health checking
|
|
918
|
-
- Session management with TTL
|
|
919
|
-
- Horizontal scalability
|
|
920
|
-
- Load balancing support
|
|
921
|
-
- Easy monitoring integration
|
|
922
|
-
|
|
923
|
-
**Limitations**:
|
|
924
|
-
|
|
925
|
-
- Requires port configuration
|
|
926
|
-
- Network security considerations
|
|
927
|
-
- More complex setup
|
|
928
|
-
- Requires session management
|
|
929
|
-
|
|
930
|
-
### Usage Examples
|
|
931
|
-
|
|
932
|
-
#### Stdio Mode Configuration
|
|
933
|
-
|
|
934
|
-
**Claude Desktop** (`~/.config/claude-desktop/config.json`):
|
|
935
|
-
|
|
936
|
-
```json
|
|
937
|
-
{
|
|
938
|
-
"mcpServers": {
|
|
939
|
-
"touchdesigner": {
|
|
940
|
-
"command": "npx",
|
|
941
|
-
"args": [
|
|
942
|
-
"-y",
|
|
943
|
-
"touchdesigner-mcp-server@latest",
|
|
944
|
-
"--stdio",
|
|
945
|
-
"--host=http://127.0.0.1",
|
|
946
|
-
"--port=9981"
|
|
947
|
-
]
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
}
|
|
951
|
-
```
|
|
952
|
-
|
|
953
|
-
**Docker Compose**:
|
|
954
|
-
|
|
955
|
-
```yaml
|
|
956
|
-
services:
|
|
957
|
-
touchdesigner-mcp-server:
|
|
958
|
-
image: touchdesigner-mcp-server
|
|
959
|
-
extra_hosts:
|
|
960
|
-
- "host.docker.internal:host-gateway"
|
|
961
|
-
stdin_open: true
|
|
962
|
-
tty: true
|
|
963
|
-
command: ["tail", "-f", "/dev/null"] # Keep container running
|
|
964
|
-
```
|
|
965
|
-
|
|
966
|
-
**Usage**:
|
|
967
|
-
|
|
968
|
-
```bash
|
|
969
|
-
docker-compose up -d
|
|
970
|
-
# Connect via docker compose exec
|
|
971
|
-
docker compose exec -i touchdesigner-mcp-server \
|
|
972
|
-
node dist/cli.js --stdio --host=http://host.docker.internal
|
|
973
|
-
```
|
|
974
|
-
|
|
975
|
-
#### HTTP Mode Configuration
|
|
976
|
-
|
|
977
|
-
**Direct Execution**:
|
|
978
|
-
|
|
979
|
-
```bash
|
|
980
|
-
touchdesigner-mcp-server \
|
|
981
|
-
--mcp-http-port=6280 \
|
|
982
|
-
--mcp-http-host=127.0.0.1 \
|
|
983
|
-
--host=http://127.0.0.1 \
|
|
984
|
-
--port=9981
|
|
985
|
-
```
|
|
986
|
-
|
|
987
|
-
**Docker Compose (Streamable HTTP)**:
|
|
988
|
-
|
|
989
|
-
`.env`:
|
|
990
|
-
|
|
991
|
-
```env
|
|
992
|
-
TRANSPORT=http
|
|
993
|
-
MCP_HTTP_PORT=6280
|
|
994
|
-
TD_HOST=http://host.docker.internal
|
|
995
|
-
TD_PORT=9981
|
|
996
|
-
```
|
|
997
|
-
|
|
998
|
-
`docker-compose.yml`:
|
|
999
|
-
|
|
1000
|
-
```yaml
|
|
1001
|
-
services:
|
|
1002
|
-
touchdesigner-mcp-server:
|
|
1003
|
-
build: .
|
|
1004
|
-
extra_hosts:
|
|
1005
|
-
- "host.docker.internal:host-gateway"
|
|
1006
|
-
ports:
|
|
1007
|
-
- "${MCP_HTTP_PORT:-6280}:${MCP_HTTP_PORT:-6280}"
|
|
1008
|
-
environment:
|
|
1009
|
-
- TRANSPORT=${TRANSPORT:-manual}
|
|
1010
|
-
- MCP_HTTP_PORT=${MCP_HTTP_PORT:-6280}
|
|
1011
|
-
- MCP_HTTP_HOST=${MCP_HTTP_HOST:-0.0.0.0}
|
|
1012
|
-
- TD_HOST=${TD_HOST:-http://host.docker.internal}
|
|
1013
|
-
- TD_PORT=${TD_PORT:-9981}
|
|
1014
|
-
```
|
|
1015
|
-
|
|
1016
|
-
`docker compose up -d` で起動すると `docker/start.sh` がHTTPモードを自動選択し、
|
|
1017
|
-
`http://localhost:${MCP_HTTP_PORT}/mcp` が利用可能になります。
|
|
1018
|
-
|
|
1019
|
-
**With Load Balancer**:
|
|
1020
|
-
|
|
1021
|
-
```yaml
|
|
1022
|
-
services:
|
|
1023
|
-
nginx:
|
|
1024
|
-
image: nginx
|
|
1025
|
-
ports:
|
|
1026
|
-
- "80:80"
|
|
1027
|
-
volumes:
|
|
1028
|
-
- ./nginx.conf:/etc/nginx/nginx.conf
|
|
1029
|
-
depends_on:
|
|
1030
|
-
- mcp-server-1
|
|
1031
|
-
- mcp-server-2
|
|
1032
|
-
|
|
1033
|
-
mcp-server-1:
|
|
1034
|
-
image: touchdesigner-mcp-server
|
|
1035
|
-
command: ["node", "dist/cli.js", "--mcp-http-port=6280"]
|
|
1036
|
-
|
|
1037
|
-
mcp-server-2:
|
|
1038
|
-
image: touchdesigner-mcp-server
|
|
1039
|
-
command: ["node", "dist/cli.js", "--mcp-http-port=6280"]
|
|
1040
|
-
```
|
|
1041
|
-
|
|
1042
|
-
### Common Configuration Options
|
|
1043
|
-
|
|
1044
|
-
Both modes support these TouchDesigner connection options:
|
|
1045
|
-
|
|
1046
|
-
| Option | Description | Default | Example |
|
|
1047
|
-
| --- | --- | --- | --- |
|
|
1048
|
-
| `--host` | TouchDesigner WebServer host | `http://127.0.0.1` | `--host=http://192.168.1.100` |
|
|
1049
|
-
| `--port` | TouchDesigner WebServer port | `9981` | `--port=9982` |
|
|
1050
|
-
|
|
1051
|
-
**HTTP Mode Additional Options**:
|
|
1052
|
-
|
|
1053
|
-
| Option | Description | Default | Required |
|
|
1054
|
-
| --- | --- | --- | --- |
|
|
1055
|
-
| `--mcp-http-port` | MCP HTTP server port | - | Yes (for HTTP mode) |
|
|
1056
|
-
| `--mcp-http-host` | MCP HTTP bind address | `127.0.0.1` | No |
|
|
1057
|
-
|
|
1058
|
-
### Migration Guide
|
|
1059
|
-
|
|
1060
|
-
#### From Stdio to HTTP
|
|
1061
|
-
|
|
1062
|
-
**Before** (Stdio):
|
|
1063
|
-
|
|
1064
|
-
```bash
|
|
1065
|
-
npx touchdesigner-mcp-server --stdio
|
|
1066
|
-
```
|
|
1067
|
-
|
|
1068
|
-
**After** (HTTP):
|
|
1069
|
-
|
|
1070
|
-
```bash
|
|
1071
|
-
npx touchdesigner-mcp-server \
|
|
1072
|
-
--mcp-http-port=6280 \
|
|
1073
|
-
--mcp-http-host=127.0.0.1
|
|
1074
|
-
```
|
|
1075
|
-
|
|
1076
|
-
**Client Code Changes**:
|
|
1077
|
-
|
|
1078
|
-
```javascript
|
|
1079
|
-
// Before: Stdio (via child_process)
|
|
1080
|
-
const { spawn } = require('child_process');
|
|
1081
|
-
const server = spawn('npx', ['touchdesigner-mcp-server', '--stdio']);
|
|
1082
|
-
|
|
1083
|
-
// After: HTTP (via fetch/EventSource)
|
|
1084
|
-
const response = await fetch('http://localhost:6280/mcp', {
|
|
1085
|
-
method: 'POST',
|
|
1086
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1087
|
-
body: JSON.stringify({ /* MCP request */ })
|
|
1088
|
-
});
|
|
1089
|
-
```
|
|
1090
|
-
|
|
1091
|
-
#### From HTTP to Stdio
|
|
1092
|
-
|
|
1093
|
-
**Before** (HTTP):
|
|
1094
|
-
|
|
1095
|
-
```bash
|
|
1096
|
-
touchdesigner-mcp-server --mcp-http-port=6280
|
|
1097
|
-
```
|
|
1098
|
-
|
|
1099
|
-
**After** (Stdio):
|
|
1100
|
-
|
|
1101
|
-
```bash
|
|
1102
|
-
touchdesigner-mcp-server --stdio
|
|
1103
|
-
```
|
|
1104
|
-
|
|
1105
|
-
**Note**: Session management features (TTL, health checks, concurrent sessions) are not available in Stdio mode.
|
|
1106
|
-
|
|
1107
|
-
---
|
|
1108
|
-
|
|
1109
|
-
## Design Principles
|
|
1110
|
-
|
|
1111
|
-
### 1. Clean Architecture
|
|
1112
|
-
|
|
1113
|
-
Follows layer separation and dependency inversion principles:
|
|
1114
|
-
|
|
1115
|
-
- **Transport Layer**: Protocol handling only
|
|
1116
|
-
- **Core Layer**: Business logic
|
|
1117
|
-
- **Integration Layer**: Connection with external systems (TouchDesigner)
|
|
1118
|
-
|
|
1119
|
-
### 2. SDK-First Approach
|
|
1120
|
-
|
|
1121
|
-
Maximizes use of MCP SDK built-in features:
|
|
1122
|
-
|
|
1123
|
-
- Minimize custom code
|
|
1124
|
-
- Rely on standard implementations
|
|
1125
|
-
- Automatically benefit from SDK updates
|
|
1126
|
-
|
|
1127
|
-
### 3. Type Safety
|
|
1128
|
-
|
|
1129
|
-
Strict type safety with TypeScript and Zod:
|
|
1130
|
-
|
|
1131
|
-
- Compile-time type checking
|
|
1132
|
-
- Runtime validation
|
|
1133
|
-
- Centralized type definitions and schemas
|
|
1134
|
-
|
|
1135
|
-
### 4. Result Pattern
|
|
1136
|
-
|
|
1137
|
-
Consistent error handling:
|
|
1138
|
-
|
|
1139
|
-
```typescript
|
|
1140
|
-
type Result<T, E = Error> =
|
|
1141
|
-
| { success: true; data: T }
|
|
1142
|
-
| { success: false; error: E };
|
|
1143
|
-
```
|
|
1144
|
-
|
|
1145
|
-
### 5. Interface-Driven Design
|
|
1146
|
-
|
|
1147
|
-
Interface-driven design for testability and extensibility:
|
|
1148
|
-
|
|
1149
|
-
```typescript
|
|
1150
|
-
interface ISessionManager {
|
|
1151
|
-
create(metadata?: Record<string, unknown>): string;
|
|
1152
|
-
cleanup(sessionId: string): Result<void, Error>;
|
|
1153
|
-
// ...
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
interface ILogger {
|
|
1157
|
-
sendLog(params: { level: string; data: string; logger: string }): void;
|
|
1158
|
-
}
|
|
1159
|
-
```
|
|
1160
|
-
|
|
1161
|
-
### 6. OpenAPI-Based Code Generation
|
|
1162
|
-
|
|
1163
|
-
Code generation from OpenAPI schema:
|
|
1164
|
-
|
|
1165
|
-
- **Schema-First**: [src/api/index.yml](../src/api/index.yml)
|
|
1166
|
-
- **Bundled Schema**: Generated with `@redocly/cli` (single YAML consumed by all downstream steps)
|
|
1167
|
-
- **Python Handlers**: Generated with a custom Mustache-based script (`td/genHandlers.js`)
|
|
1168
|
-
- **TypeScript Client**: Generated with Orval
|
|
1169
|
-
- **Zod Schemas**: Generated with Orval
|
|
1170
|
-
|
|
1171
|
-
Generation Process:
|
|
1172
|
-
|
|
1173
|
-
```bash
|
|
1174
|
-
npm run gen:openapi # Bundle OpenAPI schema into a single YAML
|
|
1175
|
-
npm run gen:handlers # Python handlers generation
|
|
1176
|
-
npm run gen:mcp # TypeScript client + Zod schemas
|
|
1177
|
-
npm run gen # Run all generation steps
|
|
1178
|
-
```
|
|
1179
|
-
|
|
1180
|
-
---
|
|
1181
|
-
|
|
1182
|
-
## Extensibility
|
|
1183
|
-
|
|
1184
|
-
### Adding New Transports
|
|
1185
|
-
|
|
1186
|
-
1. Define configuration type in `src/transport/config.ts`
|
|
1187
|
-
2. Add Zod schema
|
|
1188
|
-
3. Add new case to `TransportFactory.create()`
|
|
1189
|
-
4. Implement transport-specific manager (if needed)
|
|
1190
|
-
|
|
1191
|
-
**Example (WebSocket)**:
|
|
1192
|
-
|
|
1193
|
-
```typescript
|
|
1194
|
-
// 1. Define config
|
|
1195
|
-
export interface WebSocketTransportConfig {
|
|
1196
|
-
type: 'websocket';
|
|
1197
|
-
port: number;
|
|
1198
|
-
path?: string;
|
|
1199
|
-
}
|
|
1200
|
-
|
|
1201
|
-
// 2. Add to union type
|
|
1202
|
-
export type TransportConfig =
|
|
1203
|
-
| StdioTransportConfig
|
|
1204
|
-
| StreamableHttpTransportConfig
|
|
1205
|
-
| WebSocketTransportConfig;
|
|
1206
|
-
|
|
1207
|
-
// 3. Extend factory
|
|
1208
|
-
static create(config: TransportConfig): Result<Transport, Error> {
|
|
1209
|
-
switch (config.type) {
|
|
1210
|
-
case 'stdio':
|
|
1211
|
-
return this.createStdio();
|
|
1212
|
-
case 'streamable-http':
|
|
1213
|
-
return this.createStreamableHttp(config);
|
|
1214
|
-
case 'websocket':
|
|
1215
|
-
return this.createWebSocket(config);
|
|
1216
|
-
}
|
|
1217
|
-
}
|
|
1218
|
-
```
|
|
1219
|
-
|
|
1220
|
-
### Adding New MCP Tools
|
|
1221
|
-
|
|
1222
|
-
1. Add endpoint definition to OpenAPI schema
|
|
1223
|
-
2. Generate code with `npm run gen`
|
|
1224
|
-
3. Implement business logic in Python service
|
|
1225
|
-
4. Implement TypeScript tool handler
|
|
1226
|
-
|
|
1227
|
-
---
|
|
1228
|
-
|
|
1229
|
-
## References
|
|
1230
|
-
|
|
1231
|
-
### MCP Specification
|
|
1232
|
-
|
|
1233
|
-
- [MCP Specification - Transports](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports)
|
|
1234
|
-
- [Streamable HTTP Transport](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#http-with-sse)
|
|
1235
|
-
|
|
1236
|
-
### MCP TypeScript SDK
|
|
1237
|
-
|
|
1238
|
-
- [SDK Repository](https://github.com/modelcontextprotocol/typescript-sdk)
|
|
1239
|
-
- [Express Integration](https://github.com/modelcontextprotocol/typescript-sdk/blob/main/src/server/express.ts)
|
|
1240
|
-
|
|
1241
|
-
---
|
|
1242
|
-
|
|
1243
|
-
**Document Version**: 1.0
|
|
1244
|
-
**Last Updated**: 2025-12-06
|
|
1245
|
-
**Status**: Complete
|