Skip to content

Releases: mrinalghosh/touchdesigner-mcp

v0.2.1 — Fan docked companion ops

Choose a tag to compare

@mrinalghosh mrinalghosh released this 20 Jul 02:35
dae8c50

Layout fix for auto-spawned docked companion ops. Creating a GLSL TOP spawns docked companion DATs — <name>_pixel (your fragment shader), <name>_info, <name>_compute — beneath it. TD only carries docked ops along on a UI drag; every placement tool here sets nodeX/nodeY from Python, which moved the host alone and stranded the companions across the network with a long dock-tether line.

Changes

  • move_operator and build_network re-fan docked ops after placing a host. A shared _fan_docked helper snaps a host's docked companions into a clean row directly beneath it (_pixel/_vertex shader closest, right under the TOP) — the native spawn layout, re-applied.
  • tidy_docked tool — repair pass for networks already sprawled. Pass a single op, or a COMP with recursive=true to sweep nested COMPs. Returns {tidied, companions}.
  • glsl_top_vec4_uniform template no longer leaves an orphan DAT — it writes the starter shader into the auto-spawned _pixel DAT (pixeldat.eval()) instead of a redundant _shader DAT, then fans.
  • Docked-op gotcha shipped in CLAUDE.md and the MCP server instructions.

Verified live against TouchDesigner 2025.32460.

Install

Download touchdesigner-mcp.mcpb below and double-click it in Claude Desktop, then drag td_component/touchdesigner_mcp.tox into /project1 in TouchDesigner. See the README for setup.

Full changelog: https://github.com/mrinalghosh/touchdesigner-mcp/blob/main/CHANGELOG.md

v0.2.0

Choose a tag to compare

@mrinalghosh mrinalghosh released this 20 Jul 01:08
6eac223

A context-and-round-trip reduction pass for the TouchDesigner MCP bridge, plus three latent serialization fixes. The bridge itself is frame-locked (~17 ms/call); the real cost was many sequential tool calls and oversized results bloating the model's context. This release attacks both.

Install

1. Server half (Claude Desktop): download touchdesigner-mcp.mcpb below and double-click it to install. Fill in the TD host/port form (defaults: 127.0.0.1:9980, path /mcp).

2. TouchDesigner half: the .mcpb also bundles td_component/touchdesigner_mcp.tox. Drag that component into /project1 (or any persistent COMP) — it ships a pre-wired Web Server DAT with the callbacks attached — and save your .toe. See the README for the manual fallback.

⚠️ The bridge executes arbitrary Python against your live project. Keep the Web Server DAT bound to 127.0.0.1 and never expose the port to the open internet.

What's new

  • build_network — batch create/wire/param/layout in a single main-thread exec, collapsing a many-POST network build (e.g. 6 ops + 5 wires + 3 params = 14 round-trips) into one call.
  • Bridge result size cap — 500 items/level, 100 KB/string, depth 6, with explicit truncation markers, so an accidental op('/').children or dumped DAT table can't land megabytes in the model's context.
  • get_module_help scalpel modes — new grep= and member= params slice a class's help (~70× smaller for one member) instead of dumping ~40 KB.
  • Efficiency + gotcha doctrine now ships as MCP server instructions, so it travels to every install in any client (repo-scoped CLAUDE.md/skills can't reach end users).

Fixes

  • numpy scalars/arrays serialize as numbers, not str()np.int64/np.float32/np.bool_ were serializing as an opaque '5' instead of 5; now duck-typed via tolist().
  • Non-finite floats emit valid Pythonrepr(float('inf')) was a NameError when the generated code ran in TD; _lit now rewrites inf/-inf/nan to float(...) calls, recursing through containers.
  • Screenshots exempt from the size cap — the string cap would clip a base64 PNG and break base64.b64decode; large intentional payloads now pass through uncapped, and truncation markers are ASCII.
  • Bundled .tox re-saved — the embedded callbacks now match webserver_callbacks.py, so all of the above ship live in the drag-and-drop component with no manual re-paste.

Full log: CHANGELOG.md