TouchDesigner MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TD_WEB_SERVER_URL | No | URL of the TouchDesigner WebServer DAT | http://localhost:9981 |
| TD_WEB_SERVER_PORT | No | Port for the TouchDesigner WebServer DAT | 9981 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_td_infoC | Get server information from TouchDesigner |
| execute_python_scriptC | Execute a Python script in TouchDesigner (detailLevel=minimal|summary|detailed, responseFormat=json|yaml|markdown) |
| get_td_nodesB | List nodes under a path with token-optimized output (detailLevel+limit supported) |
| get_td_node_parametersB | Get node parameters with concise/detailed formatting (detailLevel+limit supported) |
| get_td_node_errorsA | Check errors and warnings on a node and its descendants. TouchDesigner reports missing files, dangling operator references and shader compile failures as warnings, so do not treat hasErrors=false as a healthy node. Reads the operator errors and warnings streams only: an exception raised inside a Script OP callback, a scriptCHOP onCook for example, lands on neither and is reported nowhere here, so an empty report is not evidence the node cooked |
| create_td_nodeC | Create a new node in TouchDesigner |
| update_td_node_parametersC | Update parameters of a specific node in TouchDesigner |
| delete_td_nodeB | Delete an existing node in TouchDesigner |
| exec_node_methodC | Execute a method on a specific node in TouchDesigner |
| get_td_classesB | List TouchDesigner Python classes/modules (detailLevel+limit supported) |
| get_td_class_detailsB | Get information about a TouchDesigner class/module (detailLevel+limit supported) |
| get_td_module_helpB | Retrieve Python help() text for a TouchDesigner module or class |
| get_top_imageA | Capture the current output of a TOP node as an image so it can be viewed directly (maxSize optionally downscales the longer side) |
| describe_td_toolsB | Generate a filesystem-oriented manifest of available TouchDesigner tools |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| Search node | Fuzzy search for node |
| Check node errors | Fuzzy search for node and return errors in TouchDesigner. |
| Node connection | Connect nodes between each other in TouchDesigner. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Each tool targets a distinct concern: server info, script execution, node listing/parameters/errors, CRUD, method execution, class/module introspection, image capture, and a tool manifest. get_td_class_details and get_td_module_help are the only close pair, but the descriptions clearly separate detailed info from raw help() text.
Most tools follow a get/create/update/delete/execute verb prefix, but the TD marker placement is inconsistent (get_td_nodes vs create_td_node vs exec_node_method), and names like get_top_image and describe_td_tools break the pattern. The naming is readable and mostly snake_case, but not fully systematic.
14 tools is well within the ideal range for a domain-specific server. Each tool earns its place by covering a meaningful part of the TouchDesigner workflow, with no obvious redundancy or bloat.
The set provides full node lifecycle coverage (create, read/list, update, delete), parameter access, error checking, arbitrary script execution, node method calls, class/help introspection, and image output capture. The generic execute_python_script tool also acts as a powerful fallback for any uncovered operations.