td-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@td-mcpcreate a new constant CHOP at the root"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
td-mcp
MCP (Model Context Protocol) server for controlling TouchDesigner from AI coding agents like Claude Code and Codex CLI.
Setup
1. TouchDesigner Side
Install the callbacks file into your TD project:
cd /path/to/your-td-project uvx td-mcp installCreate a WebServer DAT in TouchDesigner
Set Port to
9980Set the WebServer DAT's callbacks File parameter to
td_mcp_callbacks.pyToggle Active ON
2. Agent Side
Claude Code (.mcp.json)
{
"mcpServers": {
"touchdesigner": {
"command": "uvx",
"args": ["td-mcp"],
"env": {
"TD_HOST": "127.0.0.1",
"TD_PORT": "9980"
}
}
}
}Codex CLI
codex mcp add touchdesigner \
--env TD_HOST=127.0.0.1 \
--env TD_PORT=9980 \
-- uvx td-mcpRelated MCP server: touchdesigner-mcp
Tools
Tool | Description |
| Get project root path (call first) |
| Create an operator |
| Delete an operator |
| List child operators |
| Get operator info |
| Set parameters (batch) |
| Get parameters (with schema discovery) |
| Connect operators |
| Disconnect operators |
| Find empty space in network editor |
| Execute Python code in TD |
| Capture TOP screenshot |
Environment Variables
Variable | Default | Description |
|
| TouchDesigner host |
|
| WebServer DAT port |
|
| Request timeout (seconds) |
Architecture
AI Agent → MCP Server (stdio) → HTTP Client → TouchDesigner WebServer DATSecurity Note
td_execute allows arbitrary Python execution inside TouchDesigner. Use only in trusted local environments.
License
MIT
Available Tools
12 toolstd_connectC
Connect two operators.
Args: from_op: Source operator path to_op: Destination operator path from_index: Output connector index on source (default 0) to_index: Input connector index on destination (default 0)
| Name | Required | Description | Default |
|---|---|---|---|
| to_op | Yes | ||
| from_op | Yes | ||
| to_index | No | ||
| from_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It merely restates the function as 'Connect two operators' with no mention of side effects, permissions, or reversibility, which is insufficient for an agent to understand the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a single sentence followed by a structured argument list. However, the main description is extremely brief and could be more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description fails to provide sufficient context about the connection process, such as whether operators must exist or be compatible, or what the result of the operation is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The argument list in the description adds meaningful context beyond the schema, explaining that 'from_op' is a source operator path and 'to_op' is a destination path, with indices for connectors. This compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Connect two operators' is clear and specific, using a verb and resource. It distinguishes from siblings like td_disconnect and td_get_op_info, though it could be more precise about the nature of the connection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, preconditions, or when not to use it, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_create_opA
Create a new operator in TouchDesigner.
Args: parent: Parent path (e.g. "/project1") op_type: TD operator class name (e.g. "noiseCHOP", "constantTOP", "textDAT") name: Optional name for the new operator params: Optional dict of parameters to set immediately after creation nodeX: Optional X position in the network editor. Use td_find_empty_space to get a non-overlapping position. nodeY: Optional Y position in the network editor. Use td_find_empty_space to get a non-overlapping position.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| nodeX | No | ||
| nodeY | No | ||
| params | No | ||
| parent | Yes | ||
| op_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It explains the purpose of each parameter but does not mention side effects (e.g., does it trigger events?), error cases (e.g., invalid op_type), or reversibility. The basic creation action is implied but not fully detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured as a docstring with an Args section, which is clear. It is relatively concise but includes examples and usage hints that earn their place. A few phrases could be trimmed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (2 required), no output schema, and no annotations, the description provides good detail. It explains each parameter and references a sibling tool for positioning. However, it lacks error handling info or return value details (though not required). It feels mostly complete for a creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries full burden. It adds meaning by explaining each parameter: parent (path), op_type (class name with examples), name (optional), params (optional dict), nodeX/nodeY (positions with sibling recommendation). This goes well beyond the schema which only shows types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Create a new operator' and the context 'in TouchDesigner'. It specifies the verb and resource, and distinguishes from sibling tools like td_delete_op (delete) and td_get_op_info (get info). The examples of op_type help clarify the kind of resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use td_find_empty_space for nodeX/nodeY, giving a clear alternative for positioning. However, it does not explicitly state when not to use this tool, such as for parameter updates (use td_set_params) or other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_delete_opA
Delete an operator.
Args: path: Full path of the operator to delete (e.g. "/project1/noise1")
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only states 'Delete an operator' without disclosing side effects, reversibility, or consequences (e.g., impact on connections). This is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for the action and one line for the parameter. It is front-loaded ('Delete') and every part earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool, the description covers the basic action and parameter. However, it lacks information about return values, error handling, or success confirmation, which is a gap given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% coverage for the 'path' parameter. The description compensates by explaining it is the full path and giving an example ('/project1/noise1'), adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes an operator, a specific verb+resource. It distinguishes from sibling tools like td_create_op (create) and td_get_op_info (get info), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, such as td_disconnect or td_set_params. It does not specify prerequisites or when deletion is appropriate, leaving the agent without contextual direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_disconnectA
Disconnect an operator's connector.
Args: path: Operator path connector: "input" or "output" (default "input") index: Connector index (default 0)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| index | No | ||
| connector | No | input |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond the basic action. There is no mention of side effects, permissions, or reversibility. The description carries the full burden but falls short.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with a front-loaded purpose statement followed by a clear parameter list. Every word is necessary and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and no output schema, the description adequately explains the action and parameters. However, it lacks information about return values or what happens upon disconnection, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description adds meaningful parameter details: path is an operator path, connector defaults to 'input' with allowed values, and index defaults to 0. This goes beyond the schema's type and default information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Disconnect' and the resource 'operator's connector.' It is specific and distinguishes from sibling tools like td_connect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but provides no guidance on when to use it versus alternatives (e.g., td_connect, td_delete_op). Usage is only implied through the action verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_executeC
Execute Python code inside TouchDesigner.
Args: code: Python code to execute in TD's main thread return_expression: Optional expression to evaluate and return after execution
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| return_expression | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'execution in TD's main thread' but omits other behavioral traits like whether it is synchronous, error behavior, or permission requirements. This is insufficient for a code execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) and front-loaded with the main action. However, it lacks structure or additional sections (e.g., return value description) that would be helpful for such a tool. It is concise but not optimally structured for completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should compensate with details about behavior (e.g., error handling, blocking nature, side effects). It does not, leaving the agent underinformed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds value by explaining the 'code' parameter as 'Python code to execute in TD's main thread' and 'return_expression' as 'Optional expression to evaluate and return'. This clarifies the purpose beyond the schema's type-only definition, but it does not detail expected formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute Python code inside TouchDesigner', which is a specific verb and resource. It distinguishes this tool from siblings like td_delete_op or td_get_root, all of which have different purposes. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool vs alternatives, prerequisites, or context. For a code execution tool, it's critical to mention safety or error handling, but none is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_find_empty_spaceA
Find an empty (non-overlapping) position for a new operator in the network editor.
Returns nodeX, nodeY coordinates that can be passed directly to td_create_op.
Args: parent: Parent path to search in (e.g. "/project1") width: Estimated width of the new operator (default 200) height: Estimated height of the new operator (default 200) direction: Placement strategy — "right" (next to rightmost op), "below" (under bottommost op), or "grid" (find first free slot in grid scan) padding: Minimum gap between operators (default 50)
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| height | No | ||
| parent | Yes | ||
| padding | No | ||
| direction | No | right |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the tool finds non-overlapping positions and the direction strategy, but does not explicitly state that it does not modify the network or mention any side effects, authentication needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a brief summary sentence, followed by return value clarification, then a clear Args block listing parameters. No unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 parameters and no output schema, the description covers all parameters and the return concept. It could be improved by specifying the exact return type (e.g., a dict with nodeX/nodeY) and handling of edge cases like no space found, but overall it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning the schema properties lack descriptions. The description compensates fully with an Args block that explains each parameter (parent, width, height, direction, padding) including defaults and allowed values for direction (right, below, grid).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Find' and resource 'empty position', clearly differentiating from sibling tools like td_create_op which creates the operator. It explicitly states the tool's purpose and outputs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Returns nodeX, nodeY coordinates that can be passed directly to td_create_op', indicating when to use this tool (before creation). It describes direction strategies but does not explicitly state when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_get_op_infoA
Get info about an operator. Returns minimal fields by default for token efficiency.
Args: path: Operator path fields: Fields to return (default: name, type, family). Available: name, type, family, path, inputs, outputs, numChildren, comment, storage, tags, nodeX, nodeY
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains default return fields and available options, indicating read-only behavior. No contradictions, but could mention that it does not modify state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a list of args—efficient and front-loaded with core purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple get tool but could be more complete: no explanation of path structure, no example, and no output schema description. Still covers essential behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds meaning: path is operator path, fields is array of field names with default list. However, it lacks details like path format and field semantics (e.g., nodeX meaning).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get info about an operator', specifying the verb and resource. It distinguishes from sibling tools like td_delete_op (deletion) and td_get_root (root retrieval).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'token efficiency' and default minimal fields, implying use for lightweight info, but does not explicitly state when to use or avoid this tool versus alternatives like td_get_params or other get operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_get_paramsA
Get parameters from an operator. Returns only non-default values by default for token efficiency.
Args: path: Operator path names: Specific parameter names to retrieve (returns all values including defaults) pattern: Glob pattern to filter parameter names (e.g. "noise*") discover: If true, returns rich schema per parameter (value, default, type, min, max, page, menuNames). Use this to discover available parameter names and their types for an unfamiliar operator. page: Page number for paginated results (50 params per page)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| path | Yes | ||
| names | No | ||
| pattern | No | ||
| discover | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does well by explaining the default behavior (non-default values for token efficiency), pagination (50 params per page), and the discover mode returning rich schema. It does not explicitly state read-only nature but infers it from 'get' semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a short opening sentence and an Args list. It is front-loaded with the primary purpose and avoids unnecessary verbosity, making it easy for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers core functionality, pagination, and discovery mode well, but lacks specification of the return format (e.g., structure of response) and error handling. Given no output schema, these details would complete the picture for robust agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by explaining each parameter's effect: names returns all values, pattern uses glob, discover enables rich output, page controls pagination. These add meaning beyond the schema's titles and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves parameters from an operator, specifying that it returns only non-default values by default. This is distinct from sibling tools like td_set_params (set) and td_get_op_info (operator info), providing a clear verb+resource identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes guidance for the discover parameter to explore unfamiliar operators, but does not provide explicit when-to-use or when-to-avoid comparisons with sibling tools like td_get_op_info. This leaves some ambiguity for an AI agent to decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_get_rootA
Get the actual project root path. Call this FIRST before using any other tool that requires a path.
Returns the path of the top-level project COMP (e.g. "/project1" or whatever the user named it). Do not assume "/project1" — always discover the real path with this tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses the return value (path) and usage order. It does not detail potential side effects or authentication needs, but for a simple getter this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: purpose, usage instruction, and return value. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and straightforward purpose, the description fully covers what the tool does, when to use it, and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. Per guidelines, baseline score for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the actual project root path.' It uses a specific verb and resource, and distinguishes it from siblings which deal with operations, parameters, or connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'Call this FIRST before using any other tool that requires a path' and warns not to assume a fixed path, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_get_screenshotA
Get a screenshot of a TOP operator as base64 image.
Args: path: Path to a TOP operator width: Output width in pixels (default 640, height auto-scaled) format: Image format — "jpeg" (default, smaller) or "png"
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| width | No | ||
| format | No | jpeg |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It implies a safe read operation but does not disclose error behavior, permissions, or side effects. The description lacks details on what happens if the path is invalid or if the image generation fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a one-sentence summary followed by a clean args list. No redundant information, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (3 parameters, no output schema, no annotations), the description covers the core behavior and parameters. However, it lacks details about the return format (base64 string) and error cases, which would be helpful for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains each parameter beyond the schema: path is a path to a TOP operator, width includes default and note that height is auto-scaled, format includes default and comparison of file sizes. This adds significant value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a screenshot of a TOP operator as base64 image.' The verb 'get' and resource 'screenshot of a TOP operator' are specific and distinct from siblings like td_delete_op or td_get_op_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. There is no mention of prerequisites or exclusions. The description only lists arguments, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_list_opsA
List child operators with optional filtering and pagination.
Args: path: Parent path to list children of family: Filter by family (CHOP, TOP, SOP, DAT, COMP, MAT) type_filter: Filter by specific type name fields: Fields to return per op (default: name, type, family) limit: Max results (default 50) offset: Skip first N results
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| family | No | ||
| fields | No | ||
| offset | No | ||
| type_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose behavioral traits. It does not state whether the operation is read-only, what side effects exist, or any authorization needs. It only describes parameters and core action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured as a docstring with an Args section. Every sentence serves a purpose, with no unnecessary words. A slight dock for not being front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, filtering, and pagination. However, given 6 parameters and no output schema, it lacks details on return format, error handling, or the meaning of 'child' hierarchy. Adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaningful explanations for each parameter (e.g., 'Parent path to list children of', 'Filter by family'). This adds value beyond the schema's titles. However, it does not provide examples or detailed formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists child operators with filtering and pagination. It uses a specific verb ('list') and resource ('child operators'), and distinguishes from siblings like td_get_op_info (single op info) and td_create_op (creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing ops with filtering, but does not explicitly state when to use this tool vs alternatives (e.g., when to use td_get_root or td_find_empty_space). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
td_set_paramsA
Set multiple parameters on an operator in a single batch call.
Args: path: Operator path params: Dict of parameter names to values (e.g. {"roughness": 0.5, "seed": 42})
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states the tool performs a write operation but does not mention side effects (e.g., overwriting vs. merging), validation, error conditions, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (4 lines) with a clear purpose and structured Args section. Every sentence is necessary and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description is minimally adequate but lacks behavioral transparency and usage context. It does not mention its relationship to td_get_params or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage, so the description must compensate. It defines 'path' as 'Operator path' and 'params' as 'Dict of parameter names to values' with an example, adding meaning beyond the schema's bare object type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Set multiple parameters on an operator in a single batch call,' specifying the verb (set), resource (operator), and distinction from siblings like td_get_params, td_create_op, and td_delete_op.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., a hypothetical single-parameter setter) or prerequisites (e.g., operator existence). The description only explains what the tool does, not when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.3- First observed
td_connect - First observed
td_create_op - First observed
td_delete_op - First observed
td_disconnect - First observed
td_execute - First observed
td_find_empty_space - First observed
td_get_op_info - First observed
td_get_params - First observed
td_get_root - First observed
td_get_screenshot - First observed
td_list_ops - First observed
td_set_params
TDQS
Scored across 12 tools
Each tool targets a distinct operation: delete, create, list, get info, set/get parameters, connect/disconnect, execute code, screenshot, and utility functions like find_empty_space and get_root. No overlapping purposes; the distinction between get_op_info and get_params is clear (metadata vs parameters).
All tools use the td_ prefix and mostly follow a verb_noun pattern (e.g., td_delete_op, td_create_op, td_get_params). However, td_connect and td_disconnect lack a noun (they connect/disconnect operators, but the name omits the object), and td_get_root is a compound verb_noun but with a different structure. Minor inconsistencies.
12 tools is well-scoped for a TouchDesigner server. It covers the essential operations without being overwhelming. Each tool serves a clear purpose and none appear superfluous.
The set covers core CRUD for operators, parameter management, connections, code execution, and screenshots. Minor gaps exist: no explicit rename or move operator tool, and no recursive list tool. However, these can be worked around (rename via delete+create, move implied by delete+create, recursion via repeated list_ops).
Maintenance
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseAqualityFmaintenanceAn MCP server for TouchDesigner that lets you control TouchDesigner with Claude5MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that lets Claude drive a running TouchDesigner instance to create operators, wire them, set parameters, run arbitrary Python, and introspect the td API.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server + web dashboard for TouchDesigner. Inspect, optimize, and control TD patches from Claude Code or the browser.MIT
- AlicenseNot gradedqualityBmaintenanceA local-first MCP server for TouchDesigner that provides offline documentation retrieval and live control of TouchDesigner sessions, enabling AI-assisted network building and parameter management.MIT