Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_td_statusA

Check if TouchDesigner is running and Envoy is reachable. Returns connection state, crash detection, process liveness, and project config. Works even when TD is down. envoy_unresponsive / main_thread_stalled flag a TouchDesigner that is alive but frozen.

launch_tdA

Launch TouchDesigner with this session's pinned instance's .toe (unpinned: the registry default's). Use to start TD for the first time or restart after a crash. Waits for Envoy to become reachable before returning.

restart_tdA

Quit this session's pinned TouchDesigner gracefully and relaunch its .toe (unpinned: the registry default's). Other TD instances are never touched. Waits for the process to exit before relaunching. Use when TD is running but needs a fresh start.

switch_instanceA

Switch THIS session's TouchDesigner instance or list all registered instances. Omit the instance parameter to list available instances with their status. Provide an instance name (toe basename) to re-pin this session's bridge to that instance -- other sessions' routing is untouched unless all_sessions=true.

list_dialogsA

List the modal dialogs a TouchDesigner instance currently shows (ui.messageBox, missing-file and save-changes prompts, the license box, file pickers). Runs on the bridge, so it works while TD's main thread is blocked by the dialog and every Envoy tool is timing out. TD draws its own dialogs, so their text is not readable through the OS: pass screenshot=true to save a PNG of each one and Read it. Returns blocked=true when a dialog is up.

dismiss_dialogA

Dismiss a modal dialog that is blocking a TouchDesigner instance, then verify it is gone. Default action=auto runs the ladder close (WM_CLOSE) -> escape -> enter until the window disappears; the main TouchDesigner window is never a target. Use list_dialogs (with screenshot=true) first so you know what you are dismissing: close/escape decline a question, enter accepts its default.

get_convoy_statusA

Report this machine's Convoy host presence and, when it is running, its realm, peer, queue, and identity status. This is a host-only read and never wakes TouchDesigner. Explicit convoy_* tools use this host for remote routing; ordinary Envoy tools remain local until convoy_select_node explicitly pins this session to a Convoy node.

convoy_select_nodeA

Pin this MCP session's ordinary Envoy tool calls to one exact Convoy node. The selection survives peer dropouts and never falls back to local TouchDesigner. Call with no arguments to inspect the selection, or clear=true to restore direct local routing.

convoy_owletteB

Use Convoy's optional, host-private consumer of Owlette's published API for site/machine inventory, online detail, and command status. Command submission requires a separate local host opt-in and an idempotency key. Owlette is not the Convoy LAN transport and mcp_tool_call is always refused here.

convoy_list_nodesA

List the local and reachable remote Embody nodes known to this machine's Convoy host. Returns stable host/node/runtime identities, connection state, address, and version metadata. Local nodes carry a capabilities field (td_python, full_shell); remote nodes deliberately do not -- absent means unknown, never allowed.

convoy_update_embodyA

Self-update Embody on Convoy nodes to the latest GitHub release -- one node or the whole fleet -- without the TD Python grant. Dispatches the bounded update_embody operation (sha256-pinned manifest, downgrade-refusing) as a durable job per node and returns the handles; poll convoy_get_job. Nodes must run Embody >= 6.0.257 to serve the operation.

convoy_list_controllersA

List live controller sessions, selected targets, leases, and active work across reachable Convoy hosts. Read-only and never wakes TouchDesigner.

convoy_pingB

Measure Convoy reachability to one explicit node through the host-native ping operation. It reports the node's known online state without starting or waking TouchDesigner.

convoy_start_nodeB

Start one exact, previously registered offline TouchDesigner node from its host-pinned launch profile. No executable, path, argv, or environment is accepted from the caller.

convoy_restart_nodeB

Restart one exact running TouchDesigner node. The default require_clean policy refuses dirty, unsaved, or unverifiable state; save_then_restart explicitly saves first. Destructive restart policies are not exposed by this build.

convoy_callC

Relay one Envoy operation to an explicit Embody node. The target is always identified by host_id and node_id; Convoy never silently falls back to a local TouchDesigner instance.

convoy_batchA

Run one ordered Envoy batch on each explicit Convoy target. Targets execute independently and may run concurrently; the result preserves input order and reports partial success. This does not promise distributed atomicity or rollback.

convoy_get_jobB

Read a previously relayed Convoy delivery from its owning peer. Use the target_host_id, convoy_id, and delivery_id returned by convoy_call.

convoy_ack_jobA

Acknowledge that this controller has safely observed one terminal Convoy delivery. This idempotent call lets the target release protected result artifacts and eventually reap the job. Verified artifact downloads and successful artifact saves acknowledge automatically; use this tool for other terminal results or to retry an indeterminate acknowledgement.

convoy_get_artifactA

Materialize one private Convoy artifact from its owning host onto this client machine. Images are returned as MCP image content; other files are verified and returned as a local temporary path. Use the artifact reference returned by a Convoy job rather than copying a remote filesystem path.

convoy_save_artifactB

Verify one Convoy artifact and explicitly save it in this bridge project's .embody/convoy/artifacts directory. The project is derived from this Envoy bridge's own configuration; remote paths and caller-selected project roots are never used. Existing files are preserved unless overwrite is true.

convoy_send_fileA

Send one file from this bridge's project to a Convoy node. The source must resolve inside this project. By default it lands in the target project's .embody/convoy/inbox/; with worktree= at dest inside the target's sibling -wt- worktree (create one with convoy_call convoy_git worktree_add); with live=true at dest inside the live project, which needs Allow Execute TD Python on the target because a synced .py reloads into TouchDesigner. dest defaults to the file name for the inbox and to the file's own project-relative path otherwise. Existing files are kept unless overwrite is true.

convoy_cancel_jobA

Request cancellation from the exact host that owns a durable delivery. Queued work cancels definitively; an active host subprocess receives best-effort process-tree cancellation. TouchDesigner work already past its host boundary is reported as non-cancellable, never simulated. Cancellation never wakes TouchDesigner.

convoy_forget_nodeA

Delete a stale node row (the row a renamed, moved, or deleted project left behind). Without host_id it acts on THIS machine's Convoy host app; with host_id (the owning host from convoy_list_nodes) the request is relayed to that host over its live session and its rules decide. Refuses while the node still has a delivery that has not FINISHED, and names the blocking delivery ids so they can be cancelled; a finished result never holds a row, because results are fetched by delivery id and outlive it; an online row is never forgotten. Rows unseen for a week are evicted automatically; this is the immediate manual path. The Convoy page's Forget Offline Nodes... button is the in-TD bulk equivalent, fleet-wide, with an enumerating confirmation.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 24 tools

Disambiguation4/5

Tools have largely distinct purposes: local TD lifecycle (get_td_status, launch_td, restart_td) versus Convoy remote orchestration (convoy_list_nodes, convoy_call, convoy_get_job) versus dialog handling. Minor potential confusion exists between switch_instance and convoy_select_node (both change routing) and between get_convoy_status and convoy_list_nodes, but descriptions differentiate them.

Naming Consistency4/5

All names use snake_case, with a clear convoy_ prefix for most remote Convoy tools and no prefix for local bridge tools. Exceptions like get_convoy_status (Convoy-related but unprefixed) and convoy_owlette (noun rather than verb_noun) are minor deviations; overall the pattern is readable and consistent.

Tool Count3/5

24 tools is on the heavy side for a single MCP server. While the domain (distributed TouchDesigner orchestration) justifies many operations, some niche tools such as convoy_owlette, convoy_forget_node, and convoy_ack_job could potentially be consolidated or exposed as options, placing it in the borderline 16-25 range.

Completeness4/5

Covers local TD launch/status/restart, dialog management, and extensive Convoy node/job/artifact lifecycle (list, start, restart, forget, update, call, batch, cancel, ack, get/save artifact, send file). Missing a direct local quit without relaunch and a way to discover available Envoy operations for convoy_call, but core workflows are present.

Maintenance

ActivityActive
ResponsivenessResponsive