LLMSkillHub
mirroredCopied from dylanroscover/Embody under MIT. dylanroscover has not claimed this page, and is not affiliated with LLM SkillHub.

dylanroscover / mcp-tools-reference

MUST READ before first MCP tool call in a session. Complete Envoy tool catalog with parameters and usage.

0
SKILL.md
15.6 KB

<!-- Generated by Embody/Envoy - Do not remove this comment - sha:571893bf5ef1354c -->

Envoy MCP Tool Reference

Mutating TD-authoring operations are wrapped in TD undo blocks (one batch_operations call = one Ctrl+Z step); read-only tools, run_tests, cook_op and disk-only ops (export_network, save_externalization) are not. The contracts behind the multi-session, job, bridge and Convoy tools, and the fields that ride on every response (_logs, _peers, gates, recovery_hints, _effects), are in references/coordination.md in this skill's folder (get_guidance(topic='mcp-tools-reference/coordination') without a skills folder). The short version: a LAYOUT WARNING, THREADING WARNING or MULTI-SESSION GATE line in _logs is a hard stop, _peers with conflict: true is a hard stop, an error carries error_code plus recovery_hints to follow instead of retrying, and _effects on a write names the errors, fps drop and shader failures your write caused.

Operator Management

ToolParametersDescription
create_opparent_path, op_type, name?, language?Create a new operator (e.g., baseCOMP, noiseTOP, textDAT, gridPOP). Auto-positions it and hugs any docked companions below it (docks_placed). A textDAT starts as python; pass language (glsl, json, yaml, xml, text) for anything else
create_extensionparent_path, class_name, name?, code?, promote?, ext_name?, ext_index?, existing_comp?, parent_shortcut?Create a TD extension: baseCOMP + text DAT + extension wiring
delete_opop_path, override?Delete an operator (multi-session gated; override bypasses, say so). Refuses the Embody COMP, its ancestors, / and Envoy's extension DAT
copy_opsource_path, dest_parent, new_name?Copy operator to new location. Auto-positions the copy and hugs its docked companions (docks_placed)
rename_opop_path, new_nameRename an operator
get_opop_path, include_defaults?Returns NON-DEFAULT parameters by default (include_defaults=True for all); parameter-heavy COMPs are expensive (~3k+ tokens full), prefer read_tdxn for structure reads
query_networkparent_path?, recursive?, op_type?, include_utility?Compact operator list: path/type/family/depth; name = last path segment. include_utility=True includes annotations
find_childrenop_path, name?, type?, depth?, tags?, text?, comment?, include_utility?Advanced search using TD's findChildren
cook_opop_path, force?, recurse?Force-cook an operator

Parameter Control

ToolParametersDescription
set_parameterop_path, par_name, value?, mode?, expr?, bind_expr?Set value, expression, bind expression, or mode; rejects invalid Menu values with valid menuNames; sequence-block names auto-grow (const5name -> 6 blocks); reload and clone pulses on Envoy's own host are refused
get_parameterop_path, par_name?, search?, search_in?, depth?, max_results?, details?Single-parameter mode is compact by default (path, parameter, value, mode, label, mode-specific refs, menuNames); details=True restores default/style/range/menuLabels/menuIndex. Search mode (search glob or substring over name/value/expr/any across a subtree) ignores details
describe_op_typeop_type, pattern?, page?, include_menus?Parameter names, labels, styles, creation defaults and menu values for an operator TYPE before it exists. Call it once per unfamiliar type instead of guessing a name into set_parameter; pattern globs names AND labels, page narrows; unknown type -> did_you_mean, empty match -> hint. Cached per type

DAT Content

ToolParametersDescription
get_dat_contentop_path, format?DAT text or table ("text", "table", "auto"), or "stats" to reduce a table to per-column stats + head/tail rows
set_dat_contentop_path, text?, rows?, clear?, confirm_wipe?Full-replace DAT content. Refuses no-action calls and wipes (text="", rows=[], clear=True) unless confirm_wipe=True. For partial text edits prefer edit_dat_content
edit_dat_contentop_path, old_string, new_string, replace_all?, confirm_wipe?Surgical text edit on a text DAT; old_string must appear exactly once unless replace_all=True; not-found errors include diagnostics. Tables go through set_dat_content(rows=...)

CHOP / POP Data

Reduced reads, never a blind dump: a 4x600 CHOP is 2,400 raw floats; these return shape and range.

ToolParametersDescription
get_chop_dataop_path, channels?, samples?, compare_to?Per-channel min/max/mean/std/first/last, capped at 32 channels. channels is a name glob; samples>0 adds head/tail raw values; compare_to another CHOP adds a per-channel diff
get_pop_dataop_path, attributes?, samples?, max_points?Point/prim/vert attribute metadata (~0.02 ms at ANY point count). Reading point VALUES is a GPU->CPU readback (~9.5 ms at 16k points, ~69 ms at 160k), so samples>0 is opt-in and refused above max_points (default 50,000). POP.points() ignores its slicing arguments (verified 2025.33070), so the guard is on point count

Operator Flags, Positioning, Layout

ToolParametersDescription
get_op_flagsop_pathAll flags
set_op_flagsop_path, bypass?, lock?, display?, render?, viewer?, current?, expose?, allowCooking?, selected?, cloneImmune?, componentCloneImmune?, showCustomOnly?, showDocked?Set one or more flags; a flag the operator cannot carry comes back in unsupported_flags
get_op_positionop_pathPosition, size, color, comment
get_network_layoutcomp_path, include_annotations?Compact layout for all children: path/type/nodeX/nodeY/nodeWidth/nodeHeight plus bounding_box; docked ops carry dockedTo. Use instead of repeated get_op_position calls
set_op_positionop_path, x?, y?, width?, height?, color?, comment?Set position, size, color ([r,g,b] 0-1) or comment. Moving a host re-hugs its docked companions (docks_moved); position the host before any explicitly-placed dock
layout_childrenop_pathAuto-layout all children in a COMP

Annotations

ToolParametersDescription
create_annotationparent_path, mode?, text?, title?, x?, y?, width?, height?, color?, opacity?, name?Create annotation ("annotate", "comment", "networkbox"); load /manage-annotations first
get_annotationsparent_pathAll annotations with properties and enclosed operators
set_annotationop_path, text?, title?, color?, opacity?, width?, height?, x?, y?Modify annotation properties
get_enclosed_opsop_pathOps enclosed by an annotation, or annotations enclosing an op

Connections, Performance, Code

ToolParametersDescription
connect_opssource_path, dest_path, source_index?, dest_index?, comp?Wire two operators; comp=True for COMP connectors
disconnect_opop_path, input_index?, comp?Disconnect an input
get_connectionsop_pathAll input/output connections, one input entry per connector
get_op_performanceop_path, include_children?CPU/GPU cook times (ms), memory, cook counts
get_project_performanceinclude_hotspots?Project FPS, frame time, GPU/CPU memory, dropped frames, active ops, GPU temp; optional top-N COMP hotspots
run_soak_testduration_s?, interval_s?, fps_target?, label?, stop?, idempotency_key?Background performance soak (job id back immediately; poll get_job_status). Samples the Perform CHOP on the frame hook without cooking or capturing anything; logs perturbing Envoy calls and excludes their 2 s neighborhood from the clean stats; finishes with trends, exact drops, GPU headroom, hotspots and a PASS/WARN/FAIL verdict. stop=True ends it early. See /testing
execute_pythoncodeExecute Python in TD; set result to return values. Lints created ops (LAYOUT WARNING) and worker-side run() (THREADING WARNING); refuses code that would destroy or reload Envoy's own host (envoy.embody.host_destroy_refused), where me and parent() ARE the Embody COMP

Introspection & Diagnostics

ToolParametersDescription
get_td_info(none)TD version, build, OS, Envoy version
get_op_errorsop_path, recurse?Errors and warnings for op and children: cook errors, Python tracebacks (kind: "script", invisible to op.errors()), and GLSL compile failures (shaderErrors)
exec_op_methodop_path, method, args?, kwargs?Call a method on an operator (destroy-class methods on Envoy's host are refused)
get_td_classes(none)All Python classes in the td module
get_td_class_detailsclass_nameMethods, properties, docs for a TD class
get_module_helpmodule_namePython help text for a module
get_docsquery, section?, source?, max_chars?Official TD docs: offline mirror first, docs.derivative.ca fallback; returns title, source, sections_available, content; ambiguous offline lookups return matches
get_guidancetopic?THIS project's checked-in doctrine: the rules, the skills and their references/*.md (topic <slug>/<file>). Bare call lists topics; matching ignores case and punctuation. Worker-side, no TD round-trip. The only way clients with no skills folder (VS Code, Copilot, Windsurf) see them
get_focus(none)What the user is looking at: network, selected, current, rollover, target. "This operator" means the SELECTED/current op, never the rollover
get_sessions(none)Connected AI sessions, their recent scopes and claims, you, and the shared task ledger; check at session start and before destructive work
claim_scope / release_scopescope, note?, ttl?Cooperative WRITE lease on an op-path prefix, file:<path> or project:<name>; project:worktree-* claims are durable
announce_task / update_tasktitle, scopes?, note? / task_id, status?, note?, commit?The shared task ledger: announce substantive work, then done_uncommitted, committed (sha) or abandoned
preflight_landingworktree_pathLanding safety check for a worktree diff against main-tree dirt, peer claims and unsaved live TDXN state; run before porting any worktree diff

Embody Integration and TDXN

ToolParametersDescription
externalize_opop_path, tag_type?Tag and externalize an operator to disk in one step (load /externalize-operator first)
remove_externalization_tagop_path, delete_file?Remove tracking (tag + row + TDXN breadcrumb); check removed_anything, not removed_tags, to confirm cleanup
get_externalizations / get_externalization_status(none) / op_pathAll externalized operators / dirty state, build, timestamp, path for one
save_externalizationop_pathForce re-export an already-externalized operator
read_tdxncomp_path?, include_dat_content?, max_depth?, embed_all?Preferred for reading >=3 operators: the live network as a TDXN dict, ~20-90x fewer tokens than get_op+query_network walks. An authored-state snapshot, not a runtime probe: evaluated values, cook errors, output data, cook timing and runtime flags come from get_parameter, get_op_errors, get_dat_content/capture_top, get_op_performance, get_op_flags
export_networkroot_path?, include_dat_content?, output_file?, max_depth?, embed_all?Write .tdxn to disk; with output_file it returns a compact summary, not the document
import_networktarget_path, tdn, clear_first?, override?Recreate a network from a parsed TDXN document (gated with clear_first=True)
diff_tdxntarget?, max_changed_ops?, max_bytes?What is UNSAVED in TDXN networks (live vs on-disk), the view git cannot give. Omit target for a whole-project summary; a COMP path or .tdxn file for one COMP in full (old=disk, new=live). Committed history: plain git diff

read_tdn and diff_tdn remain as deprecated aliases.

Capture, Logs, Jobs, Bridge

ToolParametersDescription
capture_topop_path, format?, quality?, max_resolution?, inline?, sample_grid?Capture a TOP to a temp image (or an NxN RGBA grid with sample_grid>=2). The text carries a Quality verdict from the raw pixels: FAIL is a black, flat or fully-transparent frame. Never declare a visual task done on a FAIL
capture_opop_path, format?, quality?, max_resolution?, inline?Capture ANY operator: TOPs natively, every other family through a transient OP Viewer TOP
get_logslevel?, count?, since_id?, source?Recent log entries from the ring buffer (200 entries; the log files in Embody's Logfolder hold the rest)
run_testssuite_name?, test_name?, override?, background?, idempotency_key?, confirm_saved?Embody unit-test suites; background=True (recommended for full runs) returns a job id
get_job_statusjob_id?Status of background jobs (run_tests, save_project, update_embody, run_soak_test); omit the id to list recent jobs
save_projectidempotency_key?Save the project as a tracked job
update_embodyidempotency_key?Self-update Embody as a tracked job
get_td_status(none)Bridge-side: TD running, Envoy reachable, frozen-main-thread flags, instance registry, live sessions; works with TD down
launch_td / restart_tdtimeout?Launch or gracefully relaunch TD with the project's .toe
list_dialogs / dismiss_dialoginstance?, screenshot? / instance?, dialog?, action?See and clear the modal dialog that is freezing TD; call list_dialogs FIRST when every tool times out
switch_instanceinstance?, all_sessions?List TD instances or re-pin this session; pass instance=<name> on any tool for a single call (/multi-instance)
convoy_*see references/coordination.mdEighteen LAN work-relay tools: pin a node with convoy_select_node, then ordinary tools run there

Batch Operations

ToolParametersDescription
batch_operationsoperations, override?Several tool calls in one request; operations is a list of {"tool": str, "params": dict}; stops on the first error; one undo step

Use it for 3+ calls to the same tool (positioning, connecting, parameter setting, flags); use execute_python when you need conditionals, loops or computed values between operations.

{"operations": [
  {"tool": "set_op_position", "params": {"op_path": "/project1/noise1", "x": 400, "y": 0}},
  {"tool": "set_op_position", "params": {"op_path": "/project1/level1", "x": 800, "y": 0}},
  {"tool": "connect_ops", "params": {"source_path": "/project1/noise1", "dest_path": "/project1/level1"}}
]}

MCP Prompts

search_op(op_name, op_type?), check_op_errors(op_path), connect_ops(), create_extension_guide() are guide prompts, not tools.