TouchDesigner MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_operatorB | Get comprehensive details about a specific TouchDesigner operator. Optionally pass a TouchDesigner version to see compatibility notes for that release. |
| search_operatorsA | Search for operators using advanced contextual analysis and ranking. Supports multi-term queries, category/subcategory filtering, parameter search, typo tolerance, search type selection (exact/fuzzy/tag), and optional TouchDesigner version compatibility filtering. |
| suggest_workflowA | Get workflow suggestions for what operators commonly follow the current operator. Returns connection port instructions (e.g., 'output 0 -> input 0'), complexity rating (simple/medium/complex), estimated node count for the full workflow, and minimum TD version required. |
| list_operatorsC | List available TouchDesigner operators with contextual grouping |
| get_tutorialB | Get detailed content from a TouchDesigner tutorial |
| list_tutorialsB | List available TouchDesigner tutorials with summaries |
| get_python_apiA | Get documentation for a TouchDesigner Python class. Optionally filter to show only API available in a specific TD version. |
| search_python_apiA | Search across TouchDesigner Python classes, methods, and members. Optionally filter by TouchDesigner version to see only API available in that release. |
| search_tutorialsC | Search through TouchDesigner tutorials by keyword, topic, or content |
| get_operator_examplesB | Get Python code examples, expressions, and usage patterns for a specific TouchDesigner operator |
| list_python_classesA | List all available TouchDesigner Python API classes, optionally filtered by category |
| compare_operatorsB | Compare two TouchDesigner operators side by side - parameters, categories, and use cases |
| get_version_infoA | Get detailed information about a specific TouchDesigner version including Python version, new operators, key features, and API changes. |
| list_versionsB | List all supported TouchDesigner versions with Python versions, support status, and key feature highlights for each release. |
| get_experimental_techniquesA | Browse TouchDesigner experimental techniques by category. Categories: glsl, gpu-compute, machine-learning, generative-systems, audio-visual, networking, python-advanced. Returns technique descriptions, code snippets, operator chains, and setup notes. |
| search_experimentalB | Search across all TouchDesigner experimental technique categories. Finds techniques by keyword, operator name, tag, or code pattern across GLSL, GPU compute, machine learning, generative systems, audio-visual, networking, and advanced Python. |
| get_glsl_patternA | Retrieve specific GLSL shader patterns or GPU technique code snippets with full code ready to paste into a TouchDesigner GLSL TOP. Also provides common GLSL utility libraries. Use 'list' to see all available patterns. |
| get_operator_connectionsA | Returns the typical upstream inputs, downstream outputs, and common operator chains for a named TouchDesigner operator. Includes connection port instructions (e.g., 'A output 0 -> B input 0') so you know exactly how to wire nodes together. |
| get_network_templateA | Returns a full TouchDesigner network template for a common use case. Each template includes the operator list, wire connections with port numbers, parameter settings, ready-to-paste Python scripts, and setup tips. Available templates: video-player, generative-art, audio-reactive, data-visualization, live-performance. |
| get_experimental_buildA | Returns information about a TouchDesigner experimental/beta build series. Experimental builds are pre-release tracks that contain new features not yet available in stable releases. You can request a specific series ID (e.g. '2025.30000') or omit the parameter to get the latest experimental series. Response includes: new features, experimental operators, breaking changes versus the stable baseline, and Python API additions. |
| list_experimental_buildsA | Lists recent TouchDesigner experimental/beta build series grouped by feature area. Feature areas: rendering, Python API, operators, UI, networking. Each entry shows the series ID, build range, stability status, and headline features. Use get_experimental_build with a series_id for full details on any individual series. |
| td_statusA | Check whether the live-control TouchDesigner bridge is reachable and the configured token is accepted. Returns a short status report, or an install/setup hint when the bridge cannot be reached. Reads connection settings from TD_MCP_HOST, TD_MCP_PORT and TD_MCP_TOKEN. |
| td_create_operatorA | Create a new operator inside a parent COMP in a running TouchDesigner instance (live control via the td_mcp bridge). Wraps the documented COMP.create(opType, name) call. |
| td_set_parameterA | Set a parameter on an operator in a running TouchDesigner instance (live control via the td_mcp bridge). Drives the documented op.par.NAME.val (value), op.par.NAME.expr (expr) and op.par.NAME.pulse() members. |
| td_connectA | Connect one operator's output to another operator's input in a running TouchDesigner instance (live control via the td_mcp bridge). Wraps the documented Connector.connect() call (op(to).inputConnectors[toIn].connect(op(from).outputConnectors[fromOut])). |
| td_deleteA | Delete (destroy) an operator in a running TouchDesigner instance (live control via the td_mcp bridge). Wraps the documented op.destroy() call. This permanently removes the operator and any of its children. Target a path inside '/td_mcp/sandbox' to stay within the safe work area. |
| td_list_networkA | List the operators inside a TouchDesigner network (a parent COMP). Returns each child's path, type, node position, input/output counts and error counts. Defaults to the live-control sandbox COMP (/td_mcp/sandbox). Requires the TouchDesigner bridge to be running (see td_status). |
| td_clearA | Delete every operator inside the live-control sandbox COMP. Only clears operators within the sandbox (default /td_mcp/sandbox) — it will not touch the rest of your TouchDesigner project. Requires the TouchDesigner bridge to be running (see td_status). |
| td_layoutA | Auto-arrange the operators inside a TouchDesigner network so the node graph is tidy and readable. Operates on the sandbox COMP by default (/td_mcp/sandbox). Requires the TouchDesigner bridge to be running (see td_status). |
| td_get_errorsA | Read cook errors, warnings, and script errors from an operator in a running TouchDesigner instance (live control via the td_mcp bridge). Returns the documented op.errors()/op.warnings()/op.scriptErrors() output. Use this to diagnose why a node is not cooking after a build/edit. |
| td_set_resolutionA | Set the output resolution (width x height in pixels) of a TOP in a running TouchDesigner instance (live control via the td_mcp bridge). Targets a TOP's documented resolution parameters. |
| td_renderA | Render the current frame of a TOP in a running TouchDesigner instance and return the image so the assistant can see the result (live control via the td_mcp bridge). Uses the documented TOP.saveByteArray() call. Use this after building/editing a network to visually verify the output. |
| td_sampleA | Sample a single value from an operator in a running TouchDesigner instance (live control via the td_mcp bridge). kind='chop_channel' reads a CHOP channel via CHOP.chan(name); kind='top_pixel' reads a pixel via TOP.sample(u, v). Use this to verify concrete output values without rendering a full frame. |
| td_build_templateA | COMPILE a named TouchDesigner network template into a running TouchDesigner instance via the td_mcp bridge: it creates every operator, sets the template parameters, wires the connections (port-level), and lays out the network. Templates: video-player, generative-art, audio-reactive, data-visualization, live-performance (aliases like 'feedback loop', 'vj', 'data viz' accepted). Builds into the sandbox COMP by default (/td_mcp/sandbox). STRICT: if any operator type or parameter name cannot be resolved against the operator map, it fails and lists what is missing instead of guessing. Requires the bridge to be running (see td_status). |
| td_build_patternA | COMPILE a linear workflow pattern from data/patterns.json into a running TouchDesigner instance via the td_mcp bridge. It creates each operator in the pattern's workflow order and wires them as a STRAIGHT CHAIN (each op's output 0 into the next op's input 0), then lays out the network. LIMITATION: this only builds LINEAR SINGLE-INPUT chains — patterns.json carries no port/branch data, so multi-input nodes (Composite, Switch, Merge, Render, etc.) are NOT branch-wired; use td_build_template for branched networks. Builds into the sandbox COMP by default (/td_mcp/sandbox). STRICT: hard-errors if any operator name has no createType in the operator map. Requires the bridge (see td_status). |
| td_build_glslA | COMPILE a GLSL shader technique from the experimental GLSL knowledge base into a running TouchDesigner instance via the td_mcp bridge. For a SUPPORTED technique (its setup block has machine-readable operators + uniforms) it creates a Text DAT with the shader, a GLSL TOP pointed at that DAT, declares the uniforms, creates supporting operators and lays out. For an UNSUPPORTED technique (multi-pass/feedback systems needing hand wiring) it returns the shader code plus an explanation and does NOT fabricate connections. Builds into the sandbox COMP by default (/td_mcp/sandbox). Use technique:'list' to enumerate. Requires the bridge (see td_status). |
| td_run_pythonA | Run ARBITRARY Python code inside a running TouchDesigner instance via the td_mcp bridge. WARNING: this is arbitrary code execution with full access to the TouchDesigner project and the host Python environment. It is DISABLED BY DEFAULT and only succeeds when the bridge's "Allow Python" flag is explicitly turned on; otherwise the bridge rejects the request. Prefer the structured live-control tools (td_build_template, td_set_parameter, td_connect, td_list_network, ...) for normal operations and only use this for ad-hoc Python that those cannot express. Returns stdout / the returned value plus any errors, warnings and scriptErrors from the bridge. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bottobot/touchdesigner-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server