Skip to main content
Glama
████████╗██████╗ ██████╗ ██╗██╗      ██████╗ ████████╗
╚══██╔══╝██╔══██╗██╔══██╗██║██║     ██╔═══██╗╚══██╔══╝
   ██║   ██║  ██║██████╔╝██║██║     ██║   ██║   ██║
   ██║   ██║  ██║██╔═══╝ ██║██║     ██║   ██║   ██║
   ██║   ██████╔╝██║     ██║███████╗╚██████╔╝   ██║
   ╚═╝   ╚═════╝ ╚═╝     ╚═╝╚══════╝ ╚═════╝    ╚═╝

TDPilot Runtime v2.6.2

CI npm downloads license python MCP tools TouchDesigner

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-wow

Builds 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 drift

Grounds 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.

Easiest: paste these two slash commands into any Claude Code session.

/plugin marketplace add dreamrec/TDPilot
/plugin install tdpilot@dreamrec-TDPilot

That 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 | bash

Or via npx:

npx tdpilot plugin-install

TouchDesigner 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 --frozen

Drag 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.md

  • Install (Claude Desktop / Cursor / Codex / generic MCP): docs/INSTALL_OTHER_CLIENTS.md

  • Getting started: docs/GETTING_STARTED.md

  • User guide: docs/USER_GUIDE.md

  • Memory guide: docs/MEMORY_GUIDE.md

  • Production manual: docs/MANUAL.md

  • Practical Intelligence v2.4 architecture and guarantees: docs/PRACTICAL_INTELLIGENCE.md

  • API reference: docs/API_REFERENCE.md

  • Security model: docs/SECURITY.md

  • Troubleshooting: docs/TROUBLESHOOTING.md

  • Contributing: CONTRIBUTING.md

  • Latest 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

td_brain_plan

Compile an exact validated topology, then require complete intent coverage

Author a concept

td_brain_ground, td_brain_propose

Ground artistic, multi-domain, spatial, or implicit architecture and review the authored graph

Execute

td_brain_execute, td_transaction_apply

Apply only a valid BrainPlan or PatchPlan with preflight, snapshots, rollback, and validation

Inspect

td_get_info, td_get_nodes, td_get_params, td_get_errors

Understand current state before touching anything

Check memory

td_memory_recall

See if a reusable technique already exists

Build

td_create_node, td_connect_nodes, td_set_params

Make changes in small, reversible steps

Verify

td_get_errors, td_cooking_info, td_screenshot

Prove the change worked

Protect

td_snapshot_scene, td_restore_snapshot

Save milestones, roll back if needed

Remember

td_memory_learn, td_memory_save

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:

  1. Inspect the relevant scope — Read focus, target nodes, direct connections, and parameters before touching anything. Batch independent reads when that saves a roundtrip.

  2. Check memory — Before building from scratch, use td_memory_recall to check if a similar technique already exists in the library.

  3. Choose the route — Use td_brain_plan for an exact validated pattern. Use td_brain_ground -> author -> td_brain_propose for artistic, multi-domain, spatial, or implicit architecture.

  4. 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.

  5. Validate the request — Check graph, runtime, bindings/references, and the requested visual/temporal behavior. Zero TD errors alone is not visual proof.

  6. 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_nodes

  • td_create_node, td_delete_node, td_copy_node, td_rename_node

  • td_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_param

  • td_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_inspect

  • td_cooking_info, td_get_errors

  • td_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_events

  • td_capture_and_analyze

  • td_monitor_visual, td_stop_monitor_visual

  • td_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 direct objective_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_bounds

  • td_detect_instability, td_emergency_stabilize

  • td_snapshot_scene, td_list_snapshots, td_diff_snapshots, td_restore_snapshot

  • td_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 (from td_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. Optional full_text=true also 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>.md

Starter 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

td_create_macro

Create a reusable macro from a template

td_list_macros

List available macros

td_get_macro_params

Get macro parameter schema

td_plan_patch

Plan a multi-step network patch

td_preflight_patch

Pre-validate a patch plan

td_validate_recipe

Validate a technique recipe

td_audit_project

Audit project subtree

10. Vision & Streaming (7)

Tool

Purpose

td_capture_frame

Capture a single frame from a TOP

td_analyze_frame

Analyze frame content (colors, regions)

td_monitor_visual

Start continuous visual monitoring

td_stop_monitor_visual

Stop visual monitoring

td_stream_top

Stream TOP output via WebSocket

td_stop_stream_top

Stop TOP streaming

td_optimize_visual

Get optimization suggestions for visuals

11. Knowledge Corpus (7)

Tool

Purpose

td_search_official_docs

Search official TD documentation

td_get_operator_doc

Get detailed operator documentation

td_get_param_help

Get parameter-level help

td_lookup_snippets

Find code snippets by topic

td_lookup_palette_component

Look up Palette component info

td_get_release_delta

Get changes between TD builds

td_get_build_compatibility

Check operator build compatibility

12. Server Introspection (3)

Tool

Purpose

td_get_capabilities

Report server capabilities

td_get_server_metrics

Get server performance metrics

td_describe_surface

Describe the full tool surface

13. Recommendations (3)

Tool

Purpose

td_recommend_official_component

Suggest official components

td_find_official_example

Find relevant official examples

td_explain_better_way

Suggest better approaches

14. TD 2025 Native (6)

Tool

Purpose

td_python_env_status

Inspect Python environment in TD

td_threading_status

Check threading configuration

td_logger_status

Inspect TD logger state

td_tdresources_inspect

Inspect TDResources categories

td_component_standardize

Audit/fix COMP standards

td_color_pipeline

Inspect color management pipeline

How To Use It (Practical Workflow)

  1. Connect MCP client to TDPilot.

  2. Ask for current project state.

  3. Request a scoped patch goal.

  4. Let agent apply changes in batches.

  5. Require end-of-task td_get_errors check.

  6. Save snapshot at stable milestone.

  7. 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 tdpilot

Local development runtime:

git clone https://github.com/dreamrec/TDPilot.git
cd TDPilot
uv sync
uv run tdpilot

TouchDesigner 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.json

  • mcp/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-only

Doctor Command

Run a final environment/runtime check:

tdpilot doctor
tdpilot doctor --json

Environment Variables

  • TD_MCP_HOST (default 127.0.0.1 — supports hostnames like desktop-3lurf0p.tail88651a.ts.net)

  • TD_MCP_PORT (default 9981)

  • TD_MCP_SCHEME (default http — set to https for Tailscale HTTPS or TLS-enabled setups)

  • TD_MCP_WS_PORT (default 9982)

  • TD_MCP_TRANSPORT (stdio or streamable_http)

  • TD_MCP_HTTP_PORT (default 8765)

  • TD_MCP_CAPTURE_QUALITY (default 0.3)

  • TD_MCP_STREAM_MAX_FPS (default 15.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/ -v

Planning 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

License

MIT

┌─────────────────────────────────────────────────────────────────────┐
│ dreamrec // TDPilot // live laugh love                             │
└─────────────────────────────────────────────────────────────────────┘

Available Tools

114 tools
td_analyze_frameA
Read-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 ProjectA
Read-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 PlanA
Destructive

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 DraftA
Read-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 TaskA
Read-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 DraftA
Read-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_analyzeA
Read-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_frameA
Read-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_dataA
Read-onlyIdempotent

Read CHOP channel data (values/samples).

Inputs: path (required), range, channels. Returns: result

td_clear_param_boundsB
Destructive

Clear parameter bounds for specific paths, or all bounds if paths is None.

Inputs: paths. Returns: result

td_cockpit_renderRender TD Brain CockpitA
Read-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_pipelineA
Read-onlyIdempotent

Inspect the color management pipeline in TouchDesigner: color space, gamma, display settings.

Inputs: no named parameters. Returns: object

td_component_notesA
Idempotent

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_standardizeA
Idempotent

Audit or fix COMP standardization: required custom parameters (Version, Help, Creator), extension, naming.

Inputs: path (required), fix. Returns: object

td_connect_nodesB
DestructiveIdempotent

Connect two nodes (source output → target input).

Inputs: source_path (required), target_path (required), source_index, target_index. Returns: result

td_cooking_infoB
Read-onlyIdempotent

Get cooking/performance info for a subtree.

Inputs: path, limit, recurse, sort_by. Returns: result

td_copy_nodeB
Destructive

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_nodeA
Destructive

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_parametersA
Destructive

Create or update a custom parameter page on a COMP.

Inputs: page (required), path (required), params (required). Returns: result

td_delete_nodeC
Destructive

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_dynamicsC
Read-onlyIdempotent

Asynchronous temporal dynamics observation (frame, cooking, events).

Inputs: path, sample_rate, observation_window. Returns: result

td_describe_surfaceA
Read-onlyIdempotent

Describe the MCP server surface: tool count, resource count, capabilities, version.

Inputs: no named parameters. Returns: object

td_detect_instabilityB
Read-onlyIdempotent

Detect instability signals: FPS, heavy cookers, critical errors.

Inputs: path. Returns: result

td_diff_snapshotsA
Read-onlyIdempotent

Diff two snapshots, or a snapshot against live state.

Inputs: snapshot_a (required), snapshot_b. Returns: result

td_disconnectB
Destructive

Disconnect a node's input or output connector.

Inputs: path (required), index, connector_type. Returns: result

td_emergency_stabilizeA
Destructive

Emergency stabilization: pause timeline, clamp safety, capture baseline snapshot.

Inputs: path. Returns: result

td_exec_pythonA
Destructive

Execute Python code inside TouchDesigner.

Inputs: code (required), timeout_ms, include_hints. Returns: result

td_explain_better_wayB
Read-onlyIdempotent

Suggest better official alternatives for a given intent, with gotcha warnings.

Inputs: intent (required), current_plan. Returns: object

td_find_official_exampleB
Read-onlyIdempotent

Search for official examples and snippets matching a query.

Inputs: query (required), family. Returns: object

td_geometry_dataA
Read-onlyIdempotent

Read SOP/POP geometry data (points/prims).

Inputs: path (required), limit, include_prims, include_points. Returns: result

td_get_activity_logA
Read-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_compatibilityB
Read-onlyIdempotent

Check if an operator type is compatible with a specific build.

Inputs: op_type (required), build. Returns: object

td_get_capabilitiesA
Read-onlyIdempotent

Detect MCP client capabilities plus server/component versions and runtime config. Returns a JSON envelope.

Inputs: no named parameters. Returns: result

td_get_connectionsB
Read-onlyIdempotent

Get upstream/downstream connections for a node.

Inputs: path (required). Returns: result

td_get_contentA
Read-onlyIdempotent

Read the text or table content of a DAT node.

Inputs: path (required). Returns: result

td_get_errorsA
Read-onlyIdempotent

Get errors + warnings for a node (optionally recursive).

Inputs: path, recurse, max_depth, include_hints. Returns: result

td_get_eventsA
Read-onlyIdempotent

Read recent runtime event history from the server-side event buffer.

Inputs: limit, event_type. Returns: result

td_get_focusA
Read-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_hintsA
Read-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_infoA
Read-onlyIdempotent

Get TouchDesigner project info: version, build, project name, OS. Returns a JSON envelope.

Inputs: no named parameters. Returns: result

td_get_macro_paramsC
Read-onlyIdempotent

Inspect parameters plus truthful capability, I/O, limitations, and completion status.

Inputs: macro_type (required). Returns: result

td_get_node_detailA
Read-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_nodesB
Read-onlyIdempotent

List the child operators (nodes) directly under a network path.

Inputs: path, type, limit, family, +3 more. Returns: result

td_get_operator_docC
Read-onlyIdempotent

Get full documentation card for an operator type or a specific node.

Inputs: op_type, node_path. Returns: object

td_get_param_helpB
Read-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_paramsB
Read-onlyIdempotent

Get parameter values and metadata for a node.

Inputs: path (required), page, names, response_format. Returns: result

td_get_popx_operatorA
Read-onlyIdempotent

Get full documentation for a POPx operator (e.g. 'Particle SIM', 'Shape Falloff').

Inputs: operator_name (required). Returns: object

td_get_release_deltaA
Read-onlyIdempotent

Get release notes for a specific build (default: current).

Inputs: build. Returns: object

td_get_server_metricsA
Read-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_vectorB
Read-onlyIdempotent

Aggregated scene state vector (cached for _tr.TD_STATE_VECTOR_TTL seconds).

Inputs: path, force_refresh. Returns: result

td_get_timescale_stateA
Read-onlyIdempotent

Read beat/phrase-derived timeline state (bars, beats, phrase position).

Inputs: bpm_hint, beats_per_bar. Returns: result

td_knowledge_getA
Read-onlyIdempotent

Fetch the full markdown body + metadata for one entry.

Inputs: entry_id (required), scope. Returns: result

td_knowledge_listA
Read-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_recallA
Read-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_familiesA
Read-onlyIdempotent

List available operator families (TOP, CHOP, SOP, DAT, COMP, MAT, POP). Returns a JSON envelope.

Inputs: no named parameters. Returns: result

td_list_macrosA
Read-onlyIdempotent

List all available macro templates (built-in plus user templates). Returns a JSON envelope.

Inputs: no named parameters. Returns: result

td_list_snapshotsA
Read-onlyIdempotent

List saved scene snapshots (newest first).

Inputs: limit. Returns: result

td_locationsA
Idempotent

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_statusA
Read-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_componentA
Read-onlyIdempotent

Look up a palette component by name or search by query.

Inputs: query, component_name. Returns: object

td_lookup_snippetsA
Read-onlyIdempotent

Search for OP Snippets by keyword and optional family.

Inputs: query (required), family. Returns: object

td_memory_exportA
Read-onlyIdempotent

Export the technique library as a portable JSON object for sharing or backup.

Inputs: scope.

td_memory_favoriteA
Idempotent

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_learnA
Read-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_listA
Read-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_preferencesB
Idempotent

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_promoteA
Idempotent

Copy a project technique to the global library so it's available across all projects.

Inputs: technique_id (required).

td_memory_recallA
Read-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 PatchA
Destructive

(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 PatchA
Read-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 PatchA
Read-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 TargetA
Read-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 PatchA
Read-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 DictA
Read-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_inspectB
Read-onlyIdempotent

Read structured POP metadata and attribute samples.

Inputs: path (required), count, start, delayed, +5 more. Returns: result

td_preflight_patchPreflight Legacy TD PatchA
Read-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_lifecycleC
Destructive

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_classesA
Read-onlyIdempotent

List available Python classes in the TD runtime. Returns a JSON envelope.

Inputs: no named parameters. Returns: result

td_python_env_statusA
Read-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_helpB
Read-onlyIdempotent

Get Python help documentation for a TD class/module.

Inputs: target (required). Returns: result

td_recommend_official_componentA
Read-onlyIdempotent

Recommend official palette or built-in operator components for a given goal.

Inputs: goal (required). Returns: object

td_rename_nodeA
DestructiveIdempotent

Rename a node to a new name within its parent network.

Inputs: path (required), new_name (required). Returns: result

td_restore_snapshotA
Destructive

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_screenshotA
Read-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_nodesA
Read-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_docsB
Read-onlyIdempotent

Search the knowledge corpus for operators, palette, releases, snippets, or articles.

Inputs: query (required), limit, family, card_types. Returns: object

td_search_popx_docsA
Read-onlyIdempotent

Search POPx operator documentation — GPU particles, falloffs, simulations.

Inputs: query (required), limit. Returns: object

td_self_updateA
Idempotent

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_contentA
DestructiveIdempotent

Write text or table content into a DAT node (overwrites existing).

Inputs: path (required), text, table. Returns: result

td_set_param_boundsB
Idempotent

Set parameter safety bounds with enforcement mode.

Inputs: bounds (required), enforce_mode. Returns: result

td_set_paramsA
DestructiveIdempotent

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_visualB
Idempotent

Stop a running visual-monitor job by its monitor id.

Inputs: path (required). Returns: result

td_stop_stream_topA
Idempotent

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_subscribeB
Idempotent

Subscribe to runtime TD events for a node.

Inputs: path (required), params, channels, threshold, +2 more. Returns: result

td_sync_diagnoseA
Read-onlyIdempotent

Strict version/auth sync diagnostic without exposing secret material.

Inputs: check_remote, include_live. Returns: result

td_sync_statusB
Read-onlyIdempotent

Report whether the local server, TD component, packages, and public surfaces are in sync.

Inputs: check_remote. Returns: result

td_tdresources_inspectA
Read-onlyIdempotent

Inspect TDResources available in the TouchDesigner installation: fonts, icons, defaults.

Inputs: category. Returns: object

td_threading_statusA
Read-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_timelineA
Read-onlyIdempotent

Read current timeline state: frame, seconds, FPS, playing. Returns a JSON envelope.

Inputs: no named parameters. Returns: result

td_timeline_setA
Idempotent

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_batch calls 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 TransactionA
Destructive

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_unsubscribeA
Idempotent

Remove a runtime-event subscription for a node path.

Inputs: path (required). Returns: result

td_validate_recipeValidate TD RecipeA
Read-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

    B3.1/5.0

    Scored across 114 tools

    Disambiguation2/5

    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.

    Naming Consistency4/5

    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.

    Tool Count1/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      A
      maintenance
      A Model Context Protocol server that enables AI agents to control and operate TouchDesigner projects through creation, modification, and querying of nodes and project structures.
      14
      1,411 npm
      627
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for controlling TouchDesigner from AI coding agents like Claude Code and Codex CLI, enabling operator manipulation, parameter control, and screenshot capture.
      12
      14 PyPI
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      A 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.
      2
      MIT