本文へ移動
cccskills
無料GitHub で公開

tdmcp-bridge-endpoint

Build a tdmcp TouchDesigner-bridge vertical slice the house way — promote an op from /api/exec to a first-class REST endpoint (e.g. POST /api/connect, GET /api/logs, node_detail flags), add its typed method in src/td-client/touchDesignerClient.ts, its Zod envelope in src/td-client/validators.ts, rewire the tool(s) to prefer the endpoint with an exec fallback, and write py_compile + td/tests unittest + offline msw client tests. Use when adding/changing a bridge REST endpoint, editing td/, extending node_detail/get_bridge_logs, promoting connect/disconnect/param-modes/DAT-text off exec, or doing any exec→REST work — especially the td-depth bridge-robustness backlog. Honors probe-live discipline when TouchDesigner is offline.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

tdmcp-bridge-endpoint — the bridge vertical slice

A bridge feature is correct only when four layers agree on one shape: the Python route, the TS client method, the Zod validator, and the tool that consumes it. This skill is that contract. Build the slice top-to-bottom, keep an exec fallback so it ships safely before every bridge in the wild updates, and prove it all offline.

Run bridge slices one at a time — they share touchDesignerClient.ts, validators.ts, and the bridge route registry. Two in parallel is merge hell.

Why exec→REST at all

The bridge runs arbitrary Python on /api/exec. A security-conscious VJ runs TDMCP_BRIDGE_ALLOW_EXEC=0 on a venue network — and ~69 tools silently die. Promoting a well-defined op (connect, param-mode read/write, DAT text, node flags, logs) to its own REST route makes it survive that hardened config. You are promoting proven logic, not inventing it — start from the Python the tool already sends through /api/exec.

The slice, in order

1. Bridge (Python, td/)

  • Add a handler module (or extend the right existing one) and register the route. Find how routes are registered (the request dispatcher in td/) and follow that exact pattern — don't invent a second mechanism.
  • Keep every TD-global (op, app, project, ui) inside the handler function so the module imports cleanly outside TD (the tests rely on this).
  • Return a JSON report with a stable shape: a top-level ok/error and the data. Mirror the envelope the existing endpoints return so parsePythonReport/the validators stay uniform.
  • Honor TDMCP_BRIDGE_TOKEN (bearer auth) and the ALLOW_EXEC gate exactly as sibling routes do — a new route must not become an auth bypass.
  • python3 -m py_compile td/**/<changed>.py on every changed file.

2. Client method (src/td-client/touchDesignerClient.ts)

  • Add one typed method that calls the new route (GET/POST/PATCH/PUT as fits).
  • Map failures to the existing typed errors: TdApiError (4xx/5xx with a body), TdConnectionError (refused/DNS), TdTimeoutError. Never let a raw fetch error escape.
  • Exec fallback: if the endpoint returns 404 (older bridge without the route), fall back to the previous /api/exec Python path. This is what lets the promotion ship before the bridge is reinstalled everywhere. Make the fallback a private helper so the test can force both paths.

3. Validator (src/td-client/validators.ts)

  • Add a Zod schema for the response envelope and .parse() it in the client — never hand a raw wire object upward. Reuse the shared envelope helpers already in the file.

4. Rewire the tool(s)

  • Point connect_nodes/disconnect_nodes/read_parameter_modes/ set_parameter_expression/edit_dat_content/set_dat_content/get_bridge_logs/ the node_detail consumers at the new method. Preserve current behavior and output exactly — this is a transport swap, not a redesign. Keep fail-forward: validate inputs with Zod, turn TD failures into friendly isError via errorResult/friendlyTdError; never throw out of a handler.

Probe-live discipline (when TD is offline)

Attribute names that vary by TD build are the trap: connector semantics for connect/disconnect, ParMode/.expr/.mode names for param-modes, Error DAT column layout for logs, optype enumeration for createable. The backlog flags these probe-live.

  • TD reachable (get_td_info ok): probe the real names in a scratch network first (create a couple of ops, read the actual attrs), then lock the schema.
  • TD offline: implement against the best-known names from the knowledge base (tdmcp://operators/..., tdmcp://classes/...) and TD's documented Python API; write the offline tests; and flag every probe-dependent assumption UNVERIFIED-live in your report (with the source you used). Do not claim a live pass you could not observe. The campaign-lead holds UNVERIFIED-live items for a live pass before the final release.

Tests (offline — no TD)

  • Bridge unittest td/tests/test_<name>.py: import the handler, call it with a faked op()/payload, assert the report shape and the error branch. At minimum py_compile. Run python3 -m unittest discover -s td/tests.
  • Client msw test tests/unit/*: stub the route; assert (a) success → validated shape, (b) 4xx/5xx → correct TdError subclass, (c) timeout → TdTimeoutError, (d) 404 → exec-fallback path returns the same shape. Mirror the closest existing client test.

Gates (all green before reporting)

npm run typecheck · npm run build · ./node_modules/.bin/biome check . (NOT npm run lint) · npm test · npm run test:bridge. Fix forward; never disable a gate or use --no-verify.

Report back

Endpoint(s) added + method + validator; tool(s) rewired; the exec-fallback behavior; every UNVERIFIED-live assumption with its source; gate results; and the ledger fields to set (files[], status). On a re-run, treat feedback as a diff — don't rewrite a green slice.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Write operator-facing and public documentation plans for AI-Controlled Party mixer/Soundcraft Ui24R scene arming. Use for runbooks, rehearsal checklists, show-day checklists, EN/PT docs updates, demo scripts, safety wording, and follow-up documentation revisions.

日本語の概要は準備中です。原文の説明を表示しています。

Pantani/tdmcp502026年8月16日 更新

Authoritative reference for submitting tdmcp to the Anthropic Connectors Directory as a Codex Desktop Extension (MCPB). Use whenever drafting, checking, or fixing the submission — it defines the two submission paths, why tdmcp is a Desktop Extension (never a remote connector), every form field, the rejection-causing gates, and the local-only compliance story. Read this before writing any submission deliverable.

日本語の概要は準備中です。原文の説明を表示しています。

Pantani/tdmcp502026年8月16日 更新

Authoritative reference for submitting tdmcp to the Anthropic Connectors Directory as a Claude Desktop Extension (MCPB). Use whenever drafting, checking, or fixing the submission — it defines the two submission paths, why tdmcp is a Desktop Extension (never a remote connector), every form field, the rejection-causing gates, and the local-only compliance story. Read this before writing any submission deliverable.

日本語の概要は準備中です。原文の説明を表示しています。

Pantani/tdmcp502026年8月16日 更新

How to migrate the tdmcp Claude Desktop bundle from legacy .dxt to .mcpb (MCP Bundle) and keep it building — covers the manifest schema (verify against the installed packer, never hardcode), the build-mcpb.mjs packer/zip-fallback flow, the npm scripts, and the full .dxt→.mcpb reference sweep across docs and scripts. Use when packaging or migrating the tdmcp desktop bundle.

日本語の概要は準備中です。原文の説明を表示しています。

Pantani/tdmcp502026年8月16日 更新

How to migrate the tdmcp Codex Desktop bundle from legacy .dxt to .mcpb (MCP Bundle) and keep it building — covers the manifest schema (verify against the installed packer, never hardcode), the build-mcpb.mjs packer/zip-fallback flow, the npm scripts, and the full .dxt→.mcpb reference sweep across docs and scripts. Use when packaging or migrating the tdmcp desktop bundle.

日本語の概要は準備中です。原文の説明を表示しています。

Pantani/tdmcp502026年8月16日 更新

Review, harden, and test the safety policy for AI-Controlled Party mixer/Soundcraft Ui24R scene arming. Use for approval gates, blocked mixer operations, hazardous request handling, venue validation, bypass attempts, QA, risk review, or follow-up safety changes.

日本語の概要は準備中です。原文の説明を表示しています。

Pantani/tdmcp502026年8月16日 更新

Pantani のスキルをすべて見る

このスキルの問題を報告する