High-performance MCP server for TouchDesigner — live control via WebSocket
20 tools with consistent naming (verb_noun pattern: td_create_node, td_delete_node, etc.). All have descriptions (avg ~80 chars, baseline 194). Input schemas present with type definitions and parameter descriptions. However, output schemas are NOT documented in the visible code, critical gap for LLM planning. Error handling exists (MCPError class in bridge) but recovery guidance is minimal. No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). Parameter descriptions are adequate but lack format constraints (e.g., path format, enum values for family/direction). Batch tool (td_batch) accepts raw JSON strings instead of structured params, increasing injection risk.
Align a group of TouchDesigner nodes in the network editor.
Execute multiple TouchDesigner operations in a single WebSocket round-trip.
Copy a node (with all its parameters) to a new location.
Wire two TouchDesigner nodes together.
Create a new operator node in TouchDesigner.
Disconnect a wire from a node's input or output connector.
Delete an operator node from the TouchDesigner network.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., node IDs for chaining). td_get_node, td_list_nodes, td_read_* tools lack return type documentation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification. Agents cannot distinguish safe reads from destructive writes without parsing descriptions.
td_batch accepts raw JSON strings for operations/params instead of structured objects. Increases injection risk and forces LLMs to construct JSON manually, error-prone.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
Search for nodes matching criteria recursively.
List all input and output connections for a TouchDesigner node.
Get errors and warnings for a node.
Get detailed information about a TouchDesigner node.
List child nodes under a path, optionally filtered by operator family.
Read channel data from a CHOP (Channel Operator) node.
Read text or table data from a DAT (Data Operator) node.
Read geometry data from a SOP (Surface Operator) node.
Read pixel data from a TOP (Texture Operator) node as base64-encoded image data.
Rename a node without destroying it.
Set display, render, and/or bypass flags on a node.
Set the network-editor position of one or more TouchDesigner nodes.
Write text or table data to a DAT node.
Parameter descriptions lack format constraints. 'path' params have no documented format (e.g., must start with '/', no spaces). 'family' param lists enum values in description instead of formal enum constraint.
Error responses from command_router.py use error codes (NODE_NOT_FOUND, PARAMETER_ERROR) but lack recovery guidance. 'Unknown method' error does not suggest available methods or next steps.