Skip to content

Tool Manager

v1.0.1New

The Tool Manager LOP discovers tools from connected LOPs operators and hosts them as an MCP (Model Context Protocol) server. This bridges TouchDesigner’s tool ecosystem with external AI clients like Claude Code, Cursor, and any MCP-compatible application.

  • Automatic tool discovery - Scans a Tool sequence parameter and collects all GetTool() definitions from connected operators
  • Individual tool toggles - Enable or disable specific tools without removing operators
  • MCP server hosting - Exposes enabled tools via stdio or streamable-HTTP transport
  • Preset management - Save and load tool configurations for different workflows
  • Config export - Copy MCP client configuration to clipboard for easy setup in external tools
🔧 GetTool Enabled 0 tools

This operator exposes 0 tools that allow Agent and Gemini Live LOPs to proxy all enabled tools from connected operators to agents via GetTool.

The Tool Manager’s GetTool() returns all enabled tools from its Tool sequence, acting as a tool aggregator. Connect it to an Agent LOP to give the agent access to all discovered tools at once.

  • ChatTD Operator - Required for async server hosting
  • Dependencies - fastmcp and td_mcp_adapter (install via ‘Install Dependencies’ on the Dependencies page)

None - tools are collected from the Tool sequence parameter on the Tools page.

  • Tools Table - All discovered tools with name, description, operator path, handler, enabled status, and parameter count
  • MCP Tools Output - JSON array of currently enabled tools for the MCP server
  • Tool Registry - Detailed handler info for each tool
  1. On the Tools page, add operators to the ‘External Op Tools’ sequence by referencing each LOP’s path.
  2. Set each entry’s ‘Active’ mode to ‘enabled’ (or ‘forced’ to always include, ‘disabled’ to skip).
  3. Pulse ‘Refresh Tools’ to scan all connected operators and discover their tools.
  4. The tools table will populate with all discovered tools.
  1. After refreshing tools, toggle parameters appear on the Tool Toggle page - one for each discovered tool.
  2. Toggle individual tools On or Off as needed.
  3. Use ‘Enable All Tools’ as a master toggle.
  4. If the MCP server is running, pulse ‘Restart Server’ on the Config page to apply changes.
  1. On the Config page, select ‘Transport’ - use ‘streamable-http’ for network access or ‘stdio’ for local process communication.
  2. Set ‘Host’ and ‘Port’ as needed (defaults: 0.0.0.0:18765).
  3. Enter a ‘Server Name’ to identify this instance.
  4. Pulse ‘Start Server’ to begin hosting.
  5. The ‘Server URL’ on the Config page shows the running endpoint.
  1. Start the MCP server as above.
  2. Pulse ‘Copy Claude Code Config’ to copy the MCP configuration to your clipboard.
  3. Paste the configuration into your Claude Code MCP settings file.
  4. Claude Code can now call any enabled tools in your TouchDesigner project.
  1. Configure your tool toggles for a specific workflow.
  2. On the Presets page, enter a name in ‘Preset Name’.
  3. Pulse ‘Save Preset’ to store the current toggle configuration.
  4. Later, select the preset name and pulse ‘Load Preset’ to restore that configuration.
  • Use presets to quickly switch between different tool sets for different tasks (e.g., “creative” vs “data” vs “full access”).
  • The Tool Manager can also be connected to an Agent LOP via its GetTool() method, giving LOPs agents access to the same tool set without MCP.
  • Pulse ‘Refresh Tools’ whenever you add or remove operators from the Tool sequence.
Server Name (Servername) op('tool_manager').par.Servername Str

Name for this MCP server instance

Default:
"" (Empty String)
Transport (Transport) op('tool_manager').par.Transport Menu
Default:
stdio
Options:
stdio, streamable-http
Host (Host) op('tool_manager').par.Host Str
Default:
"" (Empty String)
Port (Port) op('tool_manager').par.Port Int
Default:
0
Range:
0 to 1
Slider Range:
0 to 1
Start Server (Startserver) op('tool_manager').par.Startserver Pulse
Default:
False
Stop Server (Stopserver) op('tool_manager').par.Stopserver Pulse
Default:
False
Restart Server (Restartserver) op('tool_manager').par.Restartserver Pulse

Restart server to apply tool changes

Default:
False
Copy Config (Copyconfig) op('tool_manager').par.Copyconfig Pulse
Default:
False
Copy Claude Code Config (Copyclaudecodeconfig) op('tool_manager').par.Copyclaudecodeconfig Pulse
Default:
False
Server URL (Serverurl) op('tool_manager').par.Serverurl Str
Default:
"" (Empty String)
Last Update (Lastupdate) op('tool_manager').par.Lastupdate Str

Timestamp of last tool discovery

Default:
"" (Empty String)
Running (Running) op('tool_manager').par.Running Toggle
Default:
False
External Op Tools (Tool) op('tool_manager').par.Tool Sequence
Default:
0
Active (Tool0active) op('tool_manager').par.Tool0active Menu
Default:
enabled
Options:
enabled, disabled, forced
OP (Tool0op) op('tool_manager').par.Tool0op OP
Default:
"" (Empty String)
Refresh Tools (Refreshtools) op('tool_manager').par.Refreshtools Pulse

Scan Tool sequence and rebuild tool registry

Default:
False
Enable All Tools (Enablealltools) op('tool_manager').par.Enablealltools Toggle

Master toggle for all tools

Default:
False
Preset Name (Presetname) op('tool_manager').par.Presetname StrMenu

Name for saving/loading tool configurations

Default:
"" (Empty String)
Menu Options:
Save Preset (Savepreset) op('tool_manager').par.Savepreset Pulse
Default:
False
Load Preset (Loadpreset) op('tool_manager').par.Loadpreset Pulse
Default:
False
Install Dependencies (Installdeps) op('tool_manager').par.Installdeps Pulse
Default:
False
Check Dependencies (Checkdeps) op('tool_manager').par.Checkdeps Pulse
Default:
False
v1.0.12025-12-06

## v1.0.1

Added

  • GetTool() method for agent integration - tool_manager can now be used as a single tool source in agent Tool sequences
  • Tool toggle state caching - preserves toggle values, mode, and expressions when refreshing tools
  • Auto-generated preset names (preset_1, preset_2, etc.) when saving with empty name

Fixed

  • Tool Toggle page now properly clears when tools are removed from sequence
  • Fixed parameter destroy method (using par.destroy() instead of non-existent destroyCustomPar)

Changed

  • Commented out Autorefresh parameter (requires sequence monitoring - not yet implemented)