Touch
FreeNot checkedHigh-performance MCP server that enables AI assistants to control TouchDesigner live via WebSocket, providing 37 tools for nodes, parameters, scripting, and mor
About
High-performance MCP server that enables AI assistants to control TouchDesigner live via WebSocket, providing 37 tools for nodes, parameters, scripting, and more.
README
High-performance MCP server for TouchDesigner — live control via WebSocket from any MCP-compatible AI (Claude, etc.)
Claude/LLM ←── stdio (MCP) ──→ touch-mcp ←── WebSocket ──→ TouchDesigner (.tox)
Why touch-mcp
The most comprehensive MCP server for TouchDesigner available. Unlike simpler alternatives, touch-mcp offers:
- Persistent WebSocket connection — every tool call is a lightweight message, not a full HTTP round-trip
- 37 tools covering nodes, parameters, connections, data access, scripting, timeline, rendering, layout, and more
- Batching — bundle multiple operations into a single round-trip with
td_batch, critical for building complex networks fast - Auto-reconnection — survives TD restarts and network hiccups
- Auto-positioning — new nodes are placed intelligently in the network editor
- Full Python access — execute arbitrary Python inside TD with
td_execute_script, with access to all operator types and globals
Quick Start
1. Install touch-mcp
pip install touch-mcp
Or from source:
git clone https://github.com/benoitliard/touch-mcp.git
cd touch-mcp
pip install -e ".[dev]"
2. Install the TouchDesigner bridge component
Open TouchDesigner (2024+), then drag TouchMCPBridge.tox from the td/ folder into your project. The component starts a WebSocket server on port 9980 automatically.
For instructions on building the .tox from source, see td/BUILD_TOX.md.
3. Configure your MCP client
See the configuration sections below, then start a conversation — touch-mcp connects to TouchDesigner on first use.
Configuration
Claude Desktop
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"touchdesigner": {
"command": "touch-mcp",
"args": ["--td-port", "9980"]
}
}
}
The config file is located at:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Claude Code
Create or edit .mcp.json in your project root:
{
"mcpServers": {
"touchdesigner": {
"command": "touch-mcp",
"args": ["--td-host", "localhost", "--td-port", "9980", "--timeout", "30"]
}
}
}
Available Tools
37 tools organised by category.
Nodes
| Tool | Description |
|---|---|
td_create_node |
Create a new operator node (auto-positioned in the network) |
td_delete_node |
Delete a node and all its children |
td_list_nodes |
List child nodes under a path, optionally filtered by family |
td_get_node |
Get detailed metadata for a node (type, position, connections) |
td_copy_node |
Copy a node with all its parameters to a new location |
td_rename_node |
Rename a node without destroying it |
td_find_nodes |
Search for nodes by name, type, or family recursively |
td_get_errors |
Get errors and warnings for a node (and optionally its children) |
td_set_flags |
Set display, render, and/or bypass flags on a node |
Parameters
| Tool | Description |
|---|---|
td_get_parameters |
Read current parameter values for a node |
td_set_parameters |
Set one or more parameter values on a node |
td_get_parameter_info |
Get parameter schema (style, range, menu options, defaults) |
td_set_expression |
Set a parameter to expression mode with a Python expression |
td_pulse_parameter |
Pulse a parameter (trigger reload, reset, etc.) |
Connections
| Tool | Description |
|---|---|
td_create_connection |
Wire two nodes together by output and input index |
td_delete_connection |
Disconnect a node's input or output connector |
td_get_connections |
List all wires entering and leaving a node |
Data
| Tool | Description |
|---|---|
td_read_chop |
Read channel sample data from a CHOP node |
td_read_top |
Read TOP metadata (resolution, aspect) |
td_read_sop |
Read point and primitive geometry from a SOP node |
td_read_dat |
Read text or table contents from a DAT node |
td_write_dat |
Write text or append rows to a DAT node |
Scripts
| Tool | Description |
|---|---|
td_execute_script |
Execute arbitrary Python inside the live TouchDesigner instance |
td_class_list |
List all TD Python classes available in the environment |
td_class_detail |
Inspect methods and properties of a TD Python class |
td_module_help |
Get help() output for any TD Python module |
Timeline
| Tool | Description |
|---|---|
td_timeline_get |
Get the current timeline state (frame, fps, range, loop) |
td_timeline_set |
Set one or more timeline properties (frame, fps, range, loop) |
td_timeline_play |
Start timeline playback |
td_timeline_pause |
Pause timeline playback |
Render
| Tool | Description |
|---|---|
td_screenshot |
Save a TOP's current frame as a PNG file on disk |
td_export_render |
Export a rendered TOP frame to a file on disk |
Project
| Tool | Description |
|---|---|
td_project_info |
Get project metadata (name, path, fps, TD build/version) |
td_project_save |
Save the project in place or to a new path |
Layout
| Tool | Description |
|---|---|
td_set_node_position |
Set network-editor x/y positions for one or more nodes |
td_align_nodes |
Evenly distribute nodes along a horizontal or vertical axis |
Batch
| Tool | Description |
|---|---|
td_batch |
Execute multiple operations in a single WebSocket round-trip |
CLI Options
touch-mcp [OPTIONS]
Options:
--td-host TEXT TouchDesigner WebSocket host (default: localhost)
--td-port INT TouchDesigner WebSocket port (default: 9980)
--timeout FLOAT Per-request timeout in seconds (default: 30.0)
--debug Enable debug logging
Development
git clone https://github.com/benoitliard/touch-mcp.git
cd touch-mcp
pip install -e ".[dev]"
pytest
Static analysis:
ruff check src/
License
MIT
Install Touch in Claude Desktop, Claude Code & Cursor
unyly install touch-mcpInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add touch-mcp -- uvx --from git+https://github.com/benoitliard/touch-mcp touch-mcpFAQ
Is Touch MCP free?
Yes, Touch MCP is free — one-click install via Unyly at no cost.
Does Touch need an API key?
No, Touch runs without API keys or environment variables.
Is Touch hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Touch in Claude Desktop, Claude Code or Cursor?
Open Touch on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare Touch with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
