Envoy exposes 40+ MCP tools for interacting with TouchDesigner. All tools use the standard MCP protocol and can be called by any compatible client.
Operator Management
| Tool |
Parameters |
Description |
create_op |
parent_path, op_type, name? |
Create a new operator (e.g., baseCOMP, noiseTOP, textDAT, gridPOP) |
create_extension |
parent_path, class_name, name?, code?, promote?, ext_name?, ext_index?, existing_comp? |
Create a TD extension: baseCOMP + text DAT + extension wiring, initialized and ready to use |
delete_op |
op_path |
Delete an operator |
copy_op |
source_path, dest_parent, new_name? |
Copy operator to new location |
rename_op |
op_path, new_name |
Rename an operator |
get_op |
op_path |
Get full operator info (type, family, parameters, inputs, outputs, children) |
query_network |
parent_path?, recursive?, op_type?, include_utility? |
List operators in a container. Set include_utility=True to include annotations |
find_children |
op_path, name?, type?, depth?, tags?, text?, comment?, include_utility? |
Advanced search using TD's findChildren — filter by name pattern, type, depth, tags, text content, or comment |
cook_op |
op_path, force?, recurse? |
Force-cook an operator |
Parameter Control
| Tool |
Parameters |
Description |
set_parameter |
op_path, par_name, value?, mode?, expr?, bind_expr? |
Set a parameter's value, expression, bind expression, or mode (constant/expression/export/bind) |
get_parameter |
op_path, par_name |
Get parameter value, mode, expression, bind info, export source, label, range, menu entries, and default |
DAT Content
| Tool |
Parameters |
Description |
get_dat_content |
op_path, format? |
Get DAT text or table data ("text", "table", or "auto") |
set_dat_content |
op_path, text?, rows?, clear? |
Set DAT content from text string or list of row lists |
Operator Flags
| Tool |
Parameters |
Description |
get_op_flags |
op_path |
Get all flags: bypass, lock, display, render, viewer, current, expose, selected, allowCooking |
set_op_flags |
op_path, bypass?, lock?, display?, render?, viewer?, current?, expose?, allowCooking?, selected? |
Set one or more flags on an operator |
Positioning & Layout
| Tool |
Parameters |
Description |
get_op_position |
op_path |
Get operator position, size, color, and comment |
set_op_position |
op_path, x?, y?, width?, height?, color?, comment? |
Set operator position, size, color ([r,g,b] floats 0-1), or comment |
layout_children |
op_path |
Auto-layout all children in a COMP |
Annotations
| Tool |
Parameters |
Description |
create_annotation |
parent_path, mode?, text?, title?, x?, y?, width?, height?, color?, opacity?, name? |
Create an annotation. Modes: "annotate" (default, has title bar), "comment", "networkbox" |
get_annotations |
parent_path |
List all annotations in a COMP with their properties and enclosed operators |
set_annotation |
op_path, text?, title?, color?, opacity?, width?, height?, x?, y? |
Modify properties of an existing annotation |
get_enclosed_ops |
op_path |
Get operators enclosed by an annotation, or annotations enclosing an operator |
Connections
| Tool |
Parameters |
Description |
connect_ops |
source_path, dest_path, source_index?, dest_index?, comp? |
Wire two operators together. Set comp=True for COMP connectors (top/bottom) |
disconnect_op |
op_path, input_index?, comp? |
Disconnect an operator's input. Set comp=True for COMP connectors (top/bottom) |
get_connections |
op_path |
Get all input/output connections (includes COMP connections for COMPs) |
| Tool |
Parameters |
Description |
get_op_performance |
op_path, include_children? |
Get CPU/GPU cook times, memory usage, cook counts |
Code Execution
| Tool |
Parameters |
Description |
execute_python |
code |
Execute Python code in TD. Set result variable to return values |
Introspection & Diagnostics
| Tool |
Parameters |
Description |
get_td_info |
(none) |
Get TD version, build, OS, and Envoy version |
get_op_errors |
op_path, recurse? |
Get error messages for an operator and its children |
exec_op_method |
op_path, method, args?, kwargs? |
Call a method on an operator (e.g., appendRow, cook) |
get_td_classes |
(none) |
List all Python classes/modules in the td module |
get_td_class_details |
class_name |
Get methods, properties, and docs for a TD class |
get_module_help |
module_name |
Get Python help text for a module (supports dotted names like td.tdu) |
Embody Integration
| Tool |
Parameters |
Description |
tag_for_externalization |
op_path, tag_type? |
Tag operator for externalization (auto-detects type if omitted) |
remove_externalization_tag |
op_path |
Remove externalization tag |
get_externalizations |
(none) |
List all externalized operators with status |
save_externalization |
op_path |
Force save an externalized operator to disk |
get_externalization_status |
op_path |
Get dirty state, build number, timestamp, file path |
| Tool |
Parameters |
Description |
export_network |
root_path?, include_dat_content?, output_file?, max_depth? |
Export network to .tdn JSON (non-default properties only) |
import_network |
target_path, tdn, clear_first? |
Recreate a network from .tdn JSON |
Logging
| Tool |
Parameters |
Description |
get_logs |
level?, count?, since_id?, source? |
Get recent log entries from ring buffer. Filter by level, source, or use since_id for incremental polling |
run_tests |
suite_name?, test_name? |
Run test suites and return results |
Auto-piggybacked logs
Every MCP tool response includes a _logs field with up to 20 log entries generated since the previous tool call. This lets you monitor operations in real-time without needing to call get_logs separately.
MCP Prompts
| Prompt |
Parameters |
Description |
search_op |
op_name, op_type? |
Guide for searching operators by name |
check_op_errors |
op_path |
Guide for inspecting and resolving operator errors |
connect_ops |
(none) |
Guide for wiring operators together |
create_extension_guide |
(none) |
Guide for creating TD extensions with proper patterns |