TDPilot
TDPilot gives an AI agent live, transactional control of a running TouchDesigner session — planning, building, inspecting, verifying, and rolling back operator networks.
Plan before building —
td_brain_plancompiles pattern-shaped intents into validated BrainPlans;td_brain_ground→td_brain_proposehandles artistic/multi-domain concepts and gates drafts before execution.Execute safely —
td_brain_execute/td_transaction_applyapply plans with preflight, snapshots, validation, rollback, dry-run, and bounded auto-repair.Build and wire networks — create, delete, copy, rename, connect, and disconnect nodes; batch up to 8 calls with
td_tool_batch.Read and set parameters — static values, live expressions, resets, pulses, custom COMP parameter pages, and DAT text/table content.
Inspect state — project info, node lists/details, params, connections, search (including DAT text and expressions), errors, cook times, POP attribute samples, CHOP/SOP data.
Verify visually — screenshots (inline base64 or cheap disk saves), frame capture/analysis, TOP streaming and visual monitoring.
Diagnose and fix — recursive error scans, instability detection, emergency stabilization, parameter safety bounds, certification.
Protect and recover — scene snapshots, listing/diffing snapshots, parameter restore with dry-run, owned undo blocks and project lifecycle (save/load/undo/redo).
Remember and reuse — technique memory (learn, save, recall, replay, favorite, promote, export/import) plus a free-form markdown knowledge store.
Know TouchDesigner — searchable corpus of official docs, operator cards, param help, snippets, palette components, release deltas, build compatibility, and POPx operator docs.
Scaffold quickly — macros (feedback, audio-reactive, particle GPU, post-processing) and legacy patch planning tools (deprecated in favor of the brain path).
Control playback and runtime — timeline read/play/pause/frame/FPS, event subscriptions, event history, dynamics observation, and visual optimization search.
Operate the session — activity log, server metrics/capabilities, sync status/diagnostics, component notes, self-update, and Python execution inside TD.
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., "@TDPilot check the current network for errors and cooking info"
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.
████████╗██████╗ ██████╗ ██╗██╗ ██████╗ ████████╗
╚══██╔══╝██╔══██╗██╔══██╗██║██║ ██╔═══██╗╚══██╔══╝
██║ ██║ ██║██████╔╝██║██║ ██║ ██║ ██║
██║ ██║ ██║██╔═══╝ ██║██║ ██║ ██║ ██║
██║ ██████╔╝██║ ██║███████╗╚██████╔╝ ██║
╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝TDPilot Runtime v2.6.2
Build, debug, and verify TouchDesigner networks by talking to your AI.
TDPilot gives Claude (or Cursor, Codex, any MCP client) live control of a running TouchDesigner session. The agent creates and wires operators, sets real parameter values, screenshots the render to check its own work, and records verified recovery evidence using snapshots, owned undo history, and a full activity log. It knows TouchDesigner: every one of TD's operators is covered by a reviewed knowledge atlas grounded in official Derivative docs.
Try these, verbatim, once installed:
/td-first-wowBuilds a moving feedback visual in your project, verifies it error-free, and shows you the screenshot — in about two minutes.
/td-concept A luminous particle tunnel with deep fog and slow camera driftGrounds the complete artistic request, reviews a concrete TD architecture, and executes it only when every required facet is covered.
Make my project audio-reactive: drive the main TOP chain from the kick drum of audio_in.Plans the CHOP analysis chain, wires it to your visuals, and proves the binding works before calling it done.
Why is my render black? Fix it.Reads errors recursively, inspects the render chain state, finds the broken link, fixes it, and screenshots the repaired output.
Why artists trust it on real projects: changes are preflighted, validated, and checked for recoverability; risky parameter writes are gated by an operator-semantics contract; and the whole session is auditable. No signup, no TDPilot API key, and no TDPilot-hosted service. The bridge runs locally; your chosen AI client controls what project context it sends to its model provider. On TouchDesigner 2025.33070+, fresh components also bind their Web Server DAT to loopback by default instead of exposing the bridge on every interface.
Install — Claude Code plugin (recommended)
Easiest: paste these two slash commands into any Claude Code session.
/plugin marketplace add dreamrec/TDPilot
/plugin install tdpilot@dreamrec-TDPilotThat installs the full MCP tool surface, the TDPilot skills (tdpilot-core, tdpilot-production, popx-touchdesigner, plus the public brain skills), the brain agents, the guided slash commands (/td-concept, /td-first-wow, /td-audio-reactive, /td-explain-patch, /td-check, /td-snapshot), and the TD-side .tox component — one command, no Python setup required.
Shell one-liner alternative:
curl -fsSL https://raw.githubusercontent.com/dreamrec/TDPilot/main/scripts/install_claude_plugin.sh | bashOr via npx:
npx tdpilot plugin-installTouchDesigner side (once, after install)
Drag ~/.claude/plugins/cache/dreamrec-TDPilot/tdpilot/<version>/td_component/tdpilot.tox into your TD /local container. Or paste the auto-setup Python block from docs/INSTALL_CLAUDE_PLUGIN.md into the Textport (auto-detects the latest installed version).
Using Claude Desktop, Cursor, Codex, or another MCP client? See docs/INSTALL_OTHER_CLIENTS.md — one page per client, including the one-click .mcpb bundle for Claude Desktop. Multiple clients can share one current runtime and the canonical authentication file; avoid duplicate entries for the same server within a client.
Install the current Git source
For fixes on main that are newer than a published release, use the checkout
itself for both the Python server and the component:
git clone https://github.com/dreamrec/TDPilot.git
cd TDPilot
uv sync --frozenDrag td_component/tdpilot.tox from that checkout into TD's /local.
Configure your MCP client to run uv run --frozen --directory /absolute/path/to/TDPilot tdpilot
using separate command/argument fields, so paths containing spaces work. Set
TD_MCP_HOST=127.0.0.1, TD_MCP_PORT=9981, TD_MCP_REQUIRE_AUTH=1 and
TD_MCP_AUTOGENERATE_SECRET=1; the component and server share the canonical
~/.tdpilot/.tdpilot.env secret. Keep that file private and reuse it across
clients. See the client configuration examples.
After loading the component, run uv run --frozen tdpilot doctor and
uv run --frozen python scripts/diagnose_live_sync.py --live --pretty.
Reconnect existing TDPilot client sessions after an update: changing files on
disk does not replace Python code already loaded in a running server. Avoid
npx tdpilot update when intentionally testing a newer source commit; that
command selects the published release tag.
Version 2.6.2 adds a cached HTTP router and timeline-wrap-safe performance sampling. See the update notes and reproducible live validation.
Related MCP server: touch-mcp
Documentation
Which doc do I read? Installing → INSTALL_CLAUDE_PLUGIN.md. First hour
→ GETTING_STARTED.md. Daily driving → USER_GUIDE.md. Running a show →
MANUAL.md. Looking up a tool → API_REFERENCE.md. Something broke →
TROUBLESHOOTING.md.
Install (Claude Code plugin):
docs/INSTALL_CLAUDE_PLUGIN.mdInstall (Claude Desktop / Cursor / Codex / generic MCP):
docs/INSTALL_OTHER_CLIENTS.mdGetting started:
docs/GETTING_STARTED.mdUser guide:
docs/USER_GUIDE.mdMemory guide:
docs/MEMORY_GUIDE.mdProduction manual:
docs/MANUAL.mdPractical Intelligence v2.4 architecture and guarantees:
docs/PRACTICAL_INTELLIGENCE.mdAPI reference:
docs/API_REFERENCE.mdSecurity model:
docs/SECURITY.mdTroubleshooting:
docs/TROUBLESHOOTING.mdContributing:
CONTRIBUTING.mdLatest release and upgrade notes: 2.6.0
What changed and why: SDK 2 and update benefits
Release history: CHANGELOG.md
Architecture deep-dives:
docs/TDPILOT_CONCEPT_TO_NODE_MASTER_PLAN.md,docs/TDPILOT_EFFECTIVENESS_ROADMAP.md,docs/MCP_1_1_SURFACE.md(historical)
What This Is
A practical control layer between AI agents and TouchDesigner — built for iterative patch development, not one-shot guessing.
A planner that grounds ideas in real operators: every TD operator family (CHOP, COMP, DAT, MAT, POP, SOP, TOP) is covered by a reviewed knowledge atlas sourced from official Derivative docs, with key parameters and gotchas per operator.
A safety layer professionals can rely on: transactional apply, preflight checks, snapshots, verified rollback, parameter-semantics gating on risky writes, and an activity log of everything the agent touched.
A technique memory that learns validated patterns from your projects and reuses them — exportable, importable, shareable.
Diagnostics that close the loop: error scans, cook-time profiling, and screenshot verification so the agent proves its work instead of declaring it.
Packaged Add-ons
Reviewed operator atlas — The core local add-on for translating abstract ideas into real TD operators. Agents can use the 662-card reviewed operator atlas, Official Derivative source URLs, params, concepts, and gotchas to choose smaller, safer operator chains.
Brain skills and agents — Codex and Claude Code ship explorer, builder, validator, and recovery workflows. Exact validated patterns use deterministic planning; artistic and multi-domain work uses ground -> author -> propose before transactional execution.
Scoped transaction hook — The shipped hook runs only after brain/transaction mutations to reinforce final validation. Source-repository release guards check mirror drift, personal paths, and stale artifacts but are not shipped to user projects.
Optional local knowledge packs — POPX and future specialty packs stay local and user-owned; they extend planning context without adding hosted-service dependencies.
Start Here: Core Workflow
You don't need all 114 tools. Start with these and expand as needed:
Step | Tools | What You're Doing |
Route a pattern |
| Compile an exact validated topology, then require complete intent coverage |
Author a concept |
| Ground artistic, multi-domain, spatial, or implicit architecture and review the authored graph |
Execute |
| Apply only a valid BrainPlan or PatchPlan with preflight, snapshots, rollback, and validation |
Inspect |
| Understand current state before touching anything |
Check memory |
| See if a reusable technique already exists |
Build |
| Make changes in small, reversible steps |
Verify |
| Prove the change worked |
Protect |
| Save milestones, roll back if needed |
Remember |
| Save successful patterns for reuse |
The loop: Inspect -> Route -> Plan or Ground/Propose -> Execute transactionally -> Validate -> Learn only if validated.
Everything else (vision, streaming, optimization, planning, TD2025 inspection) builds on top of this core.
Latest Release
v2.6.2 — Faster HTTP dispatch, timeline wrapping, and reproducible Git installs
The cached router removes repeated callback compilation. Absolute cook timestamps keep validation correct across timeline loops and backward seeks. Fresh Mac qualification passed 2,348 tests and 215/215 complete release checks in TouchDesigner 2025.33230, including rollback, visuals, panels and cleanup.
v2.6.1 — Windows RTX qualification and reliable live release checks
Verified recovery: typed patches run inside one TouchDesigner callback and one owned undo block. Failed edits restore and compare affected state, including DAT text and tables. Automatic undo refuses intervening edits.
MCP SDK 2.3: updated protocol support, explicit request context, resource subscriptions, and cancellation recovery. The full profile retains the same 114 tools.
TouchDesigner 2025.33230: release knowledge, live-checked parameter names, Time Filter POP and Nuitrack operator cards, and native Gaussian-splat loading guidance.
More predictable controls: bounded CHOP mappings for camera, material, particle and noise targets; optional 28-tool inspection and 50-tool build profiles.
Updated foundations: refreshed dependencies, a managed-runtime Codex launcher, and clearer live connection diagnostics in the TD panel.
Rollback safety means that if the fourth step of a five-step patch fails, TDPilot restores the affected state and checks that restoration. It will not blindly undo later work. This covers the watched TD graph state; external file writes, arbitrary callback side effects and process crashes are outside that guarantee.
Upgrading: update both the MCP runtime and the bundled tdpilot.tox, then
restart your MCP client. Native transactions require the matching component;
older components reject the operation before mutation. Python 3.11+ is required.
See the upgrade and qualification notes,
practical benefits report, and
changelog.
Core Thinking Model (How To Think With This MCP)
Use this loop for every non-trivial task:
Inspect the relevant scope — Read focus, target nodes, direct connections, and parameters before touching anything. Batch independent reads when that saves a roundtrip.
Check memory — Before building from scratch, use
td_memory_recallto check if a similar technique already exists in the library.Choose the route — Use
td_brain_planfor an exact validated pattern. Usetd_brain_ground-> author ->td_brain_proposefor artistic, multi-domain, spatial, or implicit architecture.Execute safely — Execute only complete accepted plans, or use a small typed direct edit for one proven change. Validate at logical checkpoints rather than after every primitive operation.
Validate the request — Check graph, runtime, bindings/references, and the requested visual/temporal behavior. Zero TD errors alone is not visual proof.
Learn and control cost — Save only validated reusable work. Prefer metadata and one low-quality proof thumbnail; ask before repeated images or streaming.
Optional tool profiles
Set TD_MCP_TOOL_PROFILE in your MCP server's environment, then restart that
server. full (default) exposes 114 tools, inspect exposes 28 inspection and
documentation tools, and build exposes 50 tools for grounded construction and
validation. Disabled tools are unavailable through direct calls and batch calls.
Profiles reduce discovery context; authentication and safety policies still apply.
See profile setup and boundaries.
Tool Map (114 Tools)
0) Brain Planning + Transactions
Use for non-trivial visual programming tasks where complete intent coverage, rollback, and validation matter.
td_brain_plan,td_brain_ground,td_brain_propose,td_brain_execute,td_transaction_apply,td_cockpit_render
1) Scene + Timeline + Project Lifecycle
Use for global context, playback control, save/load, and undo operations.
td_get_info,td_list_families,td_timeline,td_timeline_set,td_project_lifecycle
2) Network Build + Wiring
Use for creating, moving, renaming, connecting, and pruning structure.
td_get_nodes,td_get_node_detail,td_search_nodestd_create_node,td_delete_node,td_copy_node,td_rename_nodetd_connect_nodes,td_disconnect,td_get_connections
3) Parameters + DAT Content
Use for patch logic, expressions, config tables, scripts, and trigger pulses.
td_get_params,td_set_params,td_pulse_paramtd_get_content,td_set_content,td_custom_parameters
4) Diagnostics + Capture
Use for proving behavior instead of assuming behavior.
td_screenshot,td_chop_data,td_geometry_data,td_pop_inspecttd_cooking_info,td_get_errorstd_exec_python,td_python_help,td_python_classes
Structured exec note: td_exec_python now returns JSON-safe result, result_type, and result_is_structured fields. Use it for lightweight structured probes before reaching for stdout parsing.
5) Events + Streaming
Use for reactive and continuous workflows.
td_subscribe,td_unsubscribe,td_get_eventstd_capture_and_analyzetd_monitor_visual,td_stop_monitor_visualtd_stream_top,td_stop_stream_top
Token guidance: start with include_image=false for monitors/streams. Use image payloads only when visual detail is explicitly required. Prefer td_screenshot for single checks.
6) Optimization + Dynamics
Use for quality passes and temporal behavior analysis.
td_optimize_visual— now accepts directobjective_weights(e.g.{"stability": 0.8, "complexity": 0.2})td_describe_dynamics
7) Safety + Recovery
Use for guardrails, emergency control, and rollback confidence.
td_set_param_bounds,td_clear_param_boundstd_detect_instability,td_emergency_stabilizetd_snapshot_scene,td_list_snapshots,td_diff_snapshots,td_restore_snapshottd_get_state_vector,td_get_timescale_state
8) Technique Memory & User Knowledge Store
Two parallel persistence surfaces — technique memory for replayable network recipes, knowledge store (new in v1.5.3) for free-form markdown reference essays (prose + math).
Technique memory — learning, saving, and replaying reusable network patterns:
td_memory_learn— Analyze a live network subtree and extract a portable recipe. Auto-detects complexity: small/medium networks get full recipes with all params and expressions; large networks get structure summaries + key params.td_memory_save— Persist a technique to the project or global library.td_memory_recall— Search the library by text query and/or tags. Returns summaries.td_memory_replay— Rebuild a saved technique in a new location. Creates nodes, sets parameters and expressions, wires connections.td_memory_list— List all saved techniques with optional filtering.td_memory_favorite— Mark techniques as favorites and rate them (0-5).td_memory_promote— Copy a project-level technique to the global library for use across all projects.td_memory_export— Export the technique library as a portable JSON object for sharing or backup.td_memory_import— Import techniques from an exported library (fromtd_memory_export).td_memory_preferences— Get/set user preferences (color palettes, default resolutions, naming conventions, etc.)
User knowledge store (new in v1.5.3) — free-form markdown reference essays for prose-with-math reference content (BZ reaction equations, feedback recipes, "why this approach works" essays):
td_knowledge_save— Persist a markdown body with name/description/tags/source/notes. Project- or global-scoped. Body capped at 200 KB; split larger writeups into linked entries.td_knowledge_recall— Search by free-text query and/or tags across name/description/tags/source/notes. Optionalfull_text=truealso reads bodies (slower but more thorough).td_knowledge_get— Fetch full markdown body + metadata for one entry by id.td_knowledge_list— List entry summaries newest-first with optional filtering.
Storage lives at ~/.tdpilot/{memory,knowledge}/ with per-project and global scopes:
~/.tdpilot/
memory/
global/
techniques.json
preferences.json
projects/{project_name}/
techniques.json
preferences.json
knowledge/
global/
index.json
entries/<uuid>.md
projects/{project_name}/
index.json
entries/<uuid>.mdStarter technique recipes — the repo ships canonical live-visual recipes under data/techniques_starter/ (one td_memory_import-format JSON file per technique: plain feedback loop, feedback displacement bloom, audio-reactive level pulse, beat-detected flash, kaleidoscope mirror, noise-displace flow, particle GPU sprite trail, camera post chain, LFO param wobble, edge-glow composite). Load one with a single call — pass the file's parsed JSON as the data argument:
td_memory_import(data=<contents of data/techniques_starter/plain_feedback_loop.json>, scope="global")Parameter names are verified against the operator atlas cards (a test enforces this), but every entry ships state: "candidate" with verified_on: null — they have not yet been replayed against a live TD build. Replay one with td_memory_replay, and promote it once it validates.
9. Macros & Planning (7)
Tool | Purpose |
| Create a reusable macro from a template |
| List available macros |
| Get macro parameter schema |
| Plan a multi-step network patch |
| Pre-validate a patch plan |
| Validate a technique recipe |
| Audit project subtree |
10. Vision & Streaming (7)
Tool | Purpose |
| Capture a single frame from a TOP |
| Analyze frame content (colors, regions) |
| Start continuous visual monitoring |
| Stop visual monitoring |
| Stream TOP output via WebSocket |
| Stop TOP streaming |
| Get optimization suggestions for visuals |
11. Knowledge Corpus (7)
Tool | Purpose |
| Search official TD documentation |
| Get detailed operator documentation |
| Get parameter-level help |
| Find code snippets by topic |
| Look up Palette component info |
| Get changes between TD builds |
| Check operator build compatibility |
12. Server Introspection (3)
Tool | Purpose |
| Report server capabilities |
| Get server performance metrics |
| Describe the full tool surface |
13. Recommendations (3)
Tool | Purpose |
| Suggest official components |
| Find relevant official examples |
| Suggest better approaches |
14. TD 2025 Native (6)
Tool | Purpose |
| Inspect Python environment in TD |
| Check threading configuration |
| Inspect TD logger state |
| Inspect TDResources categories |
| Audit/fix COMP standards |
| Inspect color management pipeline |
How To Use It (Practical Workflow)
Connect MCP client to TDPilot.
Ask for current project state.
Request a scoped patch goal.
Let agent apply changes in batches.
Require end-of-task
td_get_errorscheck.Save snapshot at stable milestone.
When you find something worth keeping: learn it, save it, rate it.
What It Is Good At
Building and refactoring operator networks quickly.
Inspecting modern POP systems with attribute-aware reads.
Converting high-level creative goals into concrete TD graph operations.
Audio-reactive/control-system patch scaffolding.
Automated cleanup, relayout, and consistency passes.
Diagnosing wiring/parameter/runtime errors with direct evidence.
Remembering what works and reusing it across projects.
What It Is Not Good At
Replacing artistic direction by itself.
High-level show design without iterative user feedback.
Unlimited always-on image streaming without token impact.
Ignoring TD-specific context (operator families, cook behavior, timing model).
"One shot perfect patch" generation in complex scenes.
Network Design Protocol (Default Aesthetic Rules)
When generating or reorganizing networks: use color coding by role, keep clean spacing and avoid overlaps, group nodes into functional clusters, preserve clear flow direction, name nodes by purpose, and run td_get_errors after edits.
Quick Setup
Recommended runtime (no manual Python setup in client config):
npx -y tdpilotLocal development runtime:
git clone https://github.com/dreamrec/TDPilot.git
cd TDPilot
uv sync
uv run tdpilotTouchDesigner Side
Run the setup script once inside the TD Textport:
exec(open("/path/to/TDPilot/setup_mcp_in_td.py").read(), globals(), globals())This installs the MCP component into /local/mcp_server by default, which means it persists across project opens within the same TD session. You only need to run this once — every project you open afterward will already have TDPilot available.
To install into a specific project instead: os.environ["TD_MCP_PARENT_PATH"] = "/project1" before running.
Alternatively, drag-and-drop td_component/tdpilot.tox into /local manually.
One-command setup helpers: macOS ./install.sh, Windows ./install.ps1
MCP Bundle (Standardized)
TDPilot ships a standard bundle in-repo:
mcp/manifest.jsonmcp/profiles/claude-desktop.json,cursor.json,generic.json
Auto-generate client config:
tdpilot init --client claude-desktop
tdpilot init --client cursor --output ./cursor_mcp_config.json
tdpilot init --client generic --print-onlyDoctor Command
Run a final environment/runtime check:
tdpilot doctor
tdpilot doctor --jsonEnvironment Variables
TD_MCP_HOST(default127.0.0.1— supports hostnames likedesktop-3lurf0p.tail88651a.ts.net)TD_MCP_PORT(default9981)TD_MCP_SCHEME(defaulthttp— set tohttpsfor Tailscale HTTPS or TLS-enabled setups)TD_MCP_WS_PORT(default9982)TD_MCP_TRANSPORT(stdioorstreamable_http)TD_MCP_HTTP_PORT(default8765)TD_MCP_CAPTURE_QUALITY(default0.3)TD_MCP_STREAM_MAX_FPS(default15.0)TD_MCP_EXEC_MODE(off,restricted,standard,full)TDPILOT_PROJECT_NAME(set to enable per-project technique memory)TDPILOT_MEMORY_DIR(override default~/.tdpilot/memory/path)
Test Suite
Run the test suite:
uv run --extra dev pytest tests/ -vPlanning quality is measured, not asserted: the brain is gated by a 50+ case concept-to-node golden eval corpus (scripts/eval_brain_golden.py) plus schema-snapshot, docs-truth, and packaging-mirror checks — all in CI.
Reliability Habit
Treat this as mandatory for every meaningful task: before edits inspect, during edits take small reversible steps, after edits run td_get_errors, before risky changes snapshot.
Community
Show what you built / ask anything — GitHub Discussions
Share a working technique — the technique-share issue template turns your patch (with real parameter values + a screenshot) into bundled TDPilot knowledge, with credit
Report a bug — issue templates (the bug form asks for
tdpilot doctor --json)Contribute — CONTRIBUTING.md; techniques and hint packs land fastest
Security — private disclosure via GHSA, see docs/SECURITY.md
License
MIT
┌─────────────────────────────────────────────────────────────────────┐
│ dreamrec // TDPilot // live laugh love │
└─────────────────────────────────────────────────────────────────────┘Available Tools
114 toolstd_analyze_frameARead-onlyIdempotent
Analyze pixel data of a TOP node without transferring full image data.
Runs server-side numpy analysis inside TouchDesigner and returns statistical results per requested mode. Supported modes:
histogram: per-channel (RGB) pixel value histograms
luminance: mean, min, max, std, p5, p95 of perceived luminance
alpha_coverage: alpha channel statistics (requires RGBA TOP)
color_dominant: most frequent quantized color in the frame
roi_diff: pixel-level diff between a region and a reference TOP
For roi_diff, also pass roi=[x, y, w, h] and reference_path.
Inputs: path (required), roi, modes, thresholds, +3 more. Returns: result
td_audit_projectAudit TD ProjectARead-only
Read-only project audit. Pair with td_brain_plan for new build/debug requests that need plan-aware changes afterward.
Inputs: root_path. Returns: object
td_brain_executeExecute TD Brain PlanADestructive
DEFAULT apply path for a BrainPlan: use this when you already have a BrainPlan from td_brain_plan (or a draft from td_brain_propose) and need TDPilot to apply it transactionally with validation, rollback, and optional local learning. Prefer the lower-level td_transaction_apply only when you hold a ready PatchPlan/BrainPlan and want to drive raw transaction controls yourself (no grounding, no learning). Do not use the legacy td_plan_patch / td_patch_* pipeline for new builds.
Inputs: plan, plan_id, repair_budget, learn_on_success, +2 more. Returns: object
td_brain_groundGround Host-Authored TD Brain DraftARead-only
Use this when the request is artistic, multi-domain, spatial, or implicit-architecture requests, and whenever td_brain_plan returns blocked: it returns a read-only grounding pack (task features, corpus evidence, candidate operators, parameter contracts, operator availability, live state, exemplars, and the draft authoring contract) so you can write a draft for td_brain_propose. Do not use it for trivial single-node edits.
Inputs: intent (required), mode, output_top, constraints, +5 more. Returns: object
td_brain_planPlan TD Brain TaskARead-only
Use this when a request is pattern-shaped with an exact validated topology or technique composition. It returns a non-mutating concept graph, typed patch plan, and server-derived intent coverage; execute only when coverage is complete. For artistic, multi-domain, spatial, camera/depth/fog, or implicit-architecture requests, start directly with td_brain_ground → td_brain_propose.
Inputs: intent (required), mode, inspect, output_top, +8 more. Returns: object
td_brain_proposePropose Host-Authored TD Brain DraftARead-only
Use this when you have authored a draft candidate graph from a td_brain_ground grounding pack and need TDPilot to validate it into an executable BrainPlan. It is read-only and never mutates TouchDesigner: accepted drafts are compiled, gated by parameter semantics, and cached server-side so td_brain_execute(plan_id=...) can run them immediately; rejected drafts return machine-readable rejections to fix and retry.
Inputs: draft (required), intent, target_root, detail_level, +3 more. Returns: object
td_capture_and_analyzeARead-onlyIdempotent
Capture a TOP frame together with cooking + error state, plus optional AI analysis.
Use this when you want one call that folds the screenshot together with cooking info and node errors (and, if sampling is supported, an AI read of the frame). Prefer td_screenshot for a bare inline frame; prefer td_capture_frame for a metadata-first capture without the extra cooking/error probes.
Inputs: path (required), analyze, quality, compare_with, +2 more. Returns: result
td_capture_frameARead-onlyIdempotent
Capture a single frame from a TOP node, metadata-first.
Returns resolution, format, and byte size; the base64 image comes back only when confirm=True or save_path is set (behind that gate, so token cost stays near-zero by default). If save_path is set the frame is written to disk TD-side and only metadata + the saved path come back — the cheap visual-verify loop. Ask the user before setting confirm=True because image payloads consume significant model context tokens. Prefer td_screenshot for a quick inline thumbnail; prefer td_capture_and_analyze when you also want cooking state and errors folded into the same call.
Inputs: path (required), confirm, quality, save_path. Returns: result
td_chop_dataARead-onlyIdempotent
Read CHOP channel data (values/samples).
Inputs: path (required), range, channels. Returns: result
td_clear_param_boundsBDestructive
Clear parameter bounds for specific paths, or all bounds if paths is None.
Inputs: paths. Returns: result
td_cockpit_renderRender TD Brain CockpitARead-onlyIdempotent
Use this when you already have BrainPlan or transaction data and want to render the optional local cockpit UI. This is read-only presentation; call td_brain_plan or td_brain_execute first for authoritative data.
Inputs: plan, title, trace, transaction_result. Returns: object
td_color_pipelineARead-onlyIdempotent
Inspect the color management pipeline in TouchDesigner: color space, gamma, display settings.
Inputs: no named parameters. Returns: object
td_component_notesAIdempotent
Per-COMP markdown notes — what this subnet does, why it's wired this way,
gotchas, TODOs. External JSON storage by default; embed=True also
writes a hidden Text DAT inside the COMP for portability.
Inputs: action (required), body, path, tags, +1 more. Returns: result
td_component_standardizeAIdempotent
Audit or fix COMP standardization: required custom parameters (Version, Help, Creator), extension, naming.
Inputs: path (required), fix. Returns: object
td_connect_nodesBDestructiveIdempotent
Connect two nodes (source output → target input).
Inputs: source_path (required), target_path (required), source_index, target_index. Returns: result
td_cooking_infoBRead-onlyIdempotent
Get cooking/performance info for a subtree.
Inputs: path, limit, recurse, sort_by. Returns: result
td_copy_nodeBDestructive
Copy/duplicate an existing node (with its parameters) to a new node.
Inputs: source_path (required), new_name, dest_parent. Returns: result
td_create_macroC
Instantiate a legacy scaffold; feedback/audio macros are not complete visuals.
Inputs: macro_type (required), name, nodeX, nodeY, +3 more. Returns: result
td_create_nodeADestructive
Create a new TouchDesigner operator of a given type under a parent path.
Inputs: node_type (required), name, nodeX, nodeY, +2 more. Returns: result
td_custom_parametersADestructive
Create or update a custom parameter page on a COMP.
Inputs: page (required), path (required), params (required). Returns: result
td_delete_nodeCDestructive
Delete a node by its absolute path.
v1.4.6 Bug A PoC: explicit-args signature instead of the old
params: DeleteNodeInput wrapper. MCPServer wraps params: Model
signatures under a params: {"$ref": ...} property that MCP clients
collapse to an opaque {}. Explicit args produce a flat schema the
client can render directly — callers see path as a required
string with description and min_length instead of having to guess.
The Annotated[str, Field(...)] pattern carries the same validation
the old Pydantic model had.
Inputs: path (required). Returns: result
td_describe_dynamicsCRead-onlyIdempotent
Asynchronous temporal dynamics observation (frame, cooking, events).
Inputs: path, sample_rate, observation_window. Returns: result
td_describe_surfaceARead-onlyIdempotent
Describe the MCP server surface: tool count, resource count, capabilities, version.
Inputs: no named parameters. Returns: object
td_detect_instabilityBRead-onlyIdempotent
Detect instability signals: FPS, heavy cookers, critical errors.
Inputs: path. Returns: result
td_diff_snapshotsARead-onlyIdempotent
Diff two snapshots, or a snapshot against live state.
Inputs: snapshot_a (required), snapshot_b. Returns: result
td_disconnectBDestructive
Disconnect a node's input or output connector.
Inputs: path (required), index, connector_type. Returns: result
td_emergency_stabilizeADestructive
Emergency stabilization: pause timeline, clamp safety, capture baseline snapshot.
Inputs: path. Returns: result
td_exec_pythonADestructive
Execute Python code inside TouchDesigner.
Inputs: code (required), timeout_ms, include_hints. Returns: result
td_explain_better_wayBRead-onlyIdempotent
Suggest better official alternatives for a given intent, with gotcha warnings.
Inputs: intent (required), current_plan. Returns: object
td_find_official_exampleBRead-onlyIdempotent
Search for official examples and snippets matching a query.
Inputs: query (required), family. Returns: object
td_geometry_dataARead-onlyIdempotent
Read SOP/POP geometry data (points/prims).
Inputs: path (required), limit, include_prims, include_points. Returns: result
td_get_activity_logARead-onlyIdempotent
Recent tool-call activity from this MCP server's ring buffer.
Returns a JSON array of entries newest-first, each with ts, tool,
args_summary, result_summary, duration_ms, ok. The buffer
holds the most recent 200 calls; older entries are evicted.
Pairs with the in-TD activity_log Table DAT mirror so the same data
is also wireable into a live visual patch.
Inputs: limit, tool_filter. Returns: result
td_get_build_compatibilityBRead-onlyIdempotent
Check if an operator type is compatible with a specific build.
Inputs: op_type (required), build. Returns: object
td_get_capabilitiesARead-onlyIdempotent
Detect MCP client capabilities plus server/component versions and runtime config. Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_get_connectionsBRead-onlyIdempotent
Get upstream/downstream connections for a node.
Inputs: path (required). Returns: result
td_get_contentARead-onlyIdempotent
Read the text or table content of a DAT node.
Inputs: path (required). Returns: result
td_get_errorsARead-onlyIdempotent
Get errors + warnings for a node (optionally recursive).
Inputs: path, recurse, max_depth, include_hints. Returns: result
td_get_eventsARead-onlyIdempotent
Read recent runtime event history from the server-side event buffer.
Inputs: limit, event_type. Returns: result
td_get_focusARead-onlyIdempotent
Return where the user currently is in TouchDesigner: active network pane, selection, project metadata, timeline state. Reduces the cold-start tax of needing to ask the user 'what path are you working in?' before every patch.
Inputs: include_pane_history. Returns: result
td_get_hintsARead-onlyIdempotent
Return concise, source-cited hints for a topic, op_type, or intent.
Sources include hint packs shipped under src/td_mcp/hints/packs/
(skill pitfalls, canonical recipes), with future expansion to live
knowledge-store essays. Every hint cites its source.
The response shape:
{
"topic": ...,
"op_type": ...,
"confidence": 0.87,
"hints": [
{"id": ..., "priority": "critical|useful|context", "rule": ...,
"source": "tdpilot-core §11", "source_kind": "skill_pitfall"},
...
],
"next_tools": ["td_get_param_help", "td_screenshot"],
"hint_pack_version": "v1.6.0-1",
"available_topics": [...],
"available_op_types": [...]
}
Inputs: topic, intent, op_type, surface, +3 more. Returns: result
td_get_infoARead-onlyIdempotent
Get TouchDesigner project info: version, build, project name, OS. Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_get_macro_paramsCRead-onlyIdempotent
Inspect parameters plus truthful capability, I/O, limitations, and completion status.
Inputs: macro_type (required). Returns: result
td_get_node_detailARead-onlyIdempotent
Get detailed info about a node (type, errors, warnings, parameters).
The parameters dict is capped at param_limit entries (default 50, hard ceiling 200) — full COMP serialization can blow past 80 KB. Use td_get_params with name/page filters when you need the rest.
When include_notes=True, any markdown note saved via
td_component_notes for this path is attached as a note field.
Inputs: path (required), param_limit, include_hints, include_notes, +1 more. Returns: result
td_get_nodesBRead-onlyIdempotent
List the child operators (nodes) directly under a network path.
Inputs: path, type, limit, family, +3 more. Returns: result
td_get_operator_docCRead-onlyIdempotent
Get full documentation card for an operator type or a specific node.
Inputs: op_type, node_path. Returns: object
td_get_param_helpBRead-onlyIdempotent
Get help for a specific parameter: live metadata + knowledge card entry + current value.
Inputs: node_path (required), param_name (required). Returns: object
td_get_paramsBRead-onlyIdempotent
Get parameter values and metadata for a node.
Inputs: path (required), page, names, response_format. Returns: result
td_get_popx_operatorARead-onlyIdempotent
Get full documentation for a POPx operator (e.g. 'Particle SIM', 'Shape Falloff').
Inputs: operator_name (required). Returns: object
td_get_release_deltaARead-onlyIdempotent
Get release notes for a specific build (default: current).
Inputs: build. Returns: object
td_get_server_metricsARead-onlyIdempotent
Get MCP server runtime metrics: telemetry, events, streams, safety, snapshots, jobs. Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_get_state_vectorBRead-onlyIdempotent
Aggregated scene state vector (cached for _tr.TD_STATE_VECTOR_TTL seconds).
Inputs: path, force_refresh. Returns: result
td_get_timescale_stateARead-onlyIdempotent
Read beat/phrase-derived timeline state (bars, beats, phrase position).
Inputs: bpm_hint, beats_per_bar. Returns: result
td_knowledge_getARead-onlyIdempotent
Fetch the full markdown body + metadata for one entry.
Inputs: entry_id (required), scope. Returns: result
td_knowledge_listARead-onlyIdempotent
List free-form markdown knowledge-entry summaries, newest first.
Prefer td_memory_list for the structured, replayable technique library.
Inputs: tags, limit, scope, favorites_only. Returns: result
td_knowledge_recallARead-onlyIdempotent
Search the free-form markdown knowledge store. Returns summaries (no bodies).
Use this for prose reference content — notes, essays, prose-with-math saved
via td_knowledge_save. Use td_knowledge_get afterward to fetch a specific
entry's body. Prefer td_memory_recall when you want the structured, replayable
technique-recipe library (learned via td_memory_learn, rebuilt with
td_memory_replay) rather than free-form notes.
Inputs: tags, limit, query, scope, +1 more. Returns: result
td_knowledge_saveA
Persist a free-form markdown knowledge entry (prose/notes/essays).
Returns the entry id. The body is stored at ~/.tdpilot/knowledge//entries/.md and the metadata in index.json. Local-only, never pushed anywhere. Prefer td_memory_save (with td_memory_learn) when you want to capture a structured, replayable technique recipe rather than free-form prose.
Inputs: body (required), name, tags, notes, +3 more. Returns: result
td_list_familiesARead-onlyIdempotent
List available operator families (TOP, CHOP, SOP, DAT, COMP, MAT, POP). Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_list_macrosARead-onlyIdempotent
List all available macro templates (built-in plus user templates). Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_list_snapshotsARead-onlyIdempotent
List saved scene snapshots (newest first).
Inputs: limit. Returns: result
td_locationsAIdempotent
Save, list, jump-to, rename, or delete named network locations per
project. Storage is host-side JSON in ~/.tdpilot/locations/<hash>.json
and survives session restarts. Pairs with td_get_focus to give the agent
user a shared spatial vocabulary for big projects.
Inputs: action (required), name, path, new_name, +1 more. Returns: result
td_logger_statusARead-onlyIdempotent
Inspect the Python logging configuration inside TouchDesigner: log level, handlers, registered loggers.
Note: This inspects Python's logging module, not TD's native logging. Requires 'full' exec mode.
Inputs: no named parameters. Returns: object
td_lookup_palette_componentARead-onlyIdempotent
Look up a palette component by name or search by query.
Inputs: query, component_name. Returns: object
td_lookup_snippetsARead-onlyIdempotent
Search for OP Snippets by keyword and optional family.
Inputs: query (required), family. Returns: object
td_memory_exportARead-onlyIdempotent
Export the technique library as a portable JSON object for sharing or backup.
Inputs: scope.
td_memory_favoriteAIdempotent
Mark a technique as favorite and/or rate it (0-5).
Inputs: technique_id (required), scope, rating, favorite.
td_memory_importB
Import techniques from an exported library (from td_memory_export).
Inputs: data (required), scope, overwrite.
td_memory_learnARead-onlyIdempotent
Analyze a network subtree and extract a reusable technique recipe.
Auto-detects complexity:
small (<10 nodes): full recipe with all params and expressions
medium (10-20): full recipe
large (>20): structure summary + key params only
Returns the technique dict — pass it to td_memory_save to persist.
Inputs: path (required), name, tags, max_depth, +1 more.
td_memory_listARead-onlyIdempotent
List saved (structured, replayable) techniques, filterable by scope, tags, and favorites.
Prefer td_knowledge_list for the free-form markdown notes/essays store.
Inputs: tags, limit, scope, favorites_only.
td_memory_preferencesBIdempotent
Get, set, list, or delete user preferences.
Preferences store things like: preferred color palettes, default resolutions, favorite operator types, naming conventions, etc.
Inputs: action (required), key, scope, value.
td_memory_promoteAIdempotent
Copy a project technique to the global library so it's available across all projects.
Inputs: technique_id (required).
td_memory_recallARead-onlyIdempotent
Search the structured, replayable technique library by text query and/or tags.
Returns summaries (not full recipes). Use td_memory_replay to rebuild a found technique as live nodes. Prefer td_knowledge_recall when you want free-form markdown notes/essays (prose reference content) rather than replayable recipes.
Inputs: tags, limit, query, scope.
td_memory_replayA
Rebuild a saved technique in a new location in the TD project.
Creates nodes, sets parameters and expressions, wires connections. Only works for techniques with a full recipe (small/medium complexity).
Inputs: parent_path (required), technique_id (required), force, scope, +3 more.
td_memory_saveA
Save a structured, replayable technique to the project or global library.
Use the output of td_memory_learn as the technique input, or construct a technique dict manually. Prefer td_knowledge_save when you want to capture free-form markdown prose/notes rather than a replayable network recipe.
Inputs: technique (required), name, tags, notes, +2 more.
td_monitor_visualA
Start periodic monitor for a TOP.
Default mode omits base64 frames to keep token usage low.
Inputs: path (required), quality, interval, auto_analyze, +3 more. Returns: result
td_optimize_visualC
Autonomous visual goal optimization via bounded parameter search.
Inputs: goal (required), output_top (required), adjustable_params (required), profile, +7 more. Returns: result
td_patch_applyApply Legacy TD PatchADestructive
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Destructive compatibility/expert PatchPlan executor. Prefer td_brain_execute for BrainPlans because it is the default validated transaction path for TDPilot-authored builds.
Inputs: plan (required), label, auto_validate, transaction_options, +1 more. Returns: object
td_patch_planPlan Legacy TD PatchARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Compatibility/expert surface for typed PatchPlan construction. For new concept-to-network TouchDesigner builds, prefer td_brain_plan followed by td_brain_execute.
Inputs: target_root (required), intent, recipe_id, operations, +1 more. Returns: object
td_patch_previewPreview Legacy TD PatchARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Read-only PatchPlan preview for compatibility/expert workflows. For new visual builds, prefer td_brain_plan because it carries concept, corpus, and validation context.
Inputs: plan (required), include_hints. Returns: object
td_patch_validateValidate TD Patch TargetARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Read-only validation for patch compatibility workflows. BrainPlan workflows should use td_brain_plan and td_brain_execute so validation is tied to the authored plan.
Inputs: target_root (required), capture_frames. Returns: object
td_patch_variationsVary Legacy TD PatchARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Generate PatchPlan variants for compatibility/expert workflows. For new creative builds, start with td_brain_plan so variants remain grounded in a BrainPlan.
Inputs: plan (required), n, seed, strategies. Returns: object
td_plan_patchPlan Legacy TD Patch DictARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Legacy compatibility planner returning the pre-v1.5 patch dict shape. For new concept-to-network TouchDesigner work, prefer td_brain_plan followed by td_brain_execute.
Inputs: intent (required), recipe_id, target_path, include_hints. Returns: object
td_pop_inspectBRead-onlyIdempotent
Read structured POP metadata and attribute samples.
Inputs: path (required), count, start, delayed, +5 more. Returns: result
td_preflight_patchPreflight Legacy TD PatchARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Read-only validation for legacy td_plan_patch dicts. For new TDPilot-authored builds, use the BrainPlan path: td_brain_plan then td_brain_execute.
Inputs: plan (required). Returns: object
td_project_lifecycleCDestructive
Save/load/undo/redo project lifecycle operations.
Inputs: action (required), name, path, enable, +1 more. Returns: result
td_pulse_paramA
Pulse a pulse-type parameter (e.g. a button par).
Inputs: path (required), param (required). Returns: result
td_python_classesARead-onlyIdempotent
List available Python classes in the TD runtime. Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_python_env_statusARead-onlyIdempotent
Inspect the Python environment inside TouchDesigner: version, installed packages, env manager status.
Requires 'full' exec mode — uses sys and pkg_resources which are not in the standard allowlist.
Inputs: no named parameters. Returns: object
td_python_helpBRead-onlyIdempotent
Get Python help documentation for a TD class/module.
Inputs: target (required). Returns: result
td_recommend_official_componentARead-onlyIdempotent
Recommend official palette or built-in operator components for a given goal.
Inputs: goal (required). Returns: object
td_rename_nodeADestructiveIdempotent
Rename a node to a new name within its parent network.
Inputs: path (required), new_name (required). Returns: result
td_restore_snapshotADestructive
Restore parameter values from a previously saved snapshot.
This tool replays the parameter values captured in the snapshot back onto the live TouchDesigner network. It restores parameter values only — it does not add, remove, or rewire nodes. For structural rollback (topology changes such as added/deleted nodes or connection changes) use TouchDesigner's native Ctrl+Z undo stack instead.
Use dry_run=True to preview what would be changed without applying
anything. Supply partial with a list of node paths to limit the
restore to a subset of the snapshot.
Inputs: snapshot_id (required), dry_run, partial, param_semantics_policy. Returns: result
td_screenshotARead-onlyIdempotent
Capture a TOP frame as base64 inline, or to disk via save_path.
Use this for a quick single-frame visual: with save_path set the image is
written to disk TD-side and only metadata + the path come back — use this for
repeated visual verification. Without it the response embeds base64 image
data; ask the user before repeated base64 screenshots because each image can
consume significant tokens in model context. Prefer td_capture_frame when you
want metadata-first (resolution/format/bytes) with the image behind a
confirm/save_path gate; prefer td_capture_and_analyze when you also need
cooking state and errors folded into the same call.
Inputs: path (required), quality, save_path. Returns: result
td_search_nodesARead-onlyIdempotent
Search nodes across a subtree.
Legacy scopes ('name'/'type'/'family'/'all') hit the existing TD-side
/api/search endpoint. New v1.6.0 scopes ('dat_text', 'param_exprs')
iterate via the /api/exec endpoint — no .tox rebuild required.
Inputs: query (required), path, limit, scopes, +1 more. Returns: result
td_search_official_docsBRead-onlyIdempotent
Search the knowledge corpus for operators, palette, releases, snippets, or articles.
Inputs: query (required), limit, family, card_types. Returns: object
td_search_popx_docsARead-onlyIdempotent
Search POPx operator documentation — GPU particles, falloffs, simulations.
Inputs: query (required), limit. Returns: object
td_self_updateAIdempotent
Check for and optionally install a newer TDPilot release from GitHub.
Default behavior (check_only=True) hits the GitHub releases API and
returns {installed, latest, newer_available, release_url, asset_urls}.
Set check_only=False to actually download and install — this writes
to ~/.tdpilot/td_component/tdpilot.tox, the Claude Code plugin cache,
and the repo working-tree (when running from a clone). On success returns
md5 fingerprints for each install path so the caller can verify sync.
Releases v1.6.9 through v2.0.3 shipped without the tdpilot.tox asset;
against those, check_only=False returns
error_code="release_asset_missing" with remediation hints instead of
installing. Releases after v2.0.3 attach the asset automatically
(.github/workflows/release-assets.yml).
Network-only — does not touch TouchDesigner. Safe to run when TD is closed.
Inputs: check_only. Returns: result
td_set_contentADestructiveIdempotent
Write text or table content into a DAT node (overwrites existing).
Inputs: path (required), text, table. Returns: result
td_set_param_boundsBIdempotent
Set parameter safety bounds with enforcement mode.
Inputs: bounds (required), enforce_mode. Returns: result
td_set_paramsADestructiveIdempotent
Set node parameters (static values or live expressions).
Parameter-semantics checks are advisory here by default (param_semantics_policy= 'warn'): findings are attached but the write proceeds, since some out-of-range values are legitimate in TD (e.g. extending a soft UI range). Use param_semantics_policy='block', or the brain/transaction path which gates automatically, when you want invalid bindings to stop the write.
Inputs: path (required), params (required), include_hints, param_semantics_policy. Returns: result
td_snapshot_sceneB
Capture a scene snapshot (structure + params; optionally visual).
Inputs: name, path, include_visual. Returns: result
td_stop_monitor_visualBIdempotent
Stop a running visual-monitor job by its monitor id.
Inputs: path (required). Returns: result
td_stop_stream_topAIdempotent
Stop a running continuous TOP stream by its stream id.
Inputs: path (required). Returns: result
td_stream_topA
Start continuous TOP stream.
Default mode omits base64 frames to keep token usage low.
Inputs: path (required), fps, quality, include_image, +2 more. Returns: result
td_subscribeBIdempotent
Subscribe to runtime TD events for a node.
Inputs: path (required), params, channels, threshold, +2 more. Returns: result
td_sync_diagnoseARead-onlyIdempotent
Strict version/auth sync diagnostic without exposing secret material.
Inputs: check_remote, include_live. Returns: result
td_sync_statusBRead-onlyIdempotent
Report whether the local server, TD component, packages, and public surfaces are in sync.
Inputs: check_remote. Returns: result
td_tdresources_inspectARead-onlyIdempotent
Inspect TDResources available in the TouchDesigner installation: fonts, icons, defaults.
Inputs: category. Returns: object
td_threading_statusARead-onlyIdempotent
Inspect the threading status inside TouchDesigner: active threads, cook rate.
Requires 'full' exec mode — uses threading module which is not in the standard allowlist.
Inputs: no named parameters. Returns: object
td_timelineARead-onlyIdempotent
Read current timeline state: frame, seconds, FPS, playing. Returns a JSON envelope.
Inputs: no named parameters. Returns: result
td_timeline_setAIdempotent
Control timeline playback: play/pause, jump to frame, set FPS.
Inputs: fps, frame, action. Returns: result
td_tool_batchA
Dispatch up to 8 tool calls in one model roundtrip.
Each sub-call's result is returned in a structured array — per-call failures don't abort siblings. Use this for read-only sweeps ("inspect 5 things at once") to save model-to-server-to-model latency.
Hard constraints:
Maximum 8 sub-calls per invocation.
Nested
td_tool_batchcalls are rejected per-sub-call (fork-bomb guard).Sub-calls execute sequentially (TD's Python API is not thread-safe).
Returns: {"ok": True, "count": int, "results": [ {"tool": str, "ok": bool, "result": dict|None, "error": str|None, "elapsed_ms": int}, ... ]}
``error`` is always ``str | None`` — dict errors from
``format_tool_error`` are normalised to their ``message`` field.
Inputs: calls (required).
td_transaction_applyApply TD TransactionADestructive
Low-level executor: use this when you already hold a ready PatchPlan or BrainPlan and want to drive raw preflight, snapshot, validation, dry-run, max-op, and rollback controls yourself. For the normal BrainPlan build flow prefer td_brain_execute, which wraps this layer and adds grounding-aware concept profiles and optional local learning. Do not use the legacy td_plan_patch / td_patch_* pipeline for new builds.
Inputs: plan (required), options. Returns: object
td_unsubscribeAIdempotent
Remove a runtime-event subscription for a node path.
Inputs: path (required). Returns: result
td_validate_recipeValidate TD RecipeARead-only
(Legacy — prefer td_brain_plan → td_brain_execute; slated for removal in v3.0.) Read-only recipe compatibility check. Use td_brain_plan for new grounded visual-programming requests that should become a BrainPlan.
Inputs: scope, recipe, recipe_id. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 114 tools
Several clusters of tools are near-indistinguishable in purpose: td_screenshot / td_capture_frame / td_capture_and_analyze / td_monitor_visual / td_stream_top / td_analyze_frame all capture or observe a TOP, and the patch pipeline appears in three generations (td_patch_plan/preview/apply/validate, td_patch_variations, td_plan_patch/preflight_patch/validate_recipe) alongside td_brain_plan/ground/propose/execute and td_transaction_apply. The descriptions do explicitly flag the legacy tools and point to preferred paths, which mitigates but does not remove the selection risk. An agent must read long deprecation notes to pick correctly, and several tools (td_get_boundaries/insight-style meta tools like td_describe_surface, td_get_server_metrics, td_sync_status, td_sync_diagnose) overlap in 'report server state' territory.
All names use a uniform td_ snake_case prefix with a mostly verb_noun pattern (td_get_params, td_create_node, td_set_content, td_delete_node). Minor deviations exist: td_timeline_set and td_pulse_param invert to noun_verb, and a few are noun-only (td_locations, td_timeline, td_get_info vs td_get_node_detail). The pattern is still highly readable and predictable overall.
114 tools is far beyond any reasonable surface for one MCP server, even a broad TouchDesigner automation server. The count is inflated by three parallel patch/planning generations, five-plus visual-capture variants, and many narrow diagnostics tools that could be consolidated into a handful of parameterized calls. This forces agents to filter a huge catalog before every action.
The surface covers essentially the full TouchDesigner lifecycle: node CRUD (create/copy/rename/delete), params, connections, DAT/CHOP/geometry reads, Python exec, docs/search, snapshots and restore, memory/knowledge stores, timeline control, diagnostics, and visual capture/analysis. Gaps are minor — e.g. no explicit node reparent/reorder operation and limited structural rollback (deferred to TD's native undo).
Maintenance
Related MCP Connectors
Make games with AI: one MCP server that connects your agent to Unity, Unreal and Godot editors.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
AI tool directory MCP server, live since July 2026. Tools, agents, models, companies, services.
Related MCP Servers
- AlicenseBqualityAmaintenanceA Model Context Protocol server that enables AI agents to control and operate TouchDesigner projects through creation, modification, and querying of nodes and project structures.141,411 npm627MIT
- AlicenseNot gradedqualityDmaintenanceHigh-performance MCP server that enables AI assistants to control TouchDesigner live via WebSocket, providing 37 tools for nodes, parameters, scripting, and more.5MIT
- AlicenseAqualityDmaintenanceMCP server for controlling TouchDesigner from AI coding agents like Claude Code and Codex CLI, enabling operator manipulation, parameter control, and screenshot capture.1214 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceA 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.2MIT