TouchDesigner MCP server. Build real TouchDesigner visual systems from plain language with Claude, Cursor, or Codex (Model Context Protocol).
tdmcp demonstrates strong definition quality across 38 tools with consistent verb-noun naming, comprehensive parameter schemas, and clear descriptions. Most tools are READ_ONLY (27), with 11 WRITE/DESTRUCTIVE tools clearly marked. All 38 tools have descriptions (average ~120 chars, within rubric baseline of 194). All tools have typed input schemas with parameter descriptions. However, output schemas are not explicitly documented in the source code, only tool names and input schemas are visible. Tool #37 (project_rag_search) and #38 (invoke_registered_prompt) show particularly strong parameter documentation with array filters and enum constraints. Error handling guidance is implicit but not explicitly stated in source. Security risk annotations (destructiveHint) are present via the Risk field. Composition is strong, tools chain naturally (e.g., search → get details → update). No tool combines multiple responsibilities. Overall, the server exhibits B+ to A− quality on naming and parameter definition, but lack of visible output schema documentation and explicit error recovery guidance prevents an A rating.
Tiny, token-bounded structural summary of a network (families + output chain + grouped errors) — pick this first for small LLM context.
Compare two operator types from the offline knowledge base, including shared and unique documented parameters.
Diff two nodes' parameters to see what differs.
Wire one node's output to another node's input.
Build a complete audio-reactive visual system with wired audio input, analysis, and effect chain.
Build a feedback/recursive visual system with wired delays and scaling.
Build a complete generative visual system with animation and interaction controls.
Output schemas not documented in source code. While input schemas are complete, no explicit documentation of what each tool returns is visible. LLMs cannot plan downstream tool calls or extract required fields without knowing the response structure.
Error handling and recovery guidance not explicitly stated in tool descriptions. No indication of what errors each tool may raise, what causes them, or how to recover. Descriptions lack phrases like 'Returns error if node not found; try search_td_nodes()' or 'Retryable on timeout.'
Destructive tools (delete_td_node, create_td_node, update_td_node_parameters) lack explicit confirmation-request or dry-run pattern. No description suggests a preview or safety step before irreversible operations. Agents may accidentally delete nodes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 74 | 2025-06-18+ | v2 |
Create a new operator node with optional initial parameters.
Delete a node and recursively remove all its children.
Preflight a physical installation: bridge, display/projector topology, and generated sensor/helper status DATs.
Draft a RecipeSchema-valid recipe JSON from an operator chain without writing files or touching TouchDesigner.
Draft a RecipeSchema-valid GLSL recipe JSON from an embedded TouchDesigner technique without writing files.
Draft a RecipeSchema recipe JSON from a TouchDesigner tutorial without writing files.
Search the project for nodes by name pattern and/or operator type.
Read compact active Network Editor, selection, rollover, viewport and perform-mode context.
Get one operator's common inputs, outputs, examples, and next-operator suggestions (offline).
Get detailed reference docs for a TouchDesigner class, including parameters, common patterns, and examples (offline).
List TouchDesigner operator/class objects and their type hierarchy (offline).
Health check: confirm the TouchDesigner bridge is reachable and report TD/bridge versions.
Check a node or network for errors and warnings.
Read one node's current parameter values.
List the direct child nodes of an explicit COMP path.
Map the nodes and their connections in a network.
Inspect embedded TouchDesigner technique packs and techniques, optionally including code/setup details (offline).
Fetch and parse TouchDesigner built-in tutorials by name (offline).
Invoke a registered prompt template with arguments and receive rendered output.
Browse available TouchDesigner recipes, filtered by category, tags, or search.
Store and retrieve a persistent project brief/mood/visual direction.
Analyze a TouchDesigner project for version compatibility issues and suggest migration steps.
Search the local Project RAG repertoire (TouchDesigner projects, components, snippets) for real examples of an effect or technique. Read-only; every result includes provenance + license + rights notes.
Search the 629-operator knowledge base by keyword to find the right operator type (offline).
Search the offline TouchDesigner Python API for classes, methods, attributes and examples.
Search authored DAT text and parameter expressions with bounded redacted excerpts.
Search the offline TouchDesigner knowledge base (FAQs, tips, best practices).
Suggest a read-only TouchDesigner operator chain for a creative or technical goal from offline docs.
Cluster a network's errors by likely cause.
Update one or more parameters on a node.
Validate an ordered TouchDesigner operator chain against offline docs, connection hints, family filters, and version compatibility.
Some parameter descriptions are generic or lack specific constraints. E.g., 'search query' in search_td_code does not explain regex vs glob, case sensitivity, or scope (code text only vs expressions). Compare to search_operators which also says 'Search query' without further detail.
Parameter 'name' in create_td_node is marked optional with 'auto-generated if omitted', but no hint on the naming convention or pattern. What happens if the user passes an invalid character? How are auto-generated names formatted?
Several tools accept arrays (operators in validate_operator_chain, suggest_operator_chain; tags/license in project_rag_search) but do not document min/max array size. Can an agent pass 1000 operators? How many results in k parameter?