Bridge Architecture
The Studio treats external applications as host bridges. A bridge can be direct, MCP-based, or both.
Direct path:
UI -> bridge class -> localhost app adapter -> host API
Reasoning path:
UI -> MCPHost / LLM -> MCP server -> bridge/app tools -> host API
Use the direct path for deterministic actions such as selection, current file, scene objects, logs, scripted edits, project-aware debug, and controlled prototype operations. Use the MCP path when the AI needs to plan, search docs, choose tools, or explain results.
The current direct UI covers Maya, Unreal, Blender, Substance Painter, Unity, and MotionBuilder. The plugin registry currently tracks Maya, Unreal, Blender, Substance Painter, and MotionBuilder; Unity exists as a direct bridge/menu integration and should be added to the registry before it is treated as a full plugin target.
Bridge Contract
New direct bridges should expose the common shape from:
bridges/host_bridge.py
Minimum methods:
find_port()
execute(code)
get_selection_code()
get_current_file_code()
get_scene_objects_code()
Optional methods:
call_function(function_path, args, kwargs)
parse_input(text)
get_logs()
save()
run_tool()
Smart-operation hosts should also expose package endpoints documented in:
docs/DCC_SMART_OPERATIONS.md
Full adapters should subclass DCCAdapter and use its shared smart-operation
helpers for normal understanding, prototype, and debug responses:
build_context_summary()
build_understanding_report(question)
build_prototype_plan(goal, template, context)
build_debug_report(goal, context)
Host-specific adapters can override these methods for deeper scans, but they should keep the same response shape so the UI can treat every DCC consistently.
Plugin Registry
Register bridge metadata in:
plugins/plugin_registry.json
Example:
{
"enabled": true,
"display_name": "Blender",
"server": "blender_command_port_setup.py",
"domain": "blender",
"tool_domain": "blender_tools",
"protocol": "socket-json",
"default_port": 7021,
"supports_direct_execute": true,
"supports_mcp": false
}
The registry is intentionally simple so downstream users can add local apps without changing every subsystem.
App Adapter Pattern
Most desktop apps need a small script or plugin running inside the host:
Blender: run a bpy socket server
Substance Painter: install a Python plugin with a socket server
Unity: install an Editor plugin with HTTP or WebSocket endpoints
Houdini: run a hou Python socket server
Word/Excel: use a Windows COM or Office add-in adapter
Adapters should listen on 127.0.0.1 by default and write their active port to
%LOCALAPPDATA%\TA_AI_Studio_MCPHost\{host}_port.txt when possible.
Adding A New Bridge
Adding a new 3D app should be progressive. A user should not need to implement every bridge feature before Tech Connector can understand that the app exists.
Minimum viable 3D app:
- App name / id.
- Executable path.
- One or more API docs, SDK references, local stubs, or internal notes.
With only those fields, Tech Connector can:
- launch or locate the app;
- index the app's API documentation;
- answer app-aware questions;
- draft bridge code, menu actions, and smoke tests;
- show the app as "docs-aware / launchable" rather than "fully connected."
Optional upgrades:
| Optional field | Unlocks |
|---|---|
| In-app bridge script or adapter module | live command execution, selection reads, status checks |
| Internal tool folders/modules | smart-menu capability indexing and workflow nodes |
| Scene snapshot method | outliner and federated viewport participation |
| Camera query/set methods | shared-camera viewport sync |
| Geometry extraction | true mesh display instead of bounds fallback |
| Menu contribution manifest | app-specific menu under Apps / Connected Applications |
| Icon and branding | polished app identity in menus and status cards |
| Health checks and smoke prompts | trusted/validated setup state |
| MCP server | richer model-planned tool use after direct calls are proven |
The helper module services/dcc/three_d_app_provider_manifest.py defines this
progressive manifest shape. Required fields stay small; optional fields upgrade
the provider from minimum_viable to connected_app_ready, viewport_ready, or
smart_menu_ready.
For a fully connected app, add or generate:
bridges/{host}_bridge.py.- An in-app adapter script or plugin.
- Registry metadata in
plugins/plugin_registry.jsonor an integration package. - Common direct UI verbs first.
- App-specific smart-menu actions from the provider manifest.
- MCP support after direct calls are proven.
- Docs and tests that do not require the host app to be installed.
Keep host-specific logic inside the bridge or adapter. The UI should call common verbs whenever possible.