gma3-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gma3-mcpset fixtures 1 through 4 to red and store that as cue 1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gma3-mcp
An MCP server for grandMA3 onPC. Connect an MCP client to inspect show data, program fixtures, store and edit cues, control playback and faders, and search the manual installed with onPC. Arbitrary Lua execution is available as a separate, opt-in capability.
Get started
Choose the guide for the computer running grandMA3 onPC and your MCP client:
Platform | Setup guide |
macOS | |
Windows |
Both guides cover building the server, copying the plugin, importing it into onPC, configuring your MCP client (ChatGPT desktop, Claude Code or Claude Desktop), and checking the connection. Start with the native setup for your platform. For ChatGPT in a browser, see ChatGPT web.
Running the MCP client on a different computer? See remote access over SSH. For container deployment, see Docker.
The documented live verification baseline is grandMA3 onPC 2.5.1.0 on macOS. Windows instructions are provided, but this does not establish equivalent live validation on Windows or other onPC versions. See the tested platform/version matrix for the distinction between live probes, automated checks and deployments still awaiting qualification.
Related MCP server: blender-ai-mcp
What you can do
Area | Capabilities |
Show inspection | Sequences, cues, executors, fixtures, pools, object properties and children |
Fixture programming | Select fixtures, set attributes, RGB color and position, clear the programmer |
Cue workflows | Create, merge, overwrite, label, time, trigger, go to and delete cues and parts |
Playback | Sequence and executor actions, faders, executor assignment and labeling, executor functions and sequence playback settings (Wrap Around, priority, restart, locks) |
Busking authoring | Sequence and Macro executor assignments; custom key/encoder commands, MA encoder functions, collision-checked size changes and existing configuration load/recast; Layout pool creation and element editing with geometry, actions, appearances, exact text and visibility |
Groups and MAtricks | Groups from explicit selection-grid cells or row, rectangle and mirror helpers (stored, read back and recall-checked), group and selection grid reads, MAtricks objects with wings, blocks, groups and fade/delay/phase/speed distributions |
Presets | Store the programmer into presets with explicit mode (selective, global, universal), forced conversion, merge/overwrite, scope, attribute and layer filters, embedding and input filter, refusing unrequested content and verifying the stored rows; read preset content, references and dependencies |
Phasers | Build effects from structured steps or templates (dimmer chase, alternating colours, pan/tilt circle) with step timing, phase distribution, direction, repetition and speed, in the console's Preview environment, stored as presets and read back step by step; explicit audition and release |
Recipes | Read, add, change, reorder and remove recipe lines in presets and cue parts; cook a preset, cue part, cue or sequence with an explicit option after listing the affected targets and their predicted coverage, protecting uncooked cue data |
Structured inspection | Fixture attributes, programmer values, fixture output, DMX and supported cue contents |
Reference | Installed manual, optional separately managed versioned documentation index with source-linked command/Lua extracts, live Lua API descriptions and the |
Advanced control | Command-line commands and optional Lua execution |
Console input (opt-in) | Logical MA keys, raw PC keys, text and bounded input sequences with explicit ownership, once the operator enables input on the console |
See the complete tool and configuration reference. Workflow tools report command outcomes and read-back verification separately; an uncertain outcome requires inspecting console state before trying the command again. Some console data is unavailable through the API and is reported as a limitation, rather than invented or returned as a misleading zero.
How it works
MCP client → stdio → Node.js MCP server → local TCP bridge → grandMA3 onPCThe Lua bridge plugin runs inside onPC and listens on 127.0.0.1:9800.
The MCP server translates tool calls into bridge requests. Both parts are required for
show inspection and workflow tools. The plugin also carries three instance-based
console interaction modules (owned input sessions, read-only feedback, continuous-control
admission) as extra components of the same XML. Input is off by default; the operator enables it per start on the console
keyboard backend (input=keyboard, real key presses through Keyboard()), the owned-Quickey backend
(input=quickey, real key presses through a provisioned Quickey bank on reserved executors), both on one instance
(input=mixed, the Quickey default with per-key Keyboard() overrides; combinations that are not qualified are refused)
or the fake backend (input=fake, events recorded only). The structured input tools (gma3_hardkey, gma3_keyboard,
gma3_type, gma3_input_sequence, gma3_input_interaction, status and release) expose it; while input is
owned by any client, the bridge refuses commands, property changes, playback, faders and Lua from every client
with an explicit [busy] error instead of running them into a changed console state. The read-only
feedback tool (gma3_feedback) observes command text, masters, Preview, page, selection,
executor assignment, fader levels and sequence activity without Lua, input or a free bridge.
gma3_command also supports write-only OSC when OSC input is configured in onPC. Automatic fallback
happens only if the bridge cannot be reached before dispatch; a command with an uncertain result is
never automatically replayed. gma3_start_bridge can start an already-imported plugin over OSC.
OSC is optional for the normal bridge setup and is not forwarded by an SSH tunnel. gma3_osc, gma3_configure_osc and
gma3_test_osc_input read, configure and test the console's OSC (see docs/tools/osc.md).
Before using it in a show
Tools operate on the live show and can change the programmer, playback and stored show data. Start with a disposable show and read-only queries. Save your show when you want show changes to persist; commands and enabled Lua can also perform file operations.
The bridge has no authentication. It accepts loopback connections only, so local applications can access it. Use the documented SSH setup for remote access.
Arbitrary Lua is disabled on the bridge by default. Its execution budget is best effort and is not a sandbox or a cancellation guarantee. Read Lua execution and hook policy before enabling it.
Commands that open a blocking dialog can stall the plugin. Use
/NoConfirmationwhere appropriate.
Documentation
Workflow details: fixtures, cues, executors, inspection, console input, console feedback, patch, playback configuration, groups and MAtricks, presets, phasers, recipes, speed masters and tempo, macros, timecode shows
Show setup from scratch: field-test gaps and fixes (SU-01 .. SU-10)
Claude Code skill for building a show on the MA Show Start: link it into your skills from this checkout with
mkdir -p ~/.claude/skills && ln -s "$PWD/docs/skills/gma3-show-build" ~/.claude/skills/Hardkey, keyboard and feedback feature requests and evidence, console interaction modules
Indexed documentation integration, general Layout authoring, and local authoring qualification
Tested platform/version matrix and pinned modules for independent consumers
Contributing and security
Please follow the code of conduct. See accessibility guidance and reporting for interface and documentation barriers. See contribution guidance for bug reports, development checks and pull requests. Report suspected vulnerabilities privately using the security policy.
License
grandMA3 and MA Lighting are trademarks of MA Lighting Technology GmbH. This project is independent and is not affiliated with, endorsed by, or supported by MA Lighting. No MA Lighting documentation, code, or libraries are redistributed here: help reads your installed manual or an explicitly configured, separately managed local index at runtime, and the bridge plugin uses the LuaSocket and JSON libraries already shipped inside onPC.
Available Tools
117 toolsgma3_apply_presetApply a preset to fixturesA
Recall a stored preset into the programmer for an explicit target: At Preset <pool>.<number> (or a preset by name). Target: fixtures OR use_selection: true (with fixtures, ClearSelection and a select first). Pre-checks (nothing sent on failure): the preset exists, and the target is not empty. Both matter: the console answers OK and changes nothing for a missing preset or an empty selection. A preset applies to every fixture that has its attributes, whatever type it was stored from. Read-back: every selected fixture (or its cells) must hold programmer values linked to the preset (the channel's preset link; needs bridge 0.27.0); a fixture the preset holds nothing for is a mismatch. Never clears programmer values.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | Preset pool number: 1 Dimmer, 2 Position, 3 Gobo, 4 Color, 5 Beam, 6 Focus, 7 Control, 8 Shapers, 9 Video, 21.. All. | |
| preset | Yes | Preset number in the pool, or its name. | |
| verify | No | Read the programmer back and check the preset links (default true). | |
| fixtures | No | Explicit target: fixture IDs/ranges ("1 Thru 5", "1 + 3 + 5 Thru 8", "Fixture 101.1") or a group ("Group 5"). Exactly one of fixtures / use_selection is required. | |
| use_selection | No | Apply to the fixtures currently selected on the console (explicit opt-in). Fails before sending when nothing is selected. | |
| add_to_selection | No | With `fixtures`: keep the fixtures already selected and add the target to them, so previously selected fixtures ALSO receive the values (explicit opt-in). Default false: ClearSelection is sent first so exactly the named fixtures are targeted. ClearSelection only deselects; programmer values are never cleared. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it discloses that nothing is sent when pre-checks fail, that the console can answer OK yet change nothing, that ClearSelection is issued with `fixtures`, that a bridge version (0.27.0) is needed for link read-back, and that programmer values are never cleared. These are exactly the side-effect and failure-mode facts an agent cannot infer elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the target contract, then pre-checks, then read-back. It is dense and technical but nearly every clause carries operational information; the read-back sentence is the only one that takes a second pass to parse (fixtures vs. cells, mismatch definition).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation tool with no annotations and no output schema, the description covers preconditions, targeting, non-obvious failure modes, verification behavior, and destructive scope (never clears programmer). Nothing material an agent needs to invoke it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds cross-parameter semantics the schema does not: the mutual exclusivity of fixtures/use_selection, the implicit ClearSelection-then-select behavior tied to add_to_selection's default, and that a preset applies to any fixture holding its attributes regardless of storage type. That is genuine meaning beyond field-level docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Recall a stored preset into the programmer') plus the console syntax it emits (`At Preset <pool>.<number>`). This clearly separates it from the sibling write-side tools like gma3_store_preset and the generic gma3_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the targeting contract (fixtures OR use_selection: true) and the preconditions that must hold, and explains the failure semantics of an empty target or missing preset. It stops short of naming sibling alternatives (e.g. gma3_preset for inspection, gma3_select for selection) or when not to use it, so it is strong but not fully routable on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_assign_cell_layoutMove fixtures to another layout of their fixture typeA
Moves fixtures to another fixture type that is a layout copy of theirs (as gma3_layout_cells scope own creates) or back to the original, so several fixtures share one layout. The target type must have a DMX mode of the same name with the same channels and footprint (refused otherwise). Runs one patch session (isolation-checked, committed with no undo); FIDs, addresses, cells, groups and preset values are kept. Requires exclusive: true. A clean success lists each fixture as {fid, type: [before, after]} in items. Needs bridge 0.29.0.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | The layout type (number or name). | |
| detail | No | Return the full result on a success too: every step's detail and each fixture's state before and after (default false: a clean success, committed and read back matched or not requested, lists one entry per fixture in items; anything else is always returned in full). | |
| verify | No | ||
| fixtures | Yes | ||
| exclusive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it discloses that the call runs one patch session, is isolation-checked, is committed with no undo, and requires exclusive access. It also states what is preserved (FIDs, addresses, cells, groups, preset values) and the minimum bridge version, which is exactly the mutation risk an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then preconditions, then side effects and return shape — a logical order with no filler sentences. The heavy parenthetical asides make it dense to parse in one pass, so it is efficient rather than elegant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description supplies the safety profile, the preconditions, the preserved state, the return payload shape and the version requirement. The only omission is the meaning of `verify`, which is a minor gap against otherwise complete coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, yet the description compensates well: it constrains the target `type` to a layout copy with a matching DMX mode name/channels/footprint, states that `exclusive: true` is mandatory, and explains the `detail` flag's return behavior and the items shape on clean success. The gap is `verify`, which is undocumented in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Moves fixtures to another fixture type') and immediately narrows it with the key qualifier that the target must be a layout copy of theirs, or a move back to the original. That distinguishes it clearly from the sibling gma3_layout_cells, which is named as the tool that creates those layout copies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('so several fixtures share one layout') and an explicit precondition for the call to succeed: the target type must have a DMX mode with the same name, channels and footprint, otherwise it is refused. It also states that exclusive: true is required. It stops short of an explicit when-not-to-use case beyond the refusal condition, which keeps it off a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_assign_tagAssign or remove a tag on objectsA
Assign a tag to objects, or remove it (off: true), with Assign [Off] Tag n At , and read back every object's tags. The tag is given by number or exact name and must exist (the console answers OK to an unknown tag and changes nothing); a name is resolved to its number first, and a name more than one tag has is refused. target is a command-line reference with numbers: "Sequence 950 Thru 952", "Group 5", "Macro 3", "Macro 3.1" (a line), "Sequence 5 Cue 2" (the tag lands on the cue's Part 0 and is reported there), "Preset 4.1", "Tag 7". data_pool addresses the objects of another data pool. Fixtures cannot carry tags. protect sets the Protect flag of each reference: Kill Instant turns the other tagged sequences off when one starts; Kill Delayed does so after the started cue's in-fade; a reference with protect keeps running (live, onPC 2.5.1). Needs bridge 0.36.0. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| off | No | Remove the tag from the objects instead. | |
| tag | No | Tag number or exact name. Required unless assignments is given (it may then be a default). | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| target | No | The objects. Required unless assignments is given. | |
| verify | No | Read back (default true). | |
| protect | No | Set the Protect flag of these references (default: left as it is). | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| assignments | No | Batch form: several {tag, target, off, protect, data_pool}; tag and data_pool may be given once for all. | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so unusually well: it warns that the console answers OK to an unknown tag and changes nothing, that ambiguous names are refused, that verify defaults to true with read-back, and that protect sets Kill Instant/Kill Delayed flags. It also discloses batch semantics — items run in order, nothing is retried, an unknown outcome halts the rest, and one line is returned per item.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and nearly every sentence carries actionable information, but the whole definition is one dense run-on paragraph that mixes purpose, tag resolution, target syntax, protect semantics, version requirements and batch rules. Bullets or sentence breaks would make the same content easier to scan without cutting anything.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no annotations and no output schema, the description covers every parameter, the batch/single duality, per-item outcomes, and the read-back behavior that stands in for a return-value contract. Nothing an agent needs in order to invoke it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning beyond the schema: concrete target formats ('Sequence 950 Thru 952', 'Macro 3.1', 'Sequence 5 Cue 2' landing on Part 0), what data_pool addresses, and the default-inheritance rule for batch items ('the other arguments are defaults for every item'). These are semantics the schema alone would not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource pair ('Assign a tag to objects, or remove it (off: true)') and even maps it to the console command 'Assign [Off] Tag n At <objects>'. The constraint that the tag 'must exist' implicitly separates it from tag-creating siblings like gma3_store_tag, but no sibling is named explicitly, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use context (target reference syntax with examples, batch form for multiple objects) and an explicit when-not ('Fixtures cannot carry tags'). It stops short of pointing at alternatives such as gma3_store_tag or gma3_configure_tag when a tag does not yet exist, which is the one routing decision an agent would still have to make on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_assign_to_executorAssign an object to an executorA
Assign a sequence or macro to an executor on an explicit page: give sequence for compatibility or object (Sequence , Macro , optionally DataPool ). Sends 'Assign At Page .'. Before sending anything it checks read-only that the sequence and the page exist and what the executor currently holds; an executor holding a different object is only replaced with replace: true (otherwise the call fails with the previous assignment in the result), and an executor that already holds this sequence is left alone (alreadyAssigned: true, no command sent). Optional label: sends 'Label Page . ""' after assigning. On grandMA3 an executor has no label of its own: it shows its assigned object's name, so this RENAMES THE ASSIGNED OBJECT itself, everywhere it appears (pools, other executors). If labelling fails after the assignment the outcome is partial. Does not change the fixture selection or the programmer and never sends Go/On/Off/Toggle or any playback keyword; whether the console changes the selected sequence on assignment is not controlled by this tool. verify (default true) reads the executor back and compares the assigned object by address, name and class and, when a label was given, the executor's displayed name and the object's own Name; executor configuration, fader/key functions and playback state are NOT verified. Mutations from this server are serialised, but another operator or client can still change the executor between the inspection and the assignment. Batch form (assignments): each target executor is checked to be empty or to hold that sequence already, unless replace is given for that item (or for the whole call); a target listed twice is refused. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Executor page number (1-9999). The page must already exist; the tool does not create pages. Required unless assignments is given (it may then be a default for every item). | |
| label | No | Optional new name for the assigned sequence (an executor displays its assigned object's name). Names must not contain \ " $ & * ? , . ; ^ { } | ~ (the console strips them); leading/trailing spaces are trimmed. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| object | No | One Sequence or Macro reference by number, optionally DataPool <n> qualified. Give object or sequence, never both. Must exist. | |
| verify | No | Read the executor (and the sequence, when labelled) back and compare (default true). | |
| replace | No | Replace an executor that holds a different object (default false: fail and report the previous assignment). | |
| executor | No | Executor number on that page: 101-190 (keys), 201-290 (faders), 301-390 and 401-490 (knobs), plus the Xkeys 191-198 and 291-298. Required unless assignments is given. | |
| sequence | No | Sequence number to assign (must exist). Give sequence or object; omit single-source fields with assignments. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| assignments | No | Batch form: several assignments, each {sequence, page, executor, replace, label}; page may be given once for all. | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the pre-flight read-only inspection, the failure-with-previous-assignment outcome, the partial outcome when labelling fails, what verify does and explicitly does NOT verify (config, fader/key functions, playback state), that mutations are serialised, and that a concurrent operator can invalidate the inspection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is valuable but delivered as one dense paragraph with heavy parenthetical nesting and several run-on sentences; batch behaviour is introduced twice. A bulleted or sectioned layout would make the preconditions, side effects, and batch rules far easier to scan and would front-load the executor/sequence/page essentials.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, annotation-free mutation tool with no output schema, the definition covers preconditions (page/sequence must exist), side effects, failure and partial-failure outcomes, verification scope, concurrency risk, and per-item batch semantics with ordering and stop rules — nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds semantics the schema does not: replace gates overwriting, verify defaults true with a stated comparison basis, label renames the underlying object show-wide, and batch items inherit call-level fields while their own fields win, with duplicate targets refused and stop_on_failure skipping previously failed objects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Assign a sequence or macro to an executor on an explicit page', including the exact command it emits ('Assign <object> At Page <p>.<e>'). It also distinguishes itself from the sibling gma3_label_executor by warning that labelling here renames the assigned object rather than the executor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives rich conditional guidance: use replace: true when an executor holds another object, the call leaves an already-assigned sequence alone, and the batch form is described as an alternative shape with its own rules. It stops short of naming sibling tools to route to (e.g. gma3_executor_settings, gma3_label_executor) for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_build_chaseBuild a looping chase and watch one cycleA
Build a chase into an empty or new sequence (or replace: true to rebuild one, keeping its executor assignments): one cue per step (steps: each a look or looks, a phaser in a look, an optional name and command; or presets: one cue per preset on fixtures, a list or a range {pool, from, to}), every cue Time-triggered after step_seconds (or cycle_seconds / number of steps) with an optional crossfade, and Wrap Around on, so the last cue is followed by the first. Built in the console's Preview environment: its own programmer and selection, so nothing is output and the operator's Normal programmer is untouched (checked before and after). Each cue starts from an empty programmer (ClearAll, sent only in Preview), its looks are applied in order (presets, then intensity, then values; a later look wins on shared fixtures), each look is checked in the programmer (preset links, values per fixture and cell), then the cue is stored. A look that did not apply stops the batch before that cue is stored; the cues already stored stay (nothing is undone or retried) and the result lists every cue with its status. A cue's stored values cannot be read back on 2.5.1; the cue's existence, name, timing, trigger, command and note are. A cue stored without a name takes the preset's name. Requires exclusive: true. sequence_settings and protect_running as in gma3_store_cues. Then, unless observe: false, PLAYS the chase (Goto cue 1, live output) and OBSERVES it over time on the server side (no Lua loop needed), sampling its current cue to verify one cycle: the cue order through the wrap and each step against step_seconds / the sequence's rate. A cycle longer than observe_max_seconds (default 45, at most 120; keep it under your client's request timeout) is observed from a late cue through the wrap instead. The chase is switched off afterwards unless leave_running: true. The result is compact by default: outcome, verification, one line per cue (look details only for a cue that did not match), the observed cycle as its cue order and step intervals, and only the steps that did not succeed (with a count of the rest); detail: true returns every step, every look and every sample.
| Name | Required | Description | Default |
|---|---|---|---|
| fade | No | Crossfade per cue in seconds (CueInFade); it does not lengthen the step. | |
| name | No | Sequence name. | |
| steps | No | 2 to 100 steps, one cue each; a step with a command needs no look. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | ||
| observe | No | Play the chase and verify one cycle (default: as verify, true). | |
| presets | No | One cue per preset on fixtures (instead of steps): a list, or a range {pool, from, to} of the presets that exist, each cue named after its preset. | |
| replace | No | Rebuild a sequence that has cues: delete them first (the sequence and its executor assignments stay, checked). Default false: such a sequence is refused. | |
| fixtures | No | Target for every step that does not name its own fixtures. | |
| sequence | Yes | An empty or new sequence. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| exclusive | No | Required (true). | |
| step_seconds | No | Time per step (each cue's TrigTime), at least 0.2 s. | |
| cycle_seconds | No | Time for the whole loop, divided over the steps (instead of step_seconds). | |
| leave_running | No | ||
| protect_running | No | With a priority above ltp: turn Off When Overridden off on the running sequences the override would switch off (default false: they are listed in a warning). | |
| sequence_settings | No | Sequence settings applied after the build, as gma3_configure_sequence takes them (priority, off_when_overridden, wrap_around, ...). | |
| observe_max_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly. It discloses Preview-only operation, separate programmer and selection, ClearAll sent only in Preview, no live output, operator Normal programmer checks, look application order, failure handling that leaves already-stored cues intact, the 2.5.1 readback limitation, exclusive access requirement, playback/observation behavior, and automatic switch-off unless leave_running is true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and its sentences mostly carry operational meaning. However, it is a very long, dense single paragraph with nested clauses and repeated technical asides, making it harder to scan than necessary for an already complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 18-parameter tool with no output schema, the description is complete enough to call the tool correctly. It covers build semantics, failure behavior, Preview isolation, verification/observation, timing limits, default behavior, and the shape of the returned result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 83%, so the schema already documents most parameters. The description still adds useful meaning: steps versus presets mode, cue-per-step timing, replace semantics that preserve executor assignments, observe behavior and its defaults, observe_max_seconds limits, and compact versus detail result modes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: build a looping chase into an empty/new sequence, or rebuild one with replace: true. It distinguishes the operation from simple cue storage by explaining that it creates one Time-triggered cue per step, enables Wrap Around, and optionally observes a full cycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear applicability conditions: the target sequence should be empty or new, and replace: true is required to rebuild one that already has cues, otherwise the sequence is refused. It does not explicitly compare against the sibling gma3_store_cues beyond referencing shared parameters, so the alternative-routing guidance is good but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_build_phaserBuild a phaser and store it as a presetA
Build a repeatable effect from structured steps and store it into Preset ., reading every step back. Steps: per attribute an absolute and/or relative value (unit percent, or physical: degrees for Pan/Tilt) or a preset called into the step, plus step timing (width, transition, accel, decel). phaser: fixture distribution (phase {from, to} in degrees over the selection grid, from > to runs the other way; {from, step}: a phase step per fixture, e.g. step 180 between neighbours; "spread": 0 -> 360 x (n-1)/n; {from: 0, to: 360} is one even cycle (360/n apart, like "spread": the console leaves the end out so the last fixture does not repeat the first), any other range uses both ends (0 -> 270 on 4: 0, 90, 180, 270; other whole cycles such as 0 -> 720 or 360 -> 0 are not established and the check accepts either); repeat {groups|wings|blocks: n} repeats it along X; shuffle: an XShuffle seed that permutes the phases) and playback speed (speed_bpm; measure = the number of beats one phaser cycle lasts at that speed, so the step widths, in percent of a beat, should add up to measure x 100; speed_master 1-16). These three are kept apart in the plan and the result. mirror {attributes, wings (default 2)}: the fixtures (grid order) are cut into wings and every second wing gets those attributes inverted (relative and physical values negated, percent 100 - v), e.g. the second beam's Pan. variants [sync, follow, mirror] build the versions of one effect into consecutive presets from preset, named " sync|follow|mirror": sync without a phase spread, follow with the phase (default spread), mirror with the spread mirrored about the centre (wings 2) and Pan (or mirror.attributes) inverted on the second half. Templates (instead of steps): dimmer_chase {on, off, speed_bpm, spread}, alternating_colors {colors: [{red, green, blue} or {preset}], x2, speed_bpm, snap}, pan_tilt {pan, tilt (degrees), speed_bpm, spread}: a relative circle around the current position. Position shapes in physical degrees around center {pan, tilt}: circle and figure8 (size = radius), cone (tilt held at tilt, pan sweeping a full turn and back), fan (closed on the centre, then open over size degrees of pan from the first fixture to the last), bounce (tilt up and down by size); default 20 BPM. Dimmer patterns for rows of fixtures or cells (grid order): runner (one on at a time), comet {tail: cells}, alternate, thirds, fill (fill up, then empty), sparkle {every, seed}; default 120 BPM. preview: true returns the expanded steps and the console commands. fixtures are selected in list order on grid X (or group: a stored group with its grid); up to 1024. Every attribute is checked against every fixture before anything is sent (the console ignores unsupported attributes silently). effects: several effects (each with its own preset, fixtures or group, steps or template, phaser, mirror, variants, name) built in one Preview session, one result line per preset with a compact phase summary (detail: true for every step); a failed effect does not stop the others. The effect is built in the console's Preview environment (its own empty programmer; nothing is output) and the operator's Normal programmer is fingerprinted before and after: it is never touched. The built programmer is checked per fixture, step and layer, including the phase per fixture, then stored with the gma3_store_preset rules (mode selective or global, existing refuse|merge|overwrite, step presets embedded, on_name_taken refuse|allow_suffix: a name, variant names included, that another preset of the pool has, or that two presets of the call share, is refused before anything is sent, naming the holder; the console would store it as "#2") and verified step by step; the Preview programmer is cleared and Preview left in every case. audition_ms (default 0: no playback) calls the stored preset on the fixtures in the Normal programmer, which must be empty, for that long and releases it with ClearAll. Requires exclusive: true (not for preview). If a build is interrupted, gma3_phaser_release leaves Preview. Needs bridge 0.23.0.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preset mode (default selective). | |
| name | No | Preset name. | |
| unit | No | Unit of the step values (default percent). | |
| group | No | A stored group instead of fixtures; its grid sets the distribution order. | |
| steps | No | 2-16 steps. | |
| detail | No | Return every step, the console commands and the stored rows (default false: a compact result; with several presets one line each). | |
| mirror | No | Invert these attributes on every second wing (default 2 wings: the second half). | |
| phaser | No | Phaser layers: playback speed, phase distribution, measure, speed master, repetition, shuffle. | |
| preset | No | Target preset "<pool>.<number>" (the first of the variants); an All pool (21-25) takes any attributes. Required unless effects is given. | |
| verify | No | Read the stored preset back step by step (default true). | |
| effects | No | Several effects in one call (instead of preset/fixtures/steps/template): built in one Preview session; unit, mode, existing, on_name_taken and verify given for the call are defaults. | |
| preview | No | Only check and return the plan and commands (default false). | |
| existing | No | When the preset exists (default refuse). | |
| fixtures | No | Fixture ids or ranges, distributed in list order. | |
| template | No | A template instead of steps; see the description for its options. | |
| variants | No | Build these versions into consecutive presets from preset: sync, follow, mirror. | |
| exclusive | No | Required (true) unless preview. | |
| audition_ms | No | Play the stored effect for this long in the empty Normal programmer, then release it (default 0: no playback; max 30000). | |
| on_name_taken | No | When another preset of the pool has the name: refuse (default, nothing is sent) or allow_suffix (the console stores "<name>#2"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so thoroughly: the effect is built in the console's Preview environment with its own empty programmer and nothing is output, the Normal programmer is fingerprinted before and after and 'is never touched', the stored programmer is verified per fixture/step/layer, and Preview is cleared and exited in every case. It also discloses the exclusive-lock requirement, audition playback/release behavior, and the bridge 0.23.0 dependency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is well front-loaded, but the remainder is a dense run-on of parentheticals and semicolon chains that is hard to scan, and much of the phase/template detail is duplicated in the schema's own parameter descriptions. For a 19-parameter tool some length is justified, but the structure could be sectioned or trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with deeply nested objects and no output schema, the description covers everything an agent needs: how steps/templates/effects compose, how variants map onto consecutive presets and their naming, what preview and detail return, how verification and cleanup work, and the name-collision policy tied to gma3_store_preset rules. Nothing material about correct invocation is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description goes well beyond the schema by explaining semantics that the JSON schema cannot: phase distribution edge cases ({from:0,to:360} vs. other ranges, 'spread' being 360 x (n-1)/n), the measure/step-width relationship ('step widths ... should add up to measure x 100'), mirror inversion math (percent 100 - v), and what each variant name produces. It also explains template option sets (dimmer_chase, pan_tilt, circle, comet, etc.) that the schema only lists by enum value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb, resource and outcome: 'Build a repeatable effect from structured steps and store it into Preset <pool>.<number>, reading every step back.' It is clearly distinguishable from siblings like gma3_store_preset (plain storage) or gma3_phaser_release (cleanup) because it names the phaser-construction and preset-store combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states concrete operating conditions: preview returns the plan without sending, exclusive:true is required unless previewing, audition_ms needs an empty Normal programmer, and gma3_phaser_release should be used if a build is interrupted. It does not, however, explicitly contrast this tool with alternatives such as gma3_store_preset or the matricks/recipe tools, leaving the 'which tool for this job' routing partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_build_timecodeBuild a timecode show from timed cue events (never plays or records)A
mode (required): create (refuses an existing show), replace (removes its track groups, keeps the show) or append (adds a track group). tracks: [{sequence, events: [{at, action, cue?}]}]: at is seconds, "H:MM:SS.sss", "H:MM:SS:FF" (with fps 24, 25, 30 or 60) or {frames, fps}, rounded to the console's 1/16777216 s; action is go (Go+), go_back, goto (needs cue), on, off, toggle, top, pause, kill, flash_press / flash_release, temp_press / temp_release (pairs are checked: allow_unpaired to override). Events are stored in time order; events at the same time keep the order given (the console runs them in storage order). settings: loop_mode (loop, pause, off), loop_count, tc_slot ("internal" or 1-16: configures the source only), switch_off (keep, off), assert_previous_events. Sequences and cues are checked before anything is sent; a playing or locked show is refused. Every event is read back and compared exactly. Never sends Go, Record or anything that plays. Needs bridge 0.25.0.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| mode | Yes | ||
| name | No | ||
| tracks | Yes | ||
| verify | No | ||
| preview | No | ||
| settings | No | ||
| timecode | Yes | ||
| allow_unpaired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: exact readback comparison of every event, pre-send validation of sequences/cues, refusal of playing or locked shows, same-time events executed in storage order, and an explicit 'never sends Go, Record or anything that plays'. The bridge 0.25.0 requirement is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Sized appropriately for a complex nested-payload tool: nearly every clause carries load-bearing detail (rounding, ordering, pair checking, refusals). It is a single dense paragraph rather than a front-loaded structure, which makes scanning harder, but there is little genuine filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-object, no-output-schema, no-annotation tool, this is unusually complete — it covers validation, failure modes, post-condition verification, and side-effect limits. It is missing semantics for the required top-level timecode, plus name, preview, and the top-level fps, which matter given the 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters and nested objects, and the description compensates for most of it: mode, tracks.at formats (seconds, H:MM:SS.sss, H:MM:SS:FF with fps, {frames,fps}, 1/16777216 s rounding), the action enum's semantics including the gotcha that goto needs a cue and the press/release pair checking with allow_unpaired, and every settings field. Gaps remain for top-level timecode, name, fps, preview, and verify (the readback sentence only implies verify).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (build a timecode show) plus the scope (timed cue events), and the title's 'never plays or records' cleanly separates it from transport/playback siblings such as gma3_timecode_transport. An agent can tell what this does and what it deliberately does not do without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three modes are given operational meaning (create refuses an existing show, replace removes its track groups but keeps the show, append adds a track group), which is real when-to-use guidance. It also states the precondition that sequences and cues are checked before anything is sent and that a playing or locked show is refused. It never names the sibling tool to use instead when you actually want playback, so it stops short of explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_clear_programmerClear selection / programmerA
Explicit clear with a required mode: "selection" sends ClearSelection (deselects fixtures, keeps all programmer values); "active" sends ClearActive (deactivates values, keeps selection and values); "all" sends ClearAll (clears the selection AND discards every programmer value). Nothing is implied: one command per call. Verifies Selection.CountTotalSelected == 0 for selection/all; programmer values cannot be read back (unavailable for active). Serialised against this server's other mutations only.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | selection = ClearSelection, active = ClearActive, all = ClearAll |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does so well: it explains the exact effect on selection and programmer values for each mode, notes verification behavior (Selection.CountTotalSelected == 0), mentions that programmer values cannot be read back for 'active', and discloses serialization against other mutations. It stops short of covering error conditions or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then efficiently details each mode. It is dense but avoids fluff; a bulleted format might improve readability, but the current one-paragraph structure is compact and information-rich.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no annotations and no output schema, the description is complete: it covers mode semantics, effects, verification, read-back limitations, and concurrency. An agent has everything needed to invoke it correctly without requiring additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning by describing the concrete consequences of each enum value (deselects fixtures, deactivates values, discards every programmer value) beyond the schema's brief mapping. This extra detail on effects makes it more useful than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (clear) and resource (programmer selection/values), and precisely distinguishes the three mode behaviors (selection, active, all) with exact command names. It does not explicitly differentiate from sibling tools like gma3_hardkeys_release_all or gma3_programmer, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The mode descriptions imply when to use each variant (e.g., keep values vs discard all), but there is no explicit guidance on when to choose this tool over sibling tools or any exclusions. Usage is therefore implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_commandExecute a grandMA3 commandA
FALLBACK for a command no structured tool covers: patching, looks, presets, groups, phasers, cues, chases and playback have their own tools (see the server instructions), which check before acting and read back; a raw command is not checked or read back. Execute a grandMA3 command-line command exactly as it would be typed (without Please/Enter). Examples: "Go+ Sequence 1", "Fixture 1 Thru 10 At 50", "Store Cue 2 /Merge /NoConfirmation", "ClearAll", "FaderMaster Page 1.201 At 75 Fade 2". Returns the command line feedback (OK, Syntax Error, Illegal Command). Commands that produce output (List, GetGlobalVariable, etc.) print to the console history, not here; use gma3_get_object / gma3_list_children to read data. $variables expand in commands sent through the bridge, outside quotes (SU-15 probe: Label Sequence 940 $name named the sequence after the variable); a user variable shadows a global one, and a command with a missing $variable does nothing. Read and set them with gma3_variables / gma3_set_variable. Via "osc" the command is sent fire-and-forget over OSC and no feedback is available.
| Name | Required | Description | Default |
|---|---|---|---|
| via | No | Transport. auto (default) uses the bridge and falls back to OSC only if the bridge cannot be reached before the command is sent. If the bridge accepted the command but no reply came back, the command is NOT resent (it may already have executed); the error says so. | |
| command | Yes | The command, e.g. 'Go+ Sequence 1' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does much of it: no pre-check and no read-back, return of command-line feedback (OK, Syntax Error, Illegal Command), output-producing commands going to console history instead, $variable expansion only outside quotes with shadowing and silent no-op on a missing variable, and fire-and-forget OSC with no feedback. The remaining gap is that it never states permission/authorization needs or that commands mutate live show state irreversibly (e.g. ClearAll, Store).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the FALLBACK framing, then examples, then return format, then caveats — a sensible order with no filler sentences. It is dense and long for a two-parameter tool, and the parenthetical SU-15 probe anecdote is more detail than an agent needs to invoke it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains exactly what is returned (command-line feedback) and what is not (List/GetGlobalVariable output), covers both transports, and handles the variable-expansion edge cases. For a raw command passthrough with no annotations, nothing essential to a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the command string is typed exactly as on the console without Please/Enter, with four worked examples, and $variables expand outside quotes. The enum for 'via' is already documented in the schema, and the description's OSC note adds the fire-and-forget consequence rather than duplicating it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Execute a grandMA3 command-line command exactly as it would be typed (without Please/Enter)') and immediately frames the tool as a FALLBACK relative to the structured tools that cover patching, looks, presets, groups, phasers, cues, chases and playback. An agent can tell precisely what this does and how it differs from every sibling category.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use this only when no structured tool covers the action, because structured tools check before acting and read back while a raw command does not. It also names concrete redirections for adjacent needs (gma3_get_object / gma3_list_children for reading data, gma3_variables / gma3_set_variable for variables) and warns that List/GetGlobalVariable output does not come back here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_dmx_outputConfigure Art-Net / sACN output and universe grant requestsA
Changes the console's DMX output configuration: protocol (artnet or sacn) output on or off; its data entries (entries: edit one by number, add: true for a new one, remove: true), each mapping local_universe .. +amount-1 to protocol universes from universe (Art-Net: absolute 0..32767 = net x 256 + subnet x 16 + universe; sACN: 1..63999), with mode, enabled and (sACN) priority 0..200; and grant_request (universes, value auto|on|off), which asks for a grant without creating one. Validated before anything is sent; the console silently ignores or clamps invalid values, so every written property is read back. preview: true shows the plan. A change that makes a protocol send DMX onto the network (output on with an enabled entry) needs network: true. Requires exclusive: true. No undo: previous holds the values before. Needs bridge 0.30.0.
| Name | Required | Description | Default |
|---|---|---|---|
| output | No | The protocol's output switch (Out). | |
| verify | No | ||
| entries | No | ||
| network | No | Confirms that the change sends DMX onto the network. | |
| preview | No | ||
| protocol | No | ||
| exclusive | No | ||
| grant_request | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that changes are validated before sending, that the console silently ignores or clamps invalid values yet every written property is read back, that there is no undo but previous holds prior values, and that network/exclusive confirmations are mandatory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and packed with useful detail; nearly every clause adds information. However, it is delivered as one long semicolon-chained sentence with nested parentheticals, which makes it dense rather than easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, multi-parameter mutation with nested objects, no annotations, and no output schema, the description supplies prerequisites, universe ranges, clamp/verify behavior, and undo semantics. The remaining holes are the meaning of verify and any statement of what is returned, though 'every written property is read back' partially covers the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, but the description compensates heavily: it explains entry add/remove/edit-by-number semantics, local_universe..+amount-1 mapping, Art-Net absolute universe ranges (0..32767) versus sACN (1..63999), mode, enabled, sACN priority 0..200, and grant_request's universes/value auto|on|off. The verify parameter is left unexplained in both schema and description, which is the main gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: changes the console's DMX output configuration, covering protocol output state, entry mappings, and grant requests. It is clearly distinguished from read-oriented siblings like gma3_dmx_output and gma3_dmx by framing everything around mutation of configuration entries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete conditions for use: network:true is required when the change makes a protocol send DMX onto the network, exclusive:true is required, bridge 0.30.0 is needed, and preview:true shows the plan first. It doesn't explicitly name an alternative tool for simply reading the current config, so it stops short of full when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_executorConfigure executor functions, custom commands and sizeA
Set key, MA-key, fader, encoder and MA-encoder functions, custom command triplets, Width/Height and Fix of the Sequence or Macro executor at Page . by writing its properties. Unlike 'Assign At', this never clears an unrelated unpress function. Functions are validated against the assigned class before writes; Macro faders/encoders allow only Empty. Sequence Flash, Temp, Swap, Black and Time are key-only. Custom command text is stored, never executed; command requires explicit enabled because the console auto-enables text. The flag is written after the text, even when initially unchanged. Commands preserve exact case and internal spaces; edge whitespace is refused because object reads trim it. Encoder continuous functions and left/right actions or enabled custom commands are mutually exclusive: conflicting requests fail before reads, and implicit mode clears are reported and verified. Storing disabled encoder text against an active continuous mode is refused unless that mode is explicitly cleared. Size changes check complete page occupancy, expanded footprints and proxies; collisions, unreadable or failed enumeration and expansion beyond page bounds are refused before any write. Shrinks precede growth. Executor settings belong to this executor only; sequence settings (Wrap Around, priority, ...) are configured with gma3_configure_sequence. lock: true/false sets the executor's own Lock. A page lock also blocks executor changes. Never sends Go, On, Off, Toggle, Flash or any other playback keyword and does not touch the selection, the programmer or fader levels; playback state is read before and after (playback.activeBefore/activeAfter) and configuration alone does not start playback. A locked target is refused before anything is sent (the console silently ignores writes to it) unless unlock: true, which unlocks the owning object, applies the changes and locks it again (relocking is attempted even after a failed change). preview: true performs only the reads and returns the planned changes (from -> to); values already set are reported as unchanged and never sent. Each value is written with one 'set' request whose reply must read back the requested value, because the console silently keeps the previous value for anything it does not accept; the first failure stops the remaining changes. A value that could not be read is unknown, never a default: the call is refused when a value the plan depends on (requested property, Lock, page Lock) is missing, and a set reply without a value is an unknown step. verify (default true) reads every changed property and the lock back. Mutations from this server are serialised, but not isolated from other operators or clients.
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | Fix the executor on every page (Fix). | |
| lock | No | Final state of the executor's own Lock; lock: false on a locked executor removes the lock (explicit unlock). | |
| page | Yes | Executor page number (1-9999); the page must exist. | |
| fader | No | Fader: Sequence choices Empty, Master, X, XA, XB, Temp, Rate, Speed, Time; Macro choices Empty. Empty clears it. | |
| width | No | Width in executor cells, 1-5. Full page occupancy is checked first; overlapping assignments, incomplete scans, page boundaries and Xkey expansion are refused. | |
| height | No | Height in executor rows, 1-4. Extends toward higher numbered rows, never beyond row 4. The tool refuses collisions before changing size. | |
| unlock | No | Allow unlocking a locked executor and/or page for this call; the locks are restored afterwards (default false: refuse). | |
| verify | No | Read the changed properties back and compare (default true). | |
| encoder | No | Encoder: Sequence choices Empty, Master, X, XA, XB, Temp, Rate, Speed, Time; Macro choices Empty. Empty clears it. | |
| preview | No | Only read and report the planned changes (default false). | |
| executor | Yes | Executor number on that page: 101-190 (keys), 201-290 (faders), 301-390 and 401-490 (knobs), plus the Xkeys 191-198 and 291-298. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| key_press | No | KeyPress: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync, Flash, Temp, Swap, Black, Time; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| ma_encoder | No | MAEncoder: Sequence choices Empty, Master, X, XA, XB, Temp, Rate, Speed, Time; Macro choices Empty. Empty clears it. | |
| key_unpress | No | KeyUnpress: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| encoder_left | No | EncoderLeft: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| ma_key_press | No | MAKeyPress: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync, Flash, Temp, Swap, Black, Time; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| encoder_right | No | EncoderRight: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| ma_key_unpress | No | MAKeyUnpress: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| custom_commands | No | Stored custom commands per discrete trigger. Each has command (one line; empty clears; requires explicit enabled), enabled and add_executor. Text is saved before flags; commands are never executed. Enabled encoder commands choose discrete mode and clear the continuous encoder function. | |
| ma_encoder_left | No | MAEncoderLeft: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. | |
| ma_encoder_right | No | MAEncoderRight: Sequence choices Empty, Go+, Go-, <<<, >>>, On, Off, Toggle, Top, Kill, Pause, Goto, Load, Select, SelectFixtures, Rate1, Speed1, Learn, LearnSpeed, HalfSpeed, DoubleSpeed, ReSync, FastSync; Macro choices Empty, <<<, >>>, Call, Go+, Go-, Off, Pause. Empty clears it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: writes are validated against the assigned class, locked targets are refused up-front (the console silently ignores writes), unlock applies changes then relocks even after failure, first set failure aborts the rest, read-backs must match, unreadable values are treated as unknown rather than defaulted, and mutations are serialised but not isolated from other clients. Shrink-before-growth ordering and pre-write collision checks are exactly the kind of non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the primary alternative are front-loaded, and every sentence carries substantive constraints. However, the block is extremely dense and several sentences chain multiple rules with semicolons (lock/preview/verify/failure handling), making it harder to scan than a short bulleted structure would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter mutation tool with no output schema, the description covers what an agent must know: preview returns planned from -> to changes, verify defaults true and reads back, playback state is reported as activeBefore/activeAfter, unchanged values are never sent, and refusal conditions (page lock, collisions, footprint expansion, unknown dependencies) are enumerated. Return-value behavior is described even though no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema cannot express: encoder continuous functions vs discrete custom commands are mutually exclusive and conflicting requests fail before reads, custom command text is stored but never executed and requires explicit enabled because the console auto-enables it, and edge whitespace is refused because object reads trim it. This goes meaningfully beyond the per-field schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb (Set), the exact resources (key/MA-key/fader/encoder functions, custom command triplets, Width/Height, Fix), the target (Sequence or Macro executor at Page <p>.<e>) and the mechanism (writing properties). It also distinguishes itself from 'Assign <function> At' in the same breath, so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent elsewhere: sequence-level settings (Wrap Around, priority) belong to gma3_configure_sequence, and the difference from 'Assign <function> At' is spelled out. It also states what this tool will never do (send Go/On/Off/Toggle/Flash, touch selection, programmer or fader levels), which is a clear when-not-to-use boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_matricksCreate or update a MAtricks objectA
Set MAtricks per axis (x, y, z): wings, blocks, groups, width, shift, shuffle (null or 0 = None) and fade/delay (seconds), phase (degrees), speed (BPM) distributions as {from, to}. With wings, a distribution runs from the outer edges (from) to the centre (to), so a centre-out delay is wings 2 with delay {from: , to: 0}. create: true creates a missing object with 'Store MAtricks ' and then writes EVERY property (Store copies the programmer's selection MAtricks), so the new object holds exactly the request; reset_unspecified: true does the same for an existing one. Otherwise only the given settings change; values already set are not sent. Each value is one 'set' whose reply must read back the requested value (the console silently ignores values it does not accept); the first failure stops the rest. A locked MAtricks is refused, and so is a name another MAtricks has, before anything is sent, naming the holder (a duplicate makes lookups by name ambiguous; whether the console would store "#2" is not verified for MAtricks): on_name_taken refuse (default) | allow_suffix. Does not touch the selection or the programmer; apply it with 'Recall MAtricks '. preview: true reports the planned changes.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X-axis settings. | |
| y | No | Y-axis settings. | |
| z | No | Z-axis settings. | |
| name | No | MAtricks name. | |
| create | No | Create the object when it does not exist (default false: refuse). | |
| verify | No | Read the object back and compare (default true). | |
| preview | No | Only read and report the planned changes (default false). | |
| matricks | Yes | MAtricks pool number (1-9999). | |
| on_name_taken | No | When another MAtricks has the name: refuse (default, nothing is sent) or allow_suffix (write it anyway). | |
| reset_unspecified | No | Reset every setting not given to None/default (always on for create). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it discloses that 'Store MAtricks' copies the programmer's selection MAtricks, that each value is a separate set whose reply is read back, that the console silently ignores rejected values, that the first failure aborts the rest, and that locked or duplicate-named objects are refused before anything is sent. These are exactly the operational hazards an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core operation and property list, then layered with create/overwrite semantics and failure behavior — no filler sentences. It is, however, one very dense block of long clauses (parentheticals, em-dashes) that is harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter nested mutation tool with no annotations and no output schema, the description covers the gaps that matter: mutation scope, overwrite semantics, error/refusal conditions, verification read-back, and how to actually apply the result. Nothing an agent needs to call it safely appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains that wings distributions run from outer edges (from) toward the centre (to) and gives a worked example (wings 2 with delay {from: <outer>, to: 0}), plus units for fade/delay (seconds), phase (degrees) and speed (BPM), and the null/0 = None convention. The verify parameter's read-back comparison is only implied rather than stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Set MAtricks <n> per axis") and enumerates the properties it writes, so the operation is unambiguous. It also discloses the create-vs-update dual nature up front. It does not, however, name the sibling read tool (gma3_matricks) or otherwise explicitly distinguish itself from it, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong contextual guidance: create:true for missing objects, reset_unspecified:true for full overwrite of an existing one, preview:true to dry-run, and on_name_taken to control collision handling. It also clarifies that it does not touch the programmer and must be applied via 'Recall MAtricks <n>', which tells the agent this is a configuration not an application step. Lacks explicit routing to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_oscConfigure OSC input and outputA
Switch OSC input / output, set the preferred IP, and add, edit or remove OSC lines (name, port, prefix, destination_ip, receive, receive_command, send, send_command, echo_input, echo_output, note). Lines are UDP. Validated first; every write is read back. A port change on a receiving line re-binds input (input off for about 0.4 s and on). network: true is required when the change opens a port that runs OSC commands while this machine has an address beyond loopback: the console listens on every interface, so anyone who can reach this machine can then run commands. It is also required for new output to an address outside loopback. Requires exclusive: true; preview: true shows the plan. No undo: previous holds the values before. Test with gma3_test_osc_input. Needs bridge 0.33.0.
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| verify | No | ||
| network | No | Confirms that commands can then be run from the network (or output goes onto it). | |
| preview | No | ||
| exclusive | No | ||
| enable_input | No | ||
| preferred_ip | No | IPv4 network that picks the interface, e.g. "127.0.0.0/8". It does not limit who can send. | |
| enable_output | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: lines are UDP, changes are validated first, every write is read back, a port change on a receiving line re-binds input with ~0.4 s of downtime, there is no undo but previous holds prior values, and bridge 0.33.0 is required. It also discloses the security consequence of network: true (the console listens on every interface, so reachable parties can run commands), which is exactly the kind of beyond-schema behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core action and every clause (downtime, undo, version requirement, security gate) earns its place. The middle section is a dense run-on that could be split into bullets, but nothing is redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with a nested line array, no annotations, and no output schema, the description covers safety, reversibility, downtime, prerequisites, and a testing sibling. It omits return-value expectations and leaves verify and the enable_input/enable_output switches unexplained, so it is strong but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, so the description must compensate, and it largely does: it enumerates the per-line fields (name, port, prefix, destination_ip, receive, receive_command, send, send_command, echo_input, echo_output, note) and explains the semantics and prerequisites of network, preview, and exclusive. Gaps remain for verify, enable_input/enable_output, and how the line number field addresses an existing line versus add/remove.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource statement: switch OSC input/output, set the preferred IP, and add/edit/remove OSC lines. It even enumerates the line fields, so an agent knows exactly the resource being mutated and can distinguish it from read-only siblings like gma3_osc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete operational guidance: requires exclusive: true, preview: true shows the plan, test with gma3_test_osc_input, and network: true is required in two named situations. What it lacks is an explicit statement of when to use this versus gma3_osc (presumably the inspection counterpart), so routing between those two is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_sequenceConfigure a sequence's playback settingsA
Set a sequence's playback settings by writing its properties: wrap_around (a chase loops only with Wrap Around on and a trigger on its first cue), priority, restart_mode, release_first_cue, auto_start, auto_stop, master_go_mode, auto_fix, auto_stomp, tracking, soft_ltp, off_when_overridden, kill_protect, swap_protect (protection from the Kill/Swap playback actions, not from editing), use_executor_time, include_link_last_go, xfade_mode, xfade_reload. lock: true/false sets the sequence's own Lock. Tempo links (SB-06): rate_master (a speed master 1-16 or "none": the cue timing (fades, delays, trigger times) runs at its effective BPM / 60, so 60 BPM is 1:1), speed_master (the phasers in the cues follow it), rate_scale and speed_scale (One, Mul2..Mul256, Div2..Div256), speed_from_rate. Masters are linked by name; a master without a unique name is refused. While a rate master is linked, moving the sequence's rate fader moves the shared master. Settings belong to the sequence, so they apply to EVERY executor that references it: the tool scans all pages and lists them (references) and warns when other executors share the sequence. Cue triggers and timing are set with gma3_set_cue_trigger / gma3_set_cue_timing. Never sends Go, On, Off, Toggle, Flash or any other playback keyword and does not touch the selection, the programmer or fader levels; playback state is read before and after (playback.activeBefore/activeAfter) and configuration alone does not start playback. A locked target is refused before anything is sent (the console silently ignores writes to it) unless unlock: true, which unlocks the owning object, applies the changes and locks it again (relocking is attempted even after a failed change). preview: true performs only the reads and returns the planned changes (from -> to); values already set are reported as unchanged and never sent. Each value is written with one 'set' request whose reply must read back the requested value, because the console silently keeps the previous value for anything it does not accept; the first failure stops the remaining changes. A value that could not be read is unknown, never a default: the call is refused when a value the plan depends on (requested property, Lock, page Lock) is missing, and a set reply without a value is an unknown step. verify (default true) reads every changed property and the lock back. Mutations from this server are serialised, but not isolated from other operators or clients. Batch form (sequences): the same settings on a list of sequences and ranges ("1 Thru 17"), each configured, checked and read back on its own; the result has one line per sequence (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| lock | No | Final state of the sequence's Lock; lock: false on a locked sequence removes the lock (explicit unlock). | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| unlock | No | Allow unlocking a locked sequence for this call; the lock is restored afterwards (default false: refuse). | |
| verify | No | Read the changed settings back and compare (default true). | |
| preview | No | Only read and report the planned changes and sharing executors (default false). | |
| auto_fix | No | AutoFix (Yes/No). | |
| priority | No | Priority: super, swap, htp, highest, high, ltp, low, lowest. | |
| sequence | No | Sequence number (must exist). Required unless sequences is given. | |
| soft_ltp | No | SoftLTP (Yes/No). | |
| tracking | No | Tracking (Yes/No). | |
| auto_stop | No | AutoStop (Yes/No). | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| sequences | No | Batch form: the same settings on several sequences: numbers and "a Thru b" ranges, e.g. [1, "3 Thru 17", 20]; each sequence is configured and read back on its own. | |
| auto_start | No | AutoStart (Yes/No). | |
| auto_stomp | No | AutoStomp (Yes/No). | |
| rate_scale | No | RateScale: div256, div128, div64, div32, div16, div8, div4, div2, one, mul2, mul4, mul8, mul16, mul32, mul64, mul128, mul256. | |
| xfade_mode | No | XFadeMode: ab, split. | |
| rate_master | No | RateMaster: a speed master 1-16 or "none". | |
| speed_scale | No | SpeedScale: div256, div128, div64, div32, div16, div8, div4, div2, one, mul2, mul4, mul8, mul16, mul32, mul64, mul128, mul256. | |
| wrap_around | No | WrapAround (Yes/No). | |
| kill_protect | No | KillProtect (Yes/No). | |
| restart_mode | No | RestartMode: first_cue, current_cue, next_cue. | |
| speed_master | No | SpeedMaster: a speed master 1-16 or "none". | |
| swap_protect | No | SwapProtect (Yes/No). | |
| xfade_reload | No | XFadeReload (Yes/No). | |
| master_go_mode | No | MasterGoMode: none, go, on, top. | |
| speed_from_rate | No | SpeedFromRate (Yes/No). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| release_first_cue | No | ReleaseFirstCue (Yes/No). | |
| use_executor_time | No | UseExecutorTime (Yes/No). | |
| off_when_overridden | No | OffWhenOverridden (Yes/No). | |
| include_link_last_go | No | IncludeLinkLastGo (Yes/No). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it states the tool never sends playback keywords, does not touch selection/programmer/fader levels, refuses locked targets unless unlock is set (with relock attempted even on failure), warns when other executors share the sequence since settings apply to every referencing executor, and describes serialisation without isolation from other operators. Failure semantics (first failed write stops remaining changes, unknown values refuse the call rather than defaulting) are unusually well disclosed for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the safety constraints are front-loaded, and most sentences carry real information, but the property enumeration is a long run-on list and the block of failure/verify/preview semantics is dense with no structural breaks. It is information-rich but overstuffed for a single paragraph, hurting scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 32-parameter mutation tool with no annotations and no output schema, the description covers what an agent needs: what each group of settings does, that changes are read back and compared, what preview returns (from -> to), what the batch result shape looks like (one line per sequence, detail for full steps), and how failures and locks are handled. Nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: wrap_around is explained as only looping a chase when a trigger sits on the first cue, kill_protect/swap_protect are clarified as protection from Kill/Swap playback actions rather than editing, and rate_master is explained as cue timing running at BPM/60 with 60 BPM as 1:1, plus the rule that masters are linked by unique name. These are semantics the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Set a sequence's playback settings by writing its properties') and immediately delineates the boundary against siblings by naming gma3_set_cue_trigger and gma3_set_cue_timing for cue-level work. An agent can tell this is the sequence-property writer, not the cue editor or executor config tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditions for preview (read-only plan), verify (default true), unlock (required for locked targets), and batch form via 'sequences', and it redirects cue triggers/timing to the correct sibling tools. It does not, however, position itself against gma3_set_property or gma3_configure_executor, so an agent must infer those boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_speed_masterSet a speed master's tempo, scale and learn modeA
Sets one speed master (1-16): the tempo as bpm, hz or seconds (one of them; it is the EFFECTIVE tempo under the final speed scale, 0 stops the master, at most 225 x the scale factor), speed_scale (One, Mul2..Mul256, Div2..Div256 or a power-of-two factor) and learn_mode (ignore_scale, respect_scale, auto_increase_scale: how taps treat the scale). Sends set LearnMode, set SpeedScale and Master 3.N At BPM x, in that order. Refuses a locked master. Every sequence linked to the master follows the change (named in warnings). Master 16 follows the sound input and may move again. Reads the fader and scale back (verify, default true); preview: true sends nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| hz | No | ||
| bpm | No | ||
| master | Yes | ||
| verify | No | ||
| preview | No | ||
| seconds | No | Period of one beat in seconds. | |
| learn_mode | No | ||
| speed_scale | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: it discloses the exact command sequence sent and its order, the locked-master refusal, that every linked sequence follows the change, that master 16 tracks sound input and may move again, and what verify/preview actually do. This is exactly the mutation-and-side-effect detail an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads purpose and the settings before behavior. Every clause carries real information, but the run-on form makes it harder to scan than it could be with brief structuring.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no annotations and no output schema, the description covers parameters, side effects, command order, failure mode, and the verify/preview readback path. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 13%, so the description must compensate and does: master is bounded to 1-16, tempo is explained as the EFFECTIVE tempo under the final scale with 0 stopping the master and a 225x-scale cap, speed_scale lists legal values, learn_mode explains each tap/scale interaction, and verify/preview semantics are given. It adds meaning well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Sets one speed master (1-16)', then enumerates the three settings it controls (tempo, speed_scale, learn_mode). Distinguishes itself from siblings like gma3_speed_masters and gma3_speed_master_action by naming exactly what it configures rather than merely reading or acting on masters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives operational context (verify defaults to true, preview sends nothing, refuses a locked master) that implies when to use it, but never explicitly names an alternative sibling or states 'use this instead of X when Y'. Usage is inferable but not routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_tagConfigure a tag (kill type, forwarding, action, appearance, note)A
Set a tag's type (None, Kill Instant, Kill Delayed), Forward Commands (whether Go+ Tag n / Off Tag n reach the tagged objects), pool action (Pool Default, None, Go+, Off, Toggle, Flash, Temp, Top, Pause, List Reference), appearance (a number, or null to clear) and note, then read each one back. Kill Instant turns the other tagged sequences off when one starts; Kill Delayed does so after the started cue's in-fade; a reference with protect keeps running (live, onPC 2.5.1). Set the type before the sequences run (the manual: otherwise it works once they have been started). Values outside these lists are refused before anything is sent. Needs bridge 0.36.0. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag number or exact name. Required unless tags is given. | |
| note | No | Note text ("" clears it; no double quotes). | |
| tags | No | Batch form: several tags with their settings; a setting given once applies to every item. | |
| type | No | Tag type. | |
| action | No | What the tag's pool button does (Pool Default: the pool's setting). | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | Read back (default true). | |
| appearance | No | Appearance number, or null to clear. | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| forward_commands | No | Forward commands on the tag to the tagged objects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses pre-send validation ('values outside these lists are refused before anything is sent'), a hard bridge version requirement (0.36.0), read-back behavior, and a destructive side effect ('Kill Instant turns the other tagged sequences off when one starts'). Batch execution semantics are spelled out in detail: in-order, no retries, unknown outcome halts the remainder, one result line per item.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the settable fields, then the semantics, then the batch contract, so structure is sound and every clause carries information. It is dense to the point of being cramped, with stacked parentheticals like '(live, onPC 2.5.1)' and '(the manual: otherwise it works once they have been started)' that slow parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with no annotations and no output schema, the description covers side effects, validation, ordering, failure behavior and the shape of the return value (one line per item, detail for steps). It leaves stop_on_failure undescribed and its claim that 'an unknown outcome stops the rest' sits uneasily beside the schema's stop_on_failure default of false, leaving the agent to reconcile the two.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: forward_commands is explained concretely ('whether Go+ Tag n / Off Tag n reach the tagged objects'), appearance null clears, and the default-vs-override rule that an item's own fields win over the batch-level arguments. stop_on_failure and verify are only implicitly touched ('read each one back').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb plus resource and enumerates exactly what gets set: type, forward commands, pool action, appearance and note, followed by read-back. An agent can distinguish this from gma3_store_tag or gma3_delete_tag on the verb alone, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete condition for the single-object form versus the batch form ('give the list instead of the single object's fields') and states that the type must be set before the sequences run. It does not explicitly route the agent to gma3_store_tag for creation or state when this tool is the wrong choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_configure_tempo_syncConfigure the tempo-sync pluginA
Set or clear the tempo-sync plugin's configuration (bdstark/gma3-beat-sync; console global variables BeatSync.*, read by the plugin every 0.5 s and saved with the show), then read it back: master (speed master 1-16 the session tempo is written to), quantum (beats per bar 1-64), start_stop (on: beat actions only while the session plays), resync (sequences to ReSync on every bar; they must exist), on_bar / on_beat / on_start / on_stop / on_join / on_leave (console commands), actions ([{slot 1-16, every N beats, phase, command}] or {slot, clear: true}), tempo_threshold (BPM), lead_ms (0-200; ~17 puts the effect on the beat). null clears a key. Interfaces (multicast) is a network setting and is refused. Works whether or not the plugin runs; when it runs, the problems it reports after reading the change are included. Needs bridge 0.31.0.
| Name | Required | Description | Default |
|---|---|---|---|
| master | No | ||
| on_bar | No | ||
| resync | No | Sequences: [1, 11, 12] or "1 + 11 Thru 19". | |
| actions | No | ||
| lead_ms | No | ||
| on_beat | No | ||
| on_join | No | ||
| on_stop | No | ||
| quantum | No | ||
| on_leave | No | ||
| on_start | No | ||
| start_stop | No | ||
| tempo_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden and does it well: the plugin re-reads every 0.5 s, values are saved with the show, null clears a key, resync sequences must already exist, and reported problems after the change are returned. It also discloses a hard rejection case and a bridge-version prerequisite, which an agent could not learn from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single dense sentence-chained paragraph with zero filler, and the action verb plus read-back behavior are front-loaded. Readability suffers from the parenthetical stacking (bdstark/gma3-beat-sync; BeatSync.*, read every 0.5 s), but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, zero-required, no-output-schema mutation tool with no annotations, the description covers defaults (presumably null = unchanged/clear), side effects, prerequisites, error behavior, and every parameter's domain. An agent has enough to invoke it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 8% across 13 parameters, and the description compensates thoroughly: numeric ranges (master 1-16, quantum 1-64, lead_ms 0-200), the meaning of start_stop and resync formats, the actions array shape with slot/every/phase/command plus clear:true, and the null-clears-a-key convention. This adds real meaning beyond the bare JSON types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Set or clear the tempo-sync plugin's configuration ... then read it back', naming the plugin, its backing store (BeatSync.* console variables) and the read-back. It does not explicitly name the sibling gma3_tempo_sync_status, so an agent must infer that the status tool is the pure-read alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: works whether or not the plugin runs, requires bridge 0.31.0, and explicitly excludes a tempting field ('Interfaces (multicast) is a network setting and is refused'). It stops short of stating when to prefer gma3_tempo_sync_status over this tool for read-only inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_cook_recipesCook recipes with an explicit optionA
Cook the recipes of a preset, a cue part, a cue (all its parts) or a whole sequence, at once and verified (the console also re-cooks group and preset changes by itself in the background a moment later, with merge low priority). mode is required: merge_low_priority (replaces cooked data, keeps every uncooked value), merge (also replaces uncooked values on the recipes' own fixtures and attributes), overwrite (deletes every uncooked value), remove (removes cooked data). First every affected target is listed with its lines, their problems (missing or empty group, missing preset), the coverage before and the cooked coverage the lines should give; merge and overwrite are refused while they would replace or delete uncooked values unless replace_uncooked: true. preview: true stops there. After Cook <target> /<Option> (verify, default true) each target is read back: every predicted fixture and attribute cooked, no cooked values on fixtures no line selects, uncooked values unchanged (merge_low_priority, remove) or changed only where allowed. Lines that are not predicted (phaser recipes, filters) are named; presets that embed other presets are noted (their recipes are not re-cooked). Needs bridge 0.24.0.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| target | Yes | Preset, or sequence with optional cue and part. | |
| verify | No | ||
| preview | No | ||
| replace_uncooked | No | Allow merge/overwrite to replace or delete uncooked values (default false: refuse). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses mutation semantics (what is replaced/deleted vs preserved per mode), the refusal behavior for merge/overwrite, the background re-cook with merge low priority, and bridge version requirement. This is substantive beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely long, dense run-on sentences with no paragraphing. Front-loads purpose but the detailed coverage/verification discussion could be trimmed or restructured; it reads as a spec dump rather than a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 params, nested target, no output schema, and a complex domain, the description covers mode semantics, verification, refusal behavior, background behavior, and prerequisites. It's arguably over-complete if anything.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40%, and nested target object is only partly documented. Description compensates by explaining mode meanings, verify (verify, default true), preview, and replace_uncooked semantics — going beyond the schema's enum list and default note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cook) and resource (recipes of preset/cue/sequence) plus the four modes. Clearly distinguishable from siblings like gma3_edit_recipe or gma3_recipes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains mode selection semantics (merge_low_priority vs merge vs overwrite vs remove) and explains preview/verify flow, giving clear when-to-use guidance. Doesn't explicitly name alternatives but the mode descriptions function as decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_cue_contentsInspect stored cue contentA
Read what a cue stores without playing it back or loading it: cue properties (No, Name, TrigType, TrigTime, TrigSound, Release, Assert, Note), per part the timing (CueFade, CueDelay, CueInFade, CueInDelay, CueOutFade, CueOutDelay, SnapDelay), command, MIB settings, OwnDataPresent, and the recipes (selection, preset text plus the resolved preset reference or an explicit unresolved marker, values, FadeX/DelayX/SpeedX/PhaseX, enabled). expand_presets: true adds the referenced presets' data (GetPresetData) keyed by preset address. Works with gma3_lua disabled (structured bridge op, plugin >= 0.3.0). Read-only: never changes selection, programmer or playback. SUPPORTED MODE (onPC 2.5.1): recipe- and preset-based content only. NOT AVAILABLE: hard (non-recipe) fixture values stored in a part (storedValues is always null; a limitation is added when OwnDataPresent is Yes) and tracked/effective values (trackedValues: "not_reconstructed"; a part lists only what it stores). The fixtures filter applies to expanded preset data only (stated in limitations). Never sends Goto, Load or any playback command.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | Cue number, e.g. 1, 2.5 or "10.001". | |
| part | No | Only this part (0..999). Default: all parts. | |
| fixtures | No | Fixture IDs/ranges ("1 Thru 5") to filter expanded preset data by fixture ID. Recipe selections are not expanded. | |
| sequence | Yes | Sequence number (or exact name). | |
| expand_presets | No | Read referenced presets with GetPresetData and include their flattened rows (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: declares read-only behavior ('never changes selection, programmer or playback'), notes it works with gma3_lua disabled and requires plugin >= 0.3.0, and discloses concrete limitations (storedValues always null, trackedValues 'not_reconstructed', fixtures filter scope).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and then adds dense but useful detail; nearly every clause (supported mode, limitations, param scope) earns its place. The single long paragraph is slightly heavy to parse, keeping it from a 5, but it is not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is responsible for return-value coverage, and it enumerates the returned property/part/recipe fields in detail. Combined with the mode and limitation disclosures, an agent has everything needed to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: expand_presets:true adds referenced preset data keyed by preset address (GetPresetData), and the fixtures filter is scoped to expanded preset data only. It clarifies cross-parameter interaction rather than restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read what a cue stores') plus scope ('without playing it back or loading it'), which cleanly distinguishes it from playback siblings like gma3_goto_cue and gma3_playback. The enumeration of returned fields (properties, per-part timing, recipes) leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the use case as inspection-without-playback and states 'Never sends Goto, Load or any playback command,' which routes the agent away from the playback tools. It doesn't name specific sibling alternatives, but the read-only inspection context and the supported-mode/not-available constraints give clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_cuesList cues of sequencesA
List the cues of one sequence (sequence) or several (sequences, up to 20) with cue number, name, trigger (TrigType, TrigTime) and command, plus each sequence's playback state (playback: active, currentCue {no, name} while it plays, lastCue after Off; bridge 0.32.0).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | Property names per cue (default: No, Name, TrigType, TrigTime, Command, Note) | |
| offset | No | ||
| sequence | No | Sequence number or name | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| sequences | No | Several sequences in one read (instead of sequence) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations the description carries the full burden, and it does disclose meaningful behavior: the 20-sequence cap, the playback state machine (active, currentCue {no, name} while playing, lastCue after Off) and a bridge version requirement. It does not state pagination behavior for limit/offset or any read-only/permission expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly packed sentence with no filler, front-loaded with the verb and resource. The trailing parenthetical of domain jargon (TrigType, TrigTime, bridge 0.32.0) makes it dense but each element carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so describing the returned cue fields and playback shape is essential and the description does exactly that. The remaining gap is pagination semantics for the limit/offset parameters on a tool that can span up to 20 sequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds real meaning beyond it by giving the mutual exclusivity and maximum cardinality for 'sequences' ('up to 20') and by tying 'sequence' to a single read. It says nothing about limit, offset, fields or data_pool, which are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('List the cues of one sequence ... or several') and enumerates the returned fields (cue number, name, trigger, command, playback state), so an agent can distinguish it from gma3_cue_contents or gma3_store_cue without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies read usage and clarifies that 'sequences' is used 'instead of sequence', which is useful parameter-level routing, but it never names alternatives such as gma3_cue_contents or says when a caller should prefer one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_delete_cueDelete one cueA
Delete exactly one explicit cue with Delete Sequence n Cue c /NoConfirmation. Ranges (Thru, +) are rejected. Checks the cue exists first and refuses (nothing sent) when it does not. Verifies by reading existence back: matched when gone, mismatched when it still exists, unavailable when unreadable. Does not change the selection or the programmer. Never retried. The mutation lock orders only this server's own mutations; it does not isolate the operation from another console operator or another client.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | One cue number, fractional allowed (2, 2.5, "10.001"; max three decimals). Ranges (Thru, +) are rejected. | |
| verify | No | Read the result back after the mutation (default true). Verification is reported separately from the mutation steps. | |
| sequence | No | Sequence number (1..99999). Required unless use_selected_sequence is true; exactly one of the two. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| use_selected_sequence | No | Act on the console's currently selected sequence. It is resolved to its sequence number first, and the command is sent with that explicit number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does so: pre-existence check with refusal before sending, read-back verification with matched/mismatched/unavailable outcomes, no change to selection or programmer, never retried, and an explicit caveat that the mutation lock does not isolate from other console operators or clients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and command, then layered with constraints and return semantics; nearly every sentence is load-bearing. It is dense and telegraphic, with a few clauses that read as run-ons rather than flowing prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description supplies the missing behavioral and return-shape vocabulary (verification statuses) plus concurrency caveats. An agent has what it needs to call it safely and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents cue, verify, sequence, data_pool, and use_selected_sequence. The description reinforces the single-cue-number rule but adds no format or resolution detail beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete exactly one explicit cue') and even gives the exact console command issued. It implicitly distinguishes itself from sibling tools like gma3_store_cue and gma3_edit_cues by insisting on a single explicit cue and rejecting ranges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use constraints: one explicit cue only, ranges (Thru, +) rejected, and the operation is refused if the cue does not exist. It does not name a sibling alternative for range deletions, but the usage envelope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_delete_tagDelete tagsA
Delete a tag (by number or exact name; a name more than one tag has is refused). It leaves every object that carries it: removedFrom lists them (from the console's reverse lookup, before the delete) and each is re-read afterwards (stillCarries), and the slot is read back empty. Needs bridge 0.36.0. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag number or exact name. Required unless tags is given. | |
| tags | No | Batch form: several tags, each {tag}. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | Read back (default true). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the reverse-lookup reporting (removedFrom before delete), post-delete re-reads (stillCarries), the empty-slot read-back, and a hard bridge version prerequisite (0.36.0). Batch behavior is unusually well specified — ordered execution, no retries, an unknown outcome halting the remainder. Missing only side-effect framing such as whether the delete is undoable or what authority is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and scope, then layered single-form, prerequisite, and batch rules in a logical order. It is a single dense paragraph with some run-on clause chaining that could be split, but no sentence is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no annotations and no output schema, this covers verification, per-item reporting, failure propagation and a version gate — nearly everything an agent needs. The remaining gap is the absence of any statement about permissions or irreversibility, which matters for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds real meaning by explaining the collision rule behind the `tag` parameter and the inheritance model for `tags` (item fields win over the shared defaults). The `detail` semantics are restated in prose ("detail: true for every step"), which slightly duplicates the schema but reinforces the per-item output shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Delete a tag") and pins the identifier form: number or exact name, with ambiguity refused. That is enough for an agent to separate it from gma3_store_tag, gma3_assign_tag and gma3_configure_tag without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear rule for choosing the batch form over the single form ("give the list instead of the single object's fields") and explains how per-item and default arguments interact. It stops short of naming sibling tools or stating when tag deletion is preferable to reconfiguring/ungrouping, so usage context is clear but not fully routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_dialogRead or answer the console's open dialogA
For a dialog no structured tool answers, e.g. a macro's Lua Confirm() (gma3_run_macro reports an open dialog). action read (read-only): the top modal's class, title, message and buttons (text, enabled), or open: false. action press: clicks one button, named by its exact text, after checking that the open dialog still shows expect_title and/or expect_text as read returned them ("" for a dialog without a title) and that the button is there and enabled; a different dialog is never answered. Then the dialog is read again: closed, replaced by another dialog, or still open, with the console's last command (which does not name the button: check the effect on the object). Requires exclusive: true for press. What a button does has NO UNDO. Buttons that delete, overwrite, load a show or discard changes are pressed only because the call names them: read the message first. Tools that open their own dialogs (gma3_save_show, gma3_patch_move) answer them themselves. Needs bridge 0.42.0.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| button | No | press: the button's text exactly as read lists it, e.g. "OK". | |
| exclusive | No | press: required, must be true: nobody else operates the console meanwhile. | |
| expect_text | No | press: the dialog's message as read returned it (whitespace is compared collapsed). | |
| expect_title | No | press: the dialog's title as read returned it ("" when it has none). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and delivers: read is read-only, press requires exclusive: true, the guard fields must match what read returned ("" when untitled), and the dialog is re-read afterwards returning closed, replaced, or still open. It goes further than most by warning that what a button does has NO UNDO and that the console's last command does not name the button, so the effect must be checked on the object.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Nearly every clause carries distinct operational information, and the when-to-use condition is front-loaded. It is a dense block of semicolon-joined fragments rather than a structured list, which costs some scannability for a tool with two modes and four optional guard parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating what read returns (class, title, message, buttons with text and enabled, or open: false) and the three post-press states. For a five-parameter, annotation-free tool with irreversible button presses, that covers everything an agent needs to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so most parameters are already documented; the description still adds the purpose behind them — expect_title/expect_text exist as a safety comparison against the live dialog, and button must match the exact text read listed and be enabled. It adds a little more with the collapsed-whitespace comparison rule, though it does not restate the action enum values beyond the read/press behaviour split.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — read the top modal or press one of its buttons — and scopes it precisely as the fallback 'for a dialog no structured tool answers, e.g. a macro's Lua Confirm()'. It also names the sibling that reports the trigger condition (gma3_run_macro) and the siblings that handle their own dialogs, so an agent can separate it from every other tool in the list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives both directions: use it only for dialogs nothing structured covers, and skip it for gma3_save_show and gma3_patch_move which answer their own dialogs. It also prescribes the operating order — read the message first, then press — and states that a mismatched dialog is never answered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_dmxRead DMX output of a universeA
Raw DMX output for an explicit universe and channel range (channels 1..512; universe 1..1024, further bounded by the console's universe count). unit is explicit: "raw8" (0..255 per address) or "percent" (0..100 as the console converts it). Works with gma3_lua disabled (structured bridge op, plugin >= 0.3.0). Read-only: never changes selection, programmer or playback. Source is "dmx output": output levels, NOT programmer values. A universe that is not granted on this onPC returns no values with granted: false, a limitation (never zeros) and outputState explaining why (gma3_dmx_output has the whole picture). The range is from..to, or from plus count addresses (one of to or count; neither reads the one address from). nonzero_only (also accepted as nonzeroOnly, the result's spelling) is an explicit filter. patched: true additionally maps each returned address to its fixture/channel through the RT channels (bounded; stated in limitations when skipped). 16-bit attributes appear as two separate 8-bit addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last channel (1..512, >= from). Default: same as from. Not with count. | |
| from | Yes | First channel (1..512). | |
| unit | No | raw8 (default): 0..255 per address. percent: 0..100 as converted by the console. | |
| count | No | Number of addresses from `from` (1..512; from + count - 1 <= 512), instead of to. | |
| patched | No | Map each returned address to fixture ID / channel name via the RT channels (default false). | |
| universe | Yes | DMX universe number (1..1024). | |
| nonzeroOnly | No | Same as nonzero_only (the spelling the result uses). | |
| nonzero_only | No | Only return addresses whose value is not zero (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so thoroughly: read-only with no effect on selection/programmer/playback, the granted:false/no-values limitation, outputState rationale, the bounded patched mapping and the 16-bit split into two 8-bit addresses. This is exactly the behavioral context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and constraints, then parameter notes; every sentence is substantive. It is dense and slightly repetitive around the nonzero_only spelling alias, which keeps it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, annotation-free, no-output-schema read tool, the description covers return semantics (values, granted, limitations, outputState) and all behavioral caveats. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the baseline, but the description adds real meaning: unit is framed as explicit with conversion semantics, the from..to vs from+count exclusivity is stated along with the default that neither reads the single address, and the nonzero_only/nonzeroOnly alias is explained. It does not add anything about patched failure modes beyond 'stated in limitations', so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Raw DMX output for an explicit universe and channel range'. It further distinguishes itself from nearby tools by naming gma3_dmx_output for the whole picture and by explicitly separating DMX output levels from programmer values (gma3_programmer).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: works with gma3_lua disabled, requires plugin >= 0.3.0, and defers to gma3_dmx_output for broader state. It does not spell out explicit when-not conditions (e.g. when to prefer gma3_fixture_output), so it stops just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_dmx_outputRead DMX universes, grants and Art-Net / sACN outputA
Read-only. Every universe in use (patched or set to output, plus any asked for): fixtures patched, whether it is granted, its grant request, ports, merge mode, and the Art-Net / sACN entries that cover it with the protocol universe they send it as. Each universe is explained: idle, not granted (no output and unreadable values, with why), granted but sent by no protocol, or sent as which universes. Also both protocols (output and input switches, interface, every data entry: local universes, amount, protocol universe, mode, enabled, priority) and the output stations. Use it when gma3_fixture_output or gma3_dmx return no values. Needs bridge 0.30.0.
| Name | Required | Description | Default |
|---|---|---|---|
| universes | No | Universes to include besides the ones in use (1..1024). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it declares itself read-only and, more usefully, explains the diagnostic states returned (idle, not granted with no output and unreadable values, granted but unsent, sent as which universes). It also discloses a version prerequisite ('Needs bridge 0.30.0'). It does not state what happens if the bridge is older, nor anything about size/limits of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key constraint and the usage rule are front-loaded, but the middle is a single sprawling sentence dense with stacked parentheticals that is hard to parse at a glance. Since there is no output schema, enumerating return contents earns its place, but the packing is inefficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read tool with no output schema, the description does the necessary work of describing what comes back and how each universe is classified, plus the bridge version gate. It stops short of covering failure behavior when the prerequisite is unmet or the response is large.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional parameter is already documented as 'Universes to include besides the ones in use.' The phrase 'plus any asked for' in the description mirrors that schema text without adding format, range, or interaction details, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read-only' and names the specific resource: every universe in use, with patch, grant, ports, merge mode, and Art-Net/sACN entries. It does not explicitly differentiate itself from gma3_configure_dmx_output (the write-side sibling), and the field enumeration is dense enough to partly obscure the core purpose, but a verb+resource is clearly present.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule: 'Use it when gma3_fixture_output or gma3_dmx return no values,' naming two alternatives by name. It lacks an explicit when-not-to-use statement and never mentions the configure counterpart, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_dumpDump an objectA
Return the raw grandMA3 Dump() text for an object: class, path, every property and child. Verbose; prefer gma3_get_object for structured data.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference. Either command-line object syntax ("Sequence 1", "Sequence 1 Cue 3", "Fixture 101", "Group 5", "Macro 2", "Page 1.201"), a dotted show-data path from a root ("DataPool.Sequences", "Root.ShowData", "Patch.Fixtures"), a numeric address like "14.14.1.6.1", or one of: Root, ShowData, DataPool, SelectedSequence, CurrentCue, Patch, Programmer, Selection, CurrentExecPage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it discloses that the output is raw, verbose, and includes the full property/child tree, which is meaningful for a tool with no output schema. It stops short of stating read-only nature explicitly or any size/truncation behavior on large objects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the primary effect, followed by the comparison clause. Every fragment earns its place with zero padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers what is returned (class, path, properties, children) and flags verbosity, which is enough to call correctly. Only minor gaps remain around read-only confirmation and behavior on very large objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is a single parameter whose accepted reference syntaxes are fully enumerated in the schema. The description adds no syntax, format, or resolution details beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (return) and resource (raw grandMA3 Dump() text for an object) and enumerates exactly what the text contains: class, path, every property and child. It also names the sibling that produces structured data, so an agent can distinguish gma3_dump from gma3_get_object without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Verbose; prefer gma3_get_object for structured data" explicitly names the alternative and the condition that selects it. The implicit converse rule (use this when you need the raw dump text) is directly derivable, leaving nothing to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_edit_cuesSet trigger, timing and names on a range of cuesA
Edit existing cues of a sequence in one call: the same trigger (TrigType/TrigTime), the same timing (Part 0 CueInFade, CueInDelay, CueOutFade, CueOutDelay, SnapDelay), one name per cue, and/or a command (command for all, commands one per cue). A switch from Time to another trigger sets each cue's TrigTime to 0 on the console, and a switch back keeps the 0: the result lists the wiped times (wipedTrigTimes); keep_times: true saves them in the sequence's Note first ([gma3-mcp trigtimes 1=2.5 ...]), and trigger time with restore_times: true sets them back and removes them from the note. Choose the cues with exactly one of cues (a list), from/to (a range, either end optional) or all: true; names are given in cue order, one per cue. Refuses (nothing sent) when the sequence or a listed cue does not exist, or the number of names differs. One Set() per property, cue by cue; stops at the first failure and reports every cue. Reads the written properties back per cue. Stored values and the programmer are not touched.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| all | No | ||
| cues | No | ||
| fade | No | Cue in fade, seconds (Part 0 CueInFade). | |
| from | No | ||
| time | No | Trigger time in seconds (TrigTime). | |
| delay | No | Cue in delay, seconds. | |
| names | No | One name per selected cue, in cue order. | |
| verify | No | ||
| command | No | The same command (Part 0 Command) on every selected cue. | |
| trigger | No | go, time (needs time), follow (optional time), sound, bpm. | |
| commands | No | One command per selected cue, in cue order. | |
| out_fade | No | Out fade, seconds. | |
| sequence | Yes | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| out_delay | No | Out delay, seconds. | |
| keep_times | No | With a trigger other than time: save the trigger times the switch sets to 0 in the sequence's Note. | |
| snap_delay | No | ||
| restore_times | No | With trigger time: set each cue's saved trigger time from the sequence's Note (time is the fallback) and remove them from it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it well: it discloses the Time-trigger wipe-to-0 side effect, the Note-based save/restore mechanism, per-property Set() ordering, abort-on-first-failure with per-cue reporting, read-back, and that stored values and the programmer are untouched. Remaining gaps are the return payload beyond wipedTrigTimes and any permission or rate considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries real information, but it is delivered as one dense semicolon-chained paragraph mixing purpose, side effects, selection rules, failure behavior and return behavior. Front-loading is good; scannability is not, and a reader has to re-parse clauses to find the selection rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter mutation tool with no annotations and no output schema, the definition covers the risky behaviors, the naming contract, and the destructive Time-wipe consequence, which is the critical part. It is not fully complete: verify, data_pool and sequence semantics are undocumented and the response shape is only partially described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
At 63% schema coverage the description meaningfully compensates, explaining the mutually exclusive cue selectors, that names are positional and one per cue, that trigger accepts go/time/follow/sound/bpm with time implications, and that command vs commands differ in cardinality. It leaves verify, sequence and data_pool unexplained, but the added semantics clearly exceed the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Edit existing cues of a sequence in one call', and enumerates exactly which properties (trigger, timing, name, command) can be changed in bulk. It is clear what the tool does, but it never names the single-cue siblings gma3_set_cue_timing, gma3_set_cue_trigger or gma3_store_cue, so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong in-tool guidance: the agent is told to select cues with exactly one of cues, from/to or all, and that calls are refused when the sequence or a listed cue is missing or the name count mismatches. The keep_times/restore_times pairing is explained as a when-to-use contract. What is missing is routing guidance between this bulk editor and the single-cue siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_edit_layout_elementsAdd, update or remove layout elementsA
Apply up to 100 explicit element edits in one existing layout and required data pool. Add requires integer x/y/width/height in layout units; positions are Int16 and dimensions 1..32767. Update/remove require the current element number and GUID from gma3_layouts; stale/duplicate identities, locks and read-only properties are refused. Never clears/rebuilds the layout. Add sends Store Layout n.k /NoConfirmation to append a blank element; assignment uses set Object with a resolved numeric address, never Assign At Layout n.k (which appends). Remove sends Delete Layout n.k /NoConfirmation for the confirmed GUID. Other supplied fields use one set each. Object assignment accepts Macro/Sequence/Group; replacing a different assignment requires replace_object:true. Actions are validated for the actual assigned object class. Appearance overrides use a global Appearance pool number, resolved and verified by encoded handle/address. Custom text preserves case, quotes and internal spaces; leading/trailing whitespace is refused because read-only bridge fields trim it. Custom text accepts RGBA hex colour, captured font-size enums and alignment; visibility accepts Visible/Hidden. Reads GUIDs and typed object handles separately, and verifies identities, supplied properties and object addresses after edits; visual rendering and actual action execution are not verified. Does not select fixtures, clear programmer values, invoke layout elements, or execute assigned macros or sequences. Uses existing bridge operations without Lua, OSC fallback or automatic replay. Preview reads and validates without mutations. Mutations are serialised within this server, without isolation from another operator or client. Every property write requires read-back; uncertain writes stop the plan and require inspection before retrying. Layout Viewer window setup, grid and fit settings are outside this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | ||
| layout | Yes | ||
| preview | No | ||
| data_pool | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description thoroughly discloses mutation and failure behavior: stale identities, locks, and read-only properties are refused; removals target confirmed GUIDs; writes require read-back; and uncertain writes stop the plan. It also covers preview non-mutation, post-edit verification limits, serialization without cross-client isolation, and the absence of macro, sequence, or layout-element execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and nearly every sentence supplies a useful constraint, prerequisite, or boundary. However, it is a very dense single paragraph, and the command-level implementation details make it harder to scan than a short overview followed by grouped operation and safety notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested batch-mutation tool with no annotations or output schema, the description supplies unusually complete invocation context: prerequisites, per-operation behavior, validation, side effects, verification, concurrency limitations, and explicit non-goals. An agent has enough information to construct edits safely and understand what success does and does not prove.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains nearly all consequential inputs, including geometry units and ranges, identity provenance, supported object classes, replacement semantics, appearance-pool addressing, text formatting constraints, visibility values, and preview behavior. It adds operational meaning rather than merely restating field names or types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence precisely defines the operation and scope: applying up to 100 element edits within one existing layout and data pool. It then distinguishes add, update, and remove behavior and explicitly excludes clearing or rebuilding the layout and configuring Layout Viewer settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete prerequisites for each operation, including required geometry for additions and current element numbers and GUIDs from gma3_layouts for updates and removals. It also explains when replace_object is necessary, how to use preview safely, and which tasks are outside the tool's scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_edit_macro_lineInsert, change, move or remove one macro line (never runs it)A
action insert (line 1..count+1, needs command), set (any of command, wait, enabled, add_to_cmdline, execute, name, note), move (line -> to; sent as upward moves only, because a downward Move lands one place short), remove. References in a written command are checked unless raw: true. Refuses a locked or running macro. Every line is read back and compared with the expected order and content; accept_console_form as in gma3_store_macro. Never runs the macro. Batch form (edits): the edits run in order, each against the macro as the earlier edits left it (line numbers shift after an insert, move or remove); once an edit on a macro does not succeed, the later edits on that macro are not attempted. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| raw | No | ||
| line | No | Required unless edits is given. | |
| name | No | ||
| note | No | ||
| wait | No | ||
| edits | No | Batch form: several edits in order, each {macro, action, line, ...}; macro may be given once for all. | |
| macro | No | Macro number. Required unless edits is given (it may then be a default for every edit). | |
| action | No | Required unless edits is given. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | ||
| command | No | ||
| enabled | No | ||
| execute | No | ||
| preview | No | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| add_to_cmdline | No | ||
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| accept_console_form | No | ||
| allow_unresolved_dependents | No | Edit even when a later line uses an object this edit stops an earlier line from storing (default false: refuse). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it discloses the locked/running-macro refusal, reference checking unless raw, the upward-only move workaround, mandatory read-back with order/content comparison, and the batch failure model (stop on first failure, no retries, skip items on already-failed objects). These are behaviors no schema field could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Action semantics are correctly front-loaded, but the batch behavior is stated twice in overlapping sentences ('the edits run in order...' then 'give the list instead of the single object's fields...'), and the parenthetical chaining makes it dense and hard to scan for a 20-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 20-parameter, mutation-heavy tool with no annotations and no output schema, the description covers ordering, failure semantics, verification, and action-specific requirements. Gaps remain around verify, preview, and macro's defaulting behavior, plus what a successful result actually contains beyond 'one line per item'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Coverage is 40% across 20 parameters, and the description compensates well for the key ones: line bounds, to as move destination, raw bypassing reference checks, detail controlling per-item verbosity, and each action's applicable fields. It leaves macro, verify, and preview unexplained in both schema and description, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (a macro line) and enumerates the four concrete operations (insert, set, move, remove) with their operand rules, and the title states the crucial scope: 'never runs it'. An agent can distinguish this from gma3_run_macro and gma3_store_macro without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives per-action conditions (insert needs command, line range 1..count+1; set accepts specific fields; move is sent as upward moves only) and explains when to use the batch edits form versus the single object form, including that top-level arguments become defaults. It stops short of naming an explicit alternative for execution, though 'never runs the macro' plus the gma3_run_macro sibling makes the exclusion inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_edit_recipeAdd, change, move or remove a recipe lineA
Edit one standard recipe line of a preset or cue part (the target must exist). action add {selection: group, values: "N.M" preset, matricks?, name?, enabled?, selection_mode?} appends a line; set {line, ...fields} changes it (values: null clears the values); move {line, to} reorders; remove {line} deletes it. References are checked first; the result reads every line back (the edited one and that the others are unchanged or moved as asked). The console re-cooks an edited line by itself (MergeLowPriority) and a removed line's output disappears: the result shows the target's coverage before and after (autoCooked). The console also re-cooks a group or preset change by itself a moment later (in the background); gma3_cook_recipes cooks at once, verifies, and offers Merge, Overwrite and Remove. enabled: false switches a new line off before it gets values, so it never cooks. Phaser lines, filters and the per-line MAtricks columns are not edited by this tool (many cues at once, with the columns: gma3_store_recipe_cues). values is the plain string "4.2", never a number. preview: true returns the planned commands.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | New position (move). | |
| line | No | Line number (set, move, remove). | |
| name | No | ||
| action | Yes | ||
| target | Yes | Preset or cue part. | |
| values | No | Preset as the plain string "N.M" ("4.2"; a number is refused: 4.20 and 4.2 are the same number); null clears it. | |
| enabled | No | ||
| preview | No | ||
| matricks | No | MAtricks pool number. | |
| selection | No | Group number. | |
| selection_mode | No | Strict: values only on the selected fixtures; Normal: passed down to sub-fixtures. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description discloses reference validation, full line readback, automatic MergeLowPriority re-cooking, output disappearance after removal, before-and-after coverage reporting, and deferred background cooking after group or preset changes. It also explains that a newly disabled line never cooks and that preview returns planned commands, making both destructive and deferred effects unusually visible before invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and compact action syntax are front-loaded, and essentially every sentence conveys operational information rather than repeating structured fields. However, the long single paragraph and dense brace-and-semicolon notation reduce scannability; short action and behavior sections would be easier to use.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with nested targets, no annotations, and no output schema, it covers preconditions, per-action invocation, validation, verification results, automatic and deferred side effects, exclusions, alternatives, and preview behavior. The few remaining addressing details are reasonably recoverable from the schema, so an agent has enough context to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Beyond the 64%-covered schema, it maps parameters to each action, explains the otherwise undocumented enabled and preview behavior, and clarifies values formatting, null clearing, and the practical rejection of numeric preset values. The shorthand set {line, ...fields} and the lack of explicit examples for alternative nested target forms leave small gaps, but the description substantially compensates for the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence precisely identifies the operation, resource, scope, and precondition: editing one standard recipe line of an existing preset or cue part. It then distinguishes all four actions and later excludes phaser lines, filters, and per-line MAtricks columns, clearly separating this tool from its recipe-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit exclusions route bulk cue editing and per-line column work to gma3_store_recipe_cues, while immediate verified cooking is routed to gma3_cook_recipes. Action-specific requirements, the existing-target precondition, and the distinction between automatic background cooking and immediate cooking provide concrete selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_executor_configurationLoad or recast an executor configurationA
Load an existing Configuration onto an explicit page/executor, or plan and recast its functions on every referencing executor. Uses Assign Configuration At Page . or Recast Configuration . Load checks full page occupancy against the configuration size first. Recast defaults to a read-only plan: it scans all data pools (maximum64), pages(maximum200 per pool), and requires apply:true with executors exactly matching the fresh affected list, each {data_pool,page,executor}. Recast preserves existing executor sizes. Missing/unreadable targets and page/executor locks are refused; unlock explicitly first. preview:true sends nothing. Does not change selection, programmer, fader levels or trigger playback; stored custom commands are not executed. Read-back verifies configuration identity, unchanged assigned object and expected dimensions; returned functions are observations, not verification of the complete saved profile (that profile is unavailable). Saving profiles is unsupported because Store Page At Configuration returned OK without storing one. Mutations are serialised within this server; other operators/clients can change references after the plan. An uncertain command is never retried.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| apply | No | ||
| action | Yes | ||
| preview | No | ||
| executor | No | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| executors | No | ||
| configuration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so unusually well: it discloses refusals (missing targets, locks), that preview:true sends nothing, that selection/programmer/faders/trigger playback are untouched and stored custom commands are not executed, that mutations are serialised only within this server while other clients can change references, that uncertain commands are never retried, and that returned functions are observations rather than verification of a saved profile. It also explains the verification approach (read-back of identity, unchanged assigned object, expected dimensions) and why saving profiles is unsupported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence and every subsequent sentence conveys a distinct safety or planning fact. It is dense to the point of being hard to parse in one pass, and the closing note about Store Page At Configuration is an aside that could be trimmed, but the content is not padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, mutation-capable tool with no annotations and no output schema, the description covers mode selection, planning, locking, side effects, serialisation and verification scope. The remaining gap is that it never describes the shape of a successful response or what a plan result looks like, which matters since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, so the description must compensate, and it largely does: it ties page/executor to the Assign syntax, configuration to <n>, apply to committing a recast, preview to sending nothing, data_pool to the pool scan, and executors to the exact {data_pool,page,executor} match requirement. It adds the constraint (must match the fresh affected list) that the schema cannot express, though it does not clarify units/ranges for page, executor or data_pool beyond what the schema has.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names two concrete operations on a specific resource: load an existing Configuration onto an explicit page/executor, or recast its functions across all referencing executors, and gives the underlying command syntax (Assign Configuration <n> At Page <p>.<e> / Recast Configuration <n>). That is specific verb+resource, though 'recast' is domain jargon and the description never distinguishes this tool from nearby siblings such as gma3_assign_to_executor or gma3_configure_executor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditions for each mode: load for a single explicit page/executor, recast for all referencing executors, with recast defaulting to a read-only plan that requires apply:true plus an executors list matching the fresh affected list. It also states prerequisites for failure cases (missing/unreadable targets and page/executor locks are refused, so unlock first). It stops short of naming an alternative sibling tool when this one is the wrong choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_executorsList executorsA
List executors on the current executor page with their assigned object, key/fader functions and master fader level, and for an assigned sequence its playback state (assigned.currentCue {no, name} while it plays, assigned.lastCue after Off; bridge 0.32.0). Executor numbers: 101-115 top row, 201-215 faders, 301-315 etc.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Last executor number (default 315) | |
| from | No | First executor number (default 101) | |
| only_assigned | No | Skip empty executors (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does reasonably well: it discloses the exact returned fields and the state machine for sequences (assigned.currentCue {no, name} while playing, assigned.lastCue after Off) plus a bridge version dependency. It does not state read-only-ness explicitly, pagination behavior, or cost/latency of polling live console state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the operation and its returned fields, followed by the numbering reference an agent needs for the range parameters. The second sentence is heavily compressed and ends with a vague 'etc.', but nothing is truly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, no-output-schema read tool with no annotations, the description supplies what an agent needs: returned fields, playback-state semantics, and the numbering scheme for the range. Minor ambiguity remains between 'current executor page' scoping and the default 101-315 range, and no guidance is given on the volume or format of the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all three parameters document their defaults, so the schema already does the heavy lifting. The description adds real meaning for from/to by explaining the executor numbering layout (101-115 top row, 201-215 faders, 301-315 etc.), which helps an agent choose a sensible range, but only_assigned is not elaborated beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List executors on the current executor page') and enumerates the returned fields (assigned object, key/fader functions, master fader level, playback state). It does not explicitly differentiate itself from overlapping siblings such as gma3_executor_configuration, gma3_executor_settings or gma3_get_fader, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use statement and no named alternative, despite several sibling tools that also surface executor state. An agent must infer that this is the read/inspection path while gma3_executor_configuration and gma3_configure_executor are the mutation paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_executor_settingsInspect an executor and its sequence's playback settingsA
Read-only. For Page .: the assigned object; the executor's key, MA-key, fader and encoder functions, Fix and Lock; the page lock; for a sequence executor also the allowed function choices, the sequence's playback settings (wrap_around, priority, restart_mode, release_first_cue, auto_start/stop, master_go_mode, protect flags, ...), its Lock, whether it has active playback, which object owns each protection setting, and every executor in the current data pool that references the same sequence (sequence settings apply to all of them). The sequence is read by the address the executor reports, so a sequence from another data pool is reported as such (dataPool: other, ref: null). A value that could not be read is null and listed in unreadable. Sends no command and changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Executor page number (1-9999). | |
| executor | Yes | Executor number on that page: 101-190 (keys), 201-290 (faders), 301-390 and 401-490 (knobs), plus the Xkeys 191-198 and 291-298. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| references | No | Scan every page for executors sharing the sequence (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it declares the operation is side-effect free, explains cross-data-pool behavior (sequence read by reported address; dataPool: other, ref: null), defines failure semantics (unreadable values become null and are listed in 'unreadable'), and warns that sequence settings are shared by every referencing executor. Missing only operational context such as whether the console must be connected or how large the references scan can be.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The safety statement is front-loaded, but the body is a single sprawling sentence built from semicolon-separated clauses and a trailing parenthetical field list ending in an ellipsis. The elision ('...') leaves the enumeration open-ended and the density makes it hard to scan. It conveys a lot, but the structure works against comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return payload, and it does so thoroughly: object assignment, function mappings, locks, sequence playback fields, ownership of protection settings, and referencing executors. Combined with explicit null/unreadable semantics, an agent has enough to interpret results correctly; only the 'references' parameter behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema, establishing a baseline of 3. The description adds some meaning, clarifying that the sequence is looked up via the address the executor reports and that settings apply to all referencing executors, but it never mentions the 'references' toggle that controls the pool-wide scan.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (a specific page.executor address) and enumerates what is inspected: the assigned object, key/MA-key/fader/encoder functions, Fix and Lock, page lock, and for sequence executors the allowed function choices plus the sequence's playback settings. That is far more specific than the title alone. It stops short of naming the sibling write tools (gma3_configure_executor, gma3_executor_configuration, gma3_configure_sequence), so differentiation is implied only by 'Read-only'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read-only' and 'Sends no command and changes nothing' imply this is the inspection counterpart to the configure tools, which is real usage signal. However, no sibling is named and there is no explicit when-to-use versus gma3_executors, gma3_executor_configuration, or gma3_configure_sequence. Usage must be inferred from the read-only framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_feedbackRead console feedback stateA
Read-only console state for feedback (KB-06): command-line text, last command feedback, Blind/Highlight/Solo, Preview mode, a display's Preview bar, keyboard-shortcut enablement, aggregate MA state, current executor page, selected sequence, and per executor the assignment and fader level, per sequence its playback activity. Works with gma3_lua disabled, with console input disabled and while another client holds an input interaction; it acquires nothing and changes no console state (selection, command line, programmer, playback, focus). Every item carries available, value (null when unavailable, with a reason or error; false is an observed value), scope, source, observedAt and epoch. Items are read one after another, not as an atomic snapshot. lastCommand and maState are shared observations, not confirmation of a request or key owner; sequenceActive is playback activity, not executor button state; Freeze has no readable state and is always unavailable. With no arguments every parameterless reader is read (previewBar on display 1). Bridge op feedback.read (plugin >= 0.8.0).
| Name | Required | Description | Default |
|---|---|---|---|
| readers | No | Readers to include. Parameterised readers (executor, fader, sequenceActive) come from executors/sequences instead. Omit everything to read all parameterless readers. | |
| displays | No | Display indexes for previewBar (one item per display; a missing display is reported unavailable) (at most 8 per call; a longer list is refused up front) | |
| executors | No | Executor numbers on the user's current page: assignment (executor) and master level (fader) per number (at most 32 per call; a longer list is refused up front) | |
| sequences | No | Sequence numbers: playback activity (sequenceActive) per number (at most 32 per call; a longer list is refused up front) | |
| fader_tokens | No | Fader tokens read per executor (default ['FaderMaster']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden and does so thoroughly: it changes no console state (selection, command line, programmer, playback, focus), reads items sequentially rather than as an atomic snapshot, flags lastCommand/maState as shared observations rather than request confirmation, distinguishes sequenceActive from executor button state, and warns Freeze is always unavailable. It also documents per-item fields (available, value, scope, source, observedAt, epoch) and that null means unavailable while false is a real observed value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded with the readable items, but delivered as one long multi-clause paragraph with heavy parenthetical asides, which hurts scanability for an agent. Little is outright redundant, but the packing is dense enough that structure suffers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, enum-heavy tool with no output schema, the description compensates by explaining the shape of returned items and their semantics (available/value/scope/source/observedAt/epoch, null vs false). Combined with the acquisition and interaction caveats, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantic value: it clarifies that executor/fader/sequenceActive readers are parameterised and sourced from executors/sequences, that fader_tokens defaults to ['FaderMaster'], and that previewBar defaults to display 1. It also documents the meaning of the returned value semantics, which the schema cannot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (read-only console feedback state) and enumerates the exact readable quantities (command-line text, last command, Blind/Highlight/Solo, Preview, shortcuts, MA state, page, executor/fader/sequence activity). An agent can tell this is a state-reader apart from write-oriented siblings like gma3_command or gma3_set_fader without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real deployment context — works with gma3_lua disabled, with console input disabled, and while another client holds an input interaction, and it acquires nothing. However it never says when to prefer it over siblings such as gma3_status or gma3_hardkeys_status, and the no-argument default behavior ('every parameterless reader is read') is stated but not framed as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_fixture_attributesDiscover a fixture's attributesA
List the attributes of one fixture or subfixture with stable identifiers (attribute name, attributeIndex, uiChannel), pretty name, feature/feature group, activation group, physical unit, natural readout, the channel function's DMX and physical ranges, defaults, optional channel sets, and the DMX address mapping (coarse/fine/ultra as universe.address) from the RT channels. Subfixtures of a compound fixture are listed explicitly (subfixtures[], with their patch index); pass Fixture 501.3 to inspect one. Works with gma3_lua disabled (structured bridge op, plugin >= 0.3.0). Read-only: never changes selection, programmer or playback. The fixture is resolved by fixture ID through the console (patch index is reported separately as subfixtureIndex, never assumed equal). source says whether rows came from the UI channel API ("uiChannels") or the static fixture-type walk ("fixtureTypeWalk", no uiChannel). Null fields were not supplied by the console (explicitly unavailable, never inferred). Results are paginated. Not available: current values (use gma3_programmer / gma3_fixture_output).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 100, max 500). | |
| offset | No | Rows to skip (pagination). | |
| fixture | Yes | Fixture ID (101), subfixture ("501.3") or command reference ("Fixture 501.3"). One (sub)fixture only. | |
| include_channel_sets | No | Include each channel function's ChannelSets (named ranges such as gobo slots). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares read-only behavior ('never changes selection, programmer or playback'), the lua-disabled/structured-bridge mode and plugin version floor, that fixture resolution goes through the console rather than assumed patch index, the meaning of `source` values, and that null fields are explicitly unavailable rather than inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the returned-field inventory, then falls into shorter, higher-value sentences on resolution, source, nulls and pagination. The opening sentence is a dense run-on with nested parentheticals, but with no output schema the enumeration of return fields earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must cover returns and it does: field inventory, `subfixtures[]` shape, `source` provenance, null semantics and pagination. Combined with the environment constraints (lua disabled, plugin >= 0.3.0) and the read-only guarantee, nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning: the accepted fixture formats (numeric ID, '501.3' subfixture, 'Fixture 501.3' command reference), one-and-only-one (sub)fixture constraint, and the semantics of channel sets as named ranges like gobo slots.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource ('List the attributes of one fixture or subfixture') with an explicit scope (attributes, not current values). It enumerates the returned fields and is clearly distinguishable from gma3_fixture_output and gma3_patch_list, which the description itself references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the positive case (inspect one fixture/subfixture's attributes, e.g. 'Fixture 501.3'), the exclusion ('Not available: current values'), and names the alternatives to use instead (gma3_programmer / gma3_fixture_output). An agent is told both when to pick this tool and when not to.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_fixture_outputInspect a fixture's DMX outputA
Current DMX output of one fixture or subfixture per RT channel: channel name, attribute, universe.address, raw value (8-bit per address, combined to 16/24-bit when fine/ultra addresses exist; bits and unit say which), derived percent, and where the fixture type's channel function is known a physical value (conversion: "linear from channel function") and the active channel set. Works with gma3_lua disabled (structured bridge op, plugin >= 0.3.0). Read-only: never changes selection, programmer or playback. Source is "dmx output": these are output levels, NOT programmer values. Not available: per-attribute cooked output (the API has none), values on a universe that is not granted on this onPC (value null plus a limitation, and outputState explains each such universe: not granted, or not sent by any protocol; gma3_dmx_output has the whole picture). nonzero_only is an explicit filter (default false). Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 200, max 2000). | |
| offset | No | Rows to skip (pagination). | |
| fixture | Yes | Fixture ID (101), subfixture ("501.3") or command reference ("Fixture 501.3"). | |
| nonzero_only | No | Only return channels whose raw value is not zero (default false; channels with unknown value are kept). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full disclosure burden and does it well: read-only guarantee ("never changes selection, programmer or playback"), the data source semantics (output levels, not programmer values), degradation behavior on ungranted universes with outputState explaining each, the 8-bit/16-bit/24-bit combining rule, and pagination. Very little about calling this tool correctly is left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the return shape, then limitations, then the alternative tool, which is the right order for a read tool. The single long paragraph with stacked parentheticals (bit-depth explanation, universes caveat) is dense and could be broken up, but nearly every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the result shape itself — and it does, field by field, including raw value scaling, derived percent, physical conversion labels, and the active channel set. Limitations, prerequisites, and the degraded-universe path are all covered, so nothing critical is missing for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description only restates `nonzero_only` as an explicit filter defaulting to false and mentions pagination generically — consistent with, but not additive to, the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names a specific verb and resource ("Current DMX output of one fixture or subfixture per RT channel") and enumerates the returned fields. It explicitly separates itself from gma3_dmx_output ("has the whole picture") and distinguishes DMX output levels from programmer values, so an agent can tell the siblings apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: works with gma3_lua disabled, requires plugin >= 0.3.0, and points to gma3_dmx_output when the whole universe picture is needed. It also states what is not available (per-attribute cooked output) and that ungranted universes return null plus a limitation. It stops short of an explicit "use this instead of X when Y" rule for every sibling, but the routing context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_fixture_positionsRead fixture positions in 3DA
Read-only. Position, rotation and mesh mirroring of fixtures in the 3D stage, with the axes' meaning: X positive is stage left, Y positive is upstage, Z positive is up. Rotations are degrees as the console reports them (it renormalizes them, e.g. 0/180/0 reads 180/0/180), plus the quaternion (x,y,z,w) that identifies the rotation exactly. Positions in the requested unit.
| Name | Required | Description | Default |
|---|---|---|---|
| fids | No | Fixture IDs (up to 256). | |
| unit | No | Unit for positions and radii: m (default), cm, mm, ft or in. The console stores metres; rotations are always degrees. | |
| fixtures | No | Instead of fids: a command-line fixture range, e.g. "Fixture 101 Thru 112". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it declares the read-only nature, explains axis convention (X stage left, Y upstage, Z up), the console's degree renormalization with a concrete example (0/180/0 reads 180/0/180), and the exact quaternion form. The remaining gap is scope defaults — it never says what is returned when neither fids nor fixtures is supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the 'Read-only.' qualifier, then dense but every sentence supplies interpretation-critical detail (axes, renormalization, quaternion, units). The middle sentence is long and packs three ideas, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry return-value meaning — it covers position, rotation, quaternion and mesh mirroring, which is the important part. It is still silent on the default/all-fixtures case and the response container, so a small but real gap remains for a zero-required-parameter read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so fids, fixtures and unit are already fully documented in the schema, which sets the baseline at 3. The description only reinforces that positions follow the requested unit while rotations stay in degrees; it adds no detail on the fids-vs-fixtures exclusivity or the 256-fixture cap beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Read') and a specific resource ('Position, rotation and mesh mirroring of fixtures in the 3D stage'), so the agent knows this is a 3D-geometry read. It does not, however, distinguish itself from adjacent siblings such as gma3_fixtures, gma3_fixture_attributes or gma3_place_fixtures, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Read-only' hints that this is the query counterpart to a positioning/mutation tool like gma3_place_fixtures, but no alternative is named and no condition for choosing this tool over gma3_fixtures is stated. An agent can guess it is used to inspect existing 3D placement, but must infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_fixturesList patched fixturesA
List fixtures in the patch with ID, name, fixture type and DMX patch. Paginated; use filter to restrict (e.g. 'Fixture 1 Thru 50').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (default 200) | |
| fields | No | Property names per fixture (default: FID, CID, Name, FixtureType, Mode, Patch) | |
| filter | No | Command-line fixture range (default 'Fixture Thru' = all) | |
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full behavioral burden. It helpfully discloses that results are paginated and mentions the filter parameter, but it does not clarify permissions, rate limits, or whether the call is read-only (though 'List' strongly implies it). For a simple read-only listing this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with zero waste. The core purpose is front-loaded, followed immediately by the pagination and filter guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description tells what fields are returned and that paging exists, which partially substitutes for a missing output schema. But the offset parameter has no description in the schema or the description, leaving pagination semantics incomplete for an agent trying to page through results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents three of four parameters including defaults for fields and filter. The description restates the default field set and adds a filter example, but adds no semantics for offset, so it only marginally exceeds the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (fixtures in the patch) and enumerates the returned fields, making the tool's function clear. It does not explicitly distinguish itself from the similar sibling gma3_patch_list, so it falls short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete example for the filter parameter ('Fixture 1 Thru 50') and notes pagination, which implies usage context. However, it never says when to use this tool versus gma3_patch_list or other fixture/patch siblings, leaving the agent to infer the choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_get_faderRead fader valuesB
Read fader values and display text of a playback object (sequence, master, executor's object).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference. Either command-line object syntax ("Sequence 1", "Sequence 1 Cue 3", "Fixture 101", "Group 5", "Macro 2", "Page 1.201"), a dotted show-data path from a root ("DataPool.Sequences", "Root.ShowData", "Patch.Fixtures"), a numeric address like "14.14.1.6.1", or one of: Root, ShowData, DataPool, SelectedSequence, CurrentCue, Patch, Programmer, Selection, CurrentExecPage. | |
| tokens | No | Fader tokens (default ['FaderMaster']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. 'Read' implies a non-mutating operation and it mentions returning display text, but it does not disclose permissions, side effects, or whether it alters playback state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no filler. It states the action and return content efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with full schema coverage and no output schema, the description is largely sufficient: it states what is read and that display text is returned. It leaves some gaps around return structure and permissions, but those are minor for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents 'ref' and 'tokens'. The description adds only that the object is a playback object, which is already implied by the tool name and title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('fader values and display text') and scopes the operation to a playback object. It implicitly distinguishes itself from the sibling gma3_set_fader by being a read operation, but it does not explicitly name or contrast with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool does but gives no explicit when-to-use guidance, prerequisites, or alternatives. It does not say when to prefer this over gma3_get_object, gma3_playback, or gma3_set_fader.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_get_objectRead a show objectA
Read an object from the show data: name, class, address, all properties (as display text), optionally the property schema and a listing of its children. Use this to inspect sequences, cues, executors, fixtures, presets, groups, macros, pages, settings, etc. TAGS reads as a list of {tag, name, protect} (bridge 0.36.0; gma3_tags lists the tags and the objects that carry them).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference. Either command-line object syntax ("Sequence 1", "Sequence 1 Cue 3", "Fixture 101", "Group 5", "Macro 2", "Page 1.201"), a dotted show-data path from a root ("DataPool.Sequences", "Root.ShowData", "Patch.Fixtures"), a numeric address like "14.14.1.6.1", or one of: Root, ShowData, DataPool, SelectedSequence, CurrentCue, Patch, Programmer, Selection, CurrentExecPage. | |
| schema | No | Include property schema (name, type, readOnly, enum) | |
| children | No | Include a listing of child objects (default false) | |
| properties | No | Include property values (default true) | |
| child_limit | No | ||
| child_fields | No | Property names to include for each child | |
| child_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the load and does add non-obvious behavior: property values come back 'as display text' rather than raw values, and children are opt-in. It also discloses the bridge version (0.36.0) and the exact TAGS return shape {tag, name, protect}. It omits error behavior for invalid refs and any cost/size caveats when reading large subtrees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded paragraph that leads with what is returned and follows with use cases, with no filler sentences. The trailing TAGS parenthetical is dense but earns its place by explaining an otherwise surprising return shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter reader with no annotations and no output schema, the description does the important work of enumerating the returned fields and the shape of the TAGS payload. Remaining gaps are pagination semantics for child_limit/child_offset/child_fields and what happens on an unresolvable ref.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so baseline is 3. The description maps the three boolean flags to their effects (properties as display text, optional schema, optional children listing), but says nothing about child_limit, child_offset or child_fields — and the schema itself leaves child_limit and child_offset undescribed, so that gap is unfilled on both sides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Read an object from the show data') and enumerates the return payload (name, class, address, properties as display text, optional schema and children). It partially differentiates from siblings by naming gma3_tags for tag listings, but does not distinguish itself from near-overlapping readers like gma3_sequences, gma3_cues or gma3_list_children.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to inspect sequences, cues, executors, fixtures, presets, groups, macros, pages, settings, etc.' gives a clear use context but no exclusions or routing rules. An agent still has to guess whether gma3_get_object or the domain-specific siblings (gma3_cues, gma3_sequences, gma3_list_children, gma3_dump) is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_goto_cueGoto a cue (playback)A
PLAYBACK MUTATION: sends Goto Sequence n Cue c [Fade s], which jumps the sequence to that cue and changes live output. Goto is a playback mutation. The sequence's current cue is read back a frame after the command; the crossfade runs asynchronously and its completion is not verified. Refuses (nothing sent) when the cue does not exist. Does not change the selection or the programmer. Verification: matched when the sequence plays that cue a frame later (playbackState has the cue's number and name; needs bridge 0.32.0). The mutation lock orders only this server's own mutations; it does not isolate the operation from another console operator or another client.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | One cue number, fractional allowed (2, 2.5, "10.001"; max three decimals). Ranges (Thru, +) are rejected. | |
| fade | No | Crossfade time in seconds that overrides the cue's own timing (Goto ... Fade s). 0 is a value. | |
| verify | No | Read the result back after the mutation (default true). Verification is reported separately from the mutation steps. | |
| sequence | No | Sequence number (1..99999). Required unless use_selected_sequence is true; exactly one of the two. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| use_selected_sequence | No | Act on the console's currently selected sequence. It is resolved to its sequence number first, and the command is sent with that explicit number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that output changes live, the crossfade is asynchronous and completion is unverified, nonexistent cues are rejected before anything is sent, selection/programmer are untouched, and verification requires bridge 0.32.0. It even scopes the mutation lock's guarantee honestly by noting it does not isolate from other operators or clients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical fact ('PLAYBACK MUTATION') is front-loaded and the sentences are information-dense. The clause 'Goto is a playback mutation' is a redundant restatement of the opening label, a small waste in an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter mutation with no annotations and no output schema, the description covers refusal conditions, async timing, verification method, and concurrency caveats well. It stops short of characterizing the returned payload beyond the verification status, which is the one remaining gap for an output-schema-less tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all six parameters, but the description adds value by tying them to console syntax ('Goto Sequence n Cue c [Fade s]'), clarifying the fade override intent, and explaining that the current cue is read back a frame later for verification. The verify and sequence-resolution semantics are largely echoed from the schema, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('sends `Goto Sequence n Cue c [Fade s]`, which jumps the sequence to that cue and changes live output'), so the agent knows exactly what console action results. It is clearly separable from siblings such as gma3_store_cue or gma3_set_cue_timing because it emphasizes this is playback, not editing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context for use is explicit: it is a playback mutation that changes live output, and it refuses with nothing sent when the cue does not exist. It also rules out adjacent behavior ('Does not change the selection or the programmer'), though it never names an alternative sibling (e.g. gma3_playback or gma3_command) or states when to prefer those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_hardkeyPress a logical MA keyA
Press, release or tap a logical MA hardkey (PLEASE, STORE, ESC, CLEAR, OOPS, NUM0-9, EXEC with executor, MA) on the console through the bridge's keyboard backend: REAL console keys are pressed through the operator's shortcut table or a verified native route (MA = LeftShift, PLEASE = Enter redirect); unmapped, ambiguous or colliding routes are refused before dispatch. tap presses and releases with hold_ms (default 50, max 5000) and returns once the release was attempted; exclusive: true is the intended long-press (every other input is refused meanwhile). On the Quickey backend a tap of a code with direct-tap evidence, without exclusive and with hold_ms 50 or less, is one Press Quickey (nothing held; KB-29, bridge 0.37.0). keys (2-4 logical keys) presses a combination in order and releases newest first (chord tap with action tap; a hold with action press). press holds the key until release or the interaction/lease ends and REQUIRES an interaction id (gma3_input_interaction acquire). While any key is held, an interaction is open or a release stayed unresolved, the bridge refuses commands/property/playback/fader/Lua from every client with [busy]. Input is OFF until the operator runs Plugin "gma3_mcp_bridge" "input=keyboard" (release works while off). Input is not display-scoped. The result never claims a UI effect: verification is unavailable unless an observable (aggregate MASTATE for MA) showed the expected value; a release on this backend is 'dispatched', never 'confirmed'. Nothing is retried or replayed; an uncertain dispatch is reported as unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Logical MA key resolved through the operator's live shortcut table (MA = LeftShift natively, PLEASE = the native Enter redirect). MA1/MA2 are unsupported. | |
| keys | No | A combination pressed in order (e.g. [MA, STORE]) and released newest first. Instead of key. | |
| action | Yes | ||
| display | No | Display index passed to the console as API context only. It must exist; input is NOT display-scoped on onPC 2.5.1 (no routing, focus or pop-up placement is promised). | |
| hold_ms | No | tap only: how long the key (or chord) stays down before the scheduled release (default 50). | |
| executor | No | ExecutorIndex of a mapped executor shortcut; required with key EXEC, refused otherwise. | |
| exclusive | No | tap/press of a single key only: the intended long-press; refused while anything else is held, and refuses every other input until released. | |
| interaction | No | Id from gma3_input_interaction acquire. Required for a standalone hold (press). A bounded tap, chord tap, text or sequence may run without one (it owns an interaction for its duration) but must pass the id while this server has one open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: [busy] refusals across every client while a key is held or an interaction is open, no retry/replay with uncertain dispatches reported as unknown, and the candid statement that a release is 'dispatched', never 'confirmed', with no UI-effect claim. Prerequisites (operator must enable input=keyboard) and scope limits (not display-scoped) are spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the body is one dense wall of parentheticals, internal references (KB-29, bridge 0.37.0) and nested clauses that slow parsing. Almost every sentence carries real information, so the problem is structure and density rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no annotations and no output schema, the description covers prerequisites, concurrency/busy behaviour, result interpretation and failure semantics. An agent has enough to call it correctly and to explain an outcome without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 88%, yet the description still adds meaning beyond it: keys is pressed in order and released newest first (chord tap vs hold), exclusive is the intended long-press that blocks all other input, executor pairs with EXEC, and interaction must be passed while the server has one open. These are semantic constraints the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set (press, release or tap) and a concrete resource (logical MA hardkey), enumerating the supported keys and the backend used. An agent knows exactly what the tool does, though it never contrasts this with sibling gma3_keyboard or gma3_type, so the boundary with those tools must be inferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives rich conditional guidance: tap vs press vs keys-chord, exclusive for long-press, press requires an interaction id from gma3_input_interaction acquire, and input is OFF until the operator runs the input=keyboard plugin. Missing explicit routing advice for when to choose gma3_keyboard or gma3_type instead, which is the main gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_hardkeys_release_allRelease every key this server holdsA
Release every key held by this server's bridge session, newest first, with the stored press tuples (never re-resolved), and with recover: true also re-attempt the releases that stayed unresolved (a remapped or disabled shortcut, a release that raised). Works while input is disabled: this is the recovery path. A release on the keyboard backend is 'dispatched' (no per-key readback), an unresolved one is reported as unknown and stays as a record until it succeeds or the operator runs Plugin "gma3_mcp_bridge" "input recover". Only this server's keys are affected; another client's or a physical operator's keys are not.
| Name | Required | Description | Default |
|---|---|---|---|
| recover | No | Also re-attempt this server's unresolved releases (after the operator restored a remapped route or re-enabled shortcuts). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers: release ordering (newest first), that stored press tuples are never re-resolved, that the keyboard backend only 'dispatches' with no per-key readback, that unresolved releases are reported as unknown and persist until they succeed, and exactly whose keys are affected. These are non-obvious behavioral traits an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its scope are front-loaded, and nearly every clause adds operational information. It is a single dense run-on sentence with strained phrasing ('with recover: true also re-attempt the releases that stayed unresolved') and a slightly redundant closing scope sentence, so readability suffers even though little is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover behavior and results, and it does: it explains what a successful dispatch looks like, how unresolved releases surface, and that records persist. The only loose end is what the call actually returns (list of keys, counts), which an agent calling this would likely want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single 'recover' boolean and the baseline is 3. The description goes beyond it by explaining the concrete failure conditions recover addresses (a remapped or disabled shortcut, a release that raised) and the persistence semantics of unresolved records.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Release every key held by this server's bridge session'. The qualifier 'this server's bridge session' and the closing scope sentence ('another client's or a physical operator's keys are not') distinguish it cleanly from siblings like gma3_hardkeys_status or gma3_keyboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear conditional context: 'Works while input is disabled: this is the recovery path', which tells the agent when this tool is the right choice. It also names the operator-side recovery command. It does not, however, explicitly contrast with the sibling status/release tools by name, so the routing guidance is contextual rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_hardkeys_statusInput capability and ownership statusA
Read-only: whether console input is enabled and on which backend (keyboard = real keys, fake = nothing reaches the console), the backend's limitations, this server's session, every ownership record (owner, logical key, stored PC tuple, state, lease and deadline, dispatch outcomes, aggregate MASTATE readback, unresolved cleanup failures), open interactions, the running or last sequence, capacity, and the busy descriptor the bridge applies to commands. Ownership records are responsibility for recovery, not physical key state (injected and physical input share one key state). Works while input is disabled; releases nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does so well: it declares read-only semantics, that it functions while input is disabled, that it releases nothing, and it explains the backend distinction (keyboard = real keys, fake = nothing reaches the console). It also clarifies that ownership records are recovery responsibility, not physical key state. It does not cover auth or failure behavior, but the disclosure is unusually rich for a status tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with 'Read-only', which is good, but the payload is delivered as one very long run-on sentence enumerating roughly a dozen field groups, followed by a dense semantics sentence. Every item is arguably informative for a status tool with no output schema, but the structure is heavy and would benefit from breaking the enumeration into a shorter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return payload, and it does so comprehensively: ownership record fields (owner, logical key, PC tuple, state, lease/deadline, dispatch outcomes, MASTATE readback, cleanup failures), interactions, sequence, capacity, and busy descriptor. For a read-only tool with zero parameters this is close to complete; only return format/ordering details are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter syntax for the description to add or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific read operation ('Read-only') and enumerates exactly what the status covers: input enablement, backend, ownership records, interactions, sequence, capacity, busy descriptor. An agent can tell it is a diagnostic read rather than a mutation. It does not explicitly distinguish itself from siblings like gma3_status or gma3_feedback, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'Works while input is disabled; releases nothing' signals this is a safe diagnostic read and implicitly contrasts with gma3_hardkeys_release_all. However, it never says when to call this versus gma3_status, gma3_input_interaction, or gma3_feedback, so the routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_helpgrandMA3 manual lookupA
Look up a topic in the grandMA3 user manual shipped with onPC. Pass a command keyword (e.g. 'Go', 'Store', 'Assign', 'SendOSC', 'Lua', 'At', 'Fade') or a topic phrase (e.g. 'osc', 'cue timing', 'phaser'). Uses the versioned indexed corpus when GMA3_DOCS_URL is configured, otherwise the installed manual. Returns source-linked text or matching canonical identities; source examples are never executed.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| max_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a fair job: it discloses the two data sources (versioned indexed corpus when GMA3_DOCS_URL is set, otherwise the installed manual), the general return shape, and the important safety fact that source examples are never executed. It stops short of covering no-match behavior or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing work: purpose first, then accepted input forms, then runtime/return behavior. Dense but readable, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with no output schema and no annotations, the description covers purpose, input forms, data source selection, return nature, and a safety guarantee. The main gap is 'max_chars' and what happens when no topic matches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the required 'topic' parameter well by giving both keyword and topic-phrase examples, but it says nothing about 'max_chars' (presumably a truncation limit), leaving one of two parameters entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource combination ('Look up a topic in the grandMA3 user manual') and scopes it to the manual shipped with onPC. It is clearly distinguishable from the operational siblings, though it does not explicitly distinguish itself from adjacent knowledge tools like gma3_lua_api or gma3_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the examples of what to pass ('Go', 'Store', 'osc', 'cue timing') suggest consulting the manual for command syntax or terminology. There is no explicit when-to-use or when-not-to-use statement, and no routing away from gma3_lua_api or gma3_command, which an agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_input_interactionAcquire, renew or end an input interactionA
Explicit ownership for console key input across several calls (KB-05). acquire returns a leased interaction id bound to this server's bridge connection; pass it to gma3_hardkey/gma3_keyboard press and release, gma3_type and gma3_input_sequence. While it is open the bridge refuses commands, property changes, playback, faders and Lua from EVERY client with [busy] (reads stay available), so end it as soon as the interaction is done. renew moves the lease deadline (default 15 s, max 120 s; nothing is pressed). end releases every key the interaction holds (newest first), aborts its sequence and reports what stayed unresolved. An interaction is never resumed: after a lease expiry, a bridge reconnect or end, acquire a new one. Needs input enabled on the console (Plugin "gma3_mcp_bridge" "input=keyboard"); end works while input is disabled. Nothing here presses a key.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Free label shown in status (acquire). | |
| action | Yes | ||
| lease_ms | No | Lease in ms for acquire/renew (default 15000, max 120000). Expiry releases the interaction's keys. | |
| interaction | No | The interaction id (renew, end). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Lease defaults/max are also in the schema, but the description adds the behavioral payload: bridge refuses all writes with [busy], reads stay available, renew moves the deadline without pressing, end releases keys newest-first/aborts the sequence/reports unresolved, and interactions are never resumed. Effectively complete disclosure-bearing text for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded with the acquire-lifecycle model, then the deadline and end semantics. Nearly every clause carries information, though the single long paragraph is heavier than ideal for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations or output schema, the description is still sufficient: lease, busy-blocking, prerequisites, and failure modes are all covered. Nothing an agent needs to acquire/renew/end correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema documents most parameters. The description adds the consequence of lease_ms expiry (keys released) and ties interaction to renew/end across calls, going beyond the schema's terse field notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (acquire/renew/end) and resource (a leased input interaction) and explicitly names the sibling tools that consume the returned id (gma3_hardkey/gma3_keyboard, gma3_type, gma3_input_sequence). An agent can distinguish it from those siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the exact coordination model: acquire when you need console key input across several calls, end as soon as the interaction is done, renew when you need more time. It also states prerequisites (input must be enabled) and the edge case (end works while input is disabled), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_input_sequenceRun a bounded input sequenceA
Run an ordered, bounded sequence of console input under one interaction owner: taps, presses, releases, combinations, text and waits (at most 16 steps, about 30 s of holds/waits/typing). The bridge validates EVERY step (routes, keys, text policy, context) before the first event; one invalid step means nothing is dispatched. Steps are then serviced one after another by the plugin loop (a tap waits for its release, text goes out in chunks with its context rechecked), and a failure stops the sequence: later steps are reported as skipped, keys the sequence still holds are released newest first, nothing is replayed. Each step ends succeeded, failed (nothing of it dispatched), unknown (a dispatch raised or a release stayed unresolved: the console may have received it) or skipped. A tap is complete only after its release was attempted; completed never means a UI effect was verified (see verification/readback). Pass interaction to run inside an acquired interaction, otherwise one is begun and ended for the sequence. Commands from every client are [busy] while it runs. Input is OFF until the operator runs Plugin "gma3_mcp_bridge" "input=keyboard". Real console keys are pressed.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| steps | Yes | ||
| lease_ms | No | Lease of the interaction begun for this sequence (default: twice its estimated duration + 2 s). | |
| interaction | No | Id from gma3_input_interaction acquire. Required for a standalone hold (press). A bounded tap, chord tap, text or sequence may run without one (it owns an interaction for its duration) but must pass the id while this server has one open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses pre-dispatch validation of EVERY step (one invalid step means nothing dispatched), sequential servicing with context rechecks, failure propagation (later steps skipped, held keys released newest-first, nothing replayed), the succeeded/failed/unknown/skipped status taxonomy, the caveat that 'completed' does not mean a UI effect was verified, the [busy] lock on all clients during the run, and the requirement that input be enabled via the bridge plugin. That is unusually thorough behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb+scope, which is good, but the paragraph is long and dense, packing validation, lifecycle, statuses, locking, and setup requirements into one run-on block. Key facts (16-step cap, ~30 s budget) compete with edge-case semantics; a bulleted split of lifecycle vs. step kinds vs. preconditions would have earned a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must explain returns; it does so via the status taxonomy (succeeded/failed/unknown/skipped) and failure semantics, which is sufficient. Remaining gaps are minor: no explicit guidance on label or lease_ms semantics, and the interaction parameter's role is described but not contrasted against gma3_input_interaction's own lifecycle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, and the description mostly mirrors what the schema already documents (step cap, time budget, interaction ownership) without adding syntax or defaults for the under-documented parameters like lease_ms, label, or the per-step modifier flags. It does add the operational nuance that a sequence owns an interaction if none is passed, but the 50% coverage gap is not fully compensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Run an ordered, bounded sequence of console input' with the exact step types (taps, presses, releases, combinations, text, waits) and limits (16 steps, ~30 s). It distinguishes itself from most siblings by describing the sequence-level orchestration, though it never names or routes to the most obvious alternatives like gma3_hardkey, gma3_type, or gma3_keyboard. A single 'use this instead of individual input calls when...' sentence would have earned a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: the description explains what the sequence does and mentions the interaction parameter, but never says when to prefer this tool over calling gma3_hardkey/gma3_keyboard/gma3_type individually, nor when not to use it. For a tool with three obvious input-sibling alternatives, that is a clear gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_keyboardPress a PC key with explicit modifiersA
Press, release or tap a raw PC key (case-sensitive Enums.KeyboardCodes name: Enter, Escape, F1, 5, A, LeftShift ...) with shift/ctrl/alt/numlock passed explicitly on the press AND the release, through the console's Keyboard() emulation. What the key does depends on the operator's user profile, keyboard shortcut enablement and the focused UI element (a mapped key may edit a focused field instead of acting as a hardkey); nothing is substituted or resolved for you, prefer gma3_hardkey for MA keys. tap returns after the release was attempted; press REQUIRES an interaction id; release uses the stored press tuple. Same gate, ownership, busy and verification rules as gma3_hardkey: real keys, input OFF until the operator runs Plugin "gma3_mcp_bridge" "input=keyboard", not display-scoped, commands from every client are [busy] while a key is held, UI effect unverified, nothing retried or replayed.
| Name | Required | Description | Default |
|---|---|---|---|
| alt | No | PC modifier passed explicitly on the press and the release (one event with the flag; no modifier key is pressed separately). Only with pc_key. | |
| ctrl | No | PC modifier passed explicitly on the press and the release (one event with the flag; no modifier key is pressed separately). Only with pc_key. | |
| shift | No | PC modifier passed explicitly on the press and the release (one event with the flag; no modifier key is pressed separately). Only with pc_key. | |
| action | Yes | ||
| pc_key | Yes | Case-sensitive Enums.KeyboardCodes name as the console spells it (Enter, Escape, LeftShift, F1, 5, A). Validated on the console before dispatch. | |
| display | No | Display index passed to the console as API context only. It must exist; input is NOT display-scoped on onPC 2.5.1 (no routing, focus or pop-up placement is promised). | |
| hold_ms | No | tap only (default 50). | |
| numlock | No | Numlock flag passed explicitly on both events. Only with pc_key. | |
| exclusive | No | The intended long-press (see gma3_hardkey). | |
| interaction | No | Id from gma3_input_interaction acquire. Required for a standalone hold (press). A bounded tap, chord tap, text or sequence may run without one (it owns an interaction for its duration) but must pass the id while this server has one open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds: it discloses that keys are real, input is OFF until the operator loads the plugin, commands are [busy] while a key is held, the UI effect is unverified, and nothing is retried or replayed. It also specifies lifecycle semantics (tap returns after release attempted, press requires an interaction id, release uses the stored press tuple).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb+resource, and nearly every sentence conveys operationally useful constraints rather than filler. It is a dense run-on paragraph with a few formatting artifacts (double spaces inside the quoted plugin invocation), which costs a point but not the underlying value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, non-idempotent input tool with no output schema and no annotations, the description covers gating, ownership, busy state, verification expectations and action semantics. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 90%, so the baseline is 3, but the description adds real procedural meaning the schema does not: the action-dependent requirements (press needs an interaction id; release reuses the stored press tuple), and that modifiers are passed on both the press and the release rather than as separate key presses. Only the hold_ms/display/exclusive details remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (press, release, tap) on a specific resource (raw PC key via Enums.KeyboardCodes) and explains the mechanism (console Keyboard() emulation). It explicitly distinguishes itself from gma3_hardkey, so an agent can route between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to prefer gma3_hardkey for MA keys, warns that behavior depends on user profile, shortcut enablement and focused UI element, and enumerates prerequisites (input OFF until the operator runs the plugin, ownership/busy rules). When-to-use and when-to-use-something-else are both given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_label_executorLabel an executor (renames its assigned object)A
Label the object assigned to the executor at Page .: sends 'Label Page . ""'. On grandMA3 2.5.1 an executor has no label of its own and always shows its assigned object's name, so this RENAMES THE ASSIGNED SEQUENCE (or other object) everywhere it appears: in its pool and on every other executor it is assigned to. Fails before sending anything when the page does not exist or the executor is empty (nothing to label). Does not change the selection or the programmer and never sends a playback keyword. verify (default true) reads back the executor's displayed name and assigned object and the assigned object's own Name; nothing else is verified. Mutations from this server are serialised, but not isolated from other operators or clients.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Executor page number (1-9999); the page must exist. | |
| label | Yes | The new name for the assigned object. Names must not contain \ " $ & * ? , . ; ^ { } | ~ (the console strips them); leading/trailing spaces are trimmed. | |
| verify | No | Read the executor and its assigned object back and compare (default true). | |
| executor | Yes | Executor number on that page: 101-190 (keys), 201-290 (faders), 301-390 and 401-490 (knobs), plus the Xkeys 191-198 and 291-298. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it discloses the exact command sent, the blast radius of the mutation (renames the object in its pool and on every other executor it is assigned to), preconditions checked before sending, that selection and programmer are untouched and no playback keyword is emitted, exactly what verify reads back, and that mutations are serialised but not isolated from other clients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its real meaning, and every sentence carries information (side effects, preconditions, verify scope, concurrency). The middle sentences are dense run-ons with nested parentheses, so it is efficient rather than elegant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutation tool with five parameters and no output schema, the description covers side effects, failure modes, verification, and concurrency well. The notable remaining gap is that it never describes what is returned on success or failure, which is the one thing an unannotated, schema-less-return tool would still benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter; the description still adds value by giving the addressing notation ('Page <p>.<e>'), the literal command with the label interpolated, and the semantics of verify's readback versus what is not verified. The data_pool parameter is not mentioned in the description at all, which keeps it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource, and target address ('Label the object assigned to the executor at Page <p>.<e>') and immediately clarifies the non-obvious semantics: on grandMA3 2.5.1 this RENAMES THE ASSIGNED SEQUENCE, not the executor. That distinguishes it from siblings like gma3_configure_executor or gma3_assign_tag without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied strongly by the side-effect explanation and by the explicit failure conditions ('fails before sending anything when the page does not exist or the executor is empty'), which tells the agent when the call will no-op. However, it never names an alternative tool (e.g. gma3_assign_tag, gma3_configure_executor, gma3_set_property) or says when a different route should be used instead, which matters given a very crowded sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_layout_cellsLay out a fixture's cells (string lights, pixel strands)A
Positions the cells of a multi-cell fixture along a path. A cell has no position of its own: its place is in the fixture type, shared by every fixture whose DMX mode uses that layout. scope "shared" (default) writes the type's layout: every fixture using it moves, and affects must list exactly those FIDs (preview: true lists them). scope "own" first copies the type for own.fixtures (default: the fixture) under own.name, moves them to the copy in a patch session (FIDs, addresses, cells, groups and preset values are kept), then lays out the copy; the other fixtures keep theirs. path: shape line (direction), square_wave (legs of leg_length along leg_direction, stepping leg_step along advance between them), zigzag (diagonal legs, advancing leg_step per leg) or points; cells are placed every spacing along the path from origin; axes the path does not use keep each cell's value unless origin sets them. count places only the first cells; rest keep|last. Lengths in unit (m, cm, mm, ft, in), relative to the cells' parent geometry (the fixture's own position, rotation and mirroring then apply: place the fixture with gma3_place_fixtures). Refused while the patch copy is open. No undo: previous holds the positions before the call. Read back per cell. Needs bridge 0.29.0.
| Name | Required | Description | Default |
|---|---|---|---|
| own | No | own: the new type's name and the fixtures that get it. | |
| path | Yes | ||
| rest | No | The cells after count: keep their positions (default) or stack at the last placed one. | |
| unit | No | ||
| count | No | Place only the first count cells (in the chosen order). | |
| order | No | The order the cells take along the path: "index" (cell numbers, default) or "dmx" (DMX address order: the physical order along a string, e.g. the Festoon 2-string mode 1-9, 19-29, 10-18, 30-40; see cellOrder in gma3_patch_type_structure). | |
| scope | No | ||
| verify | No | ||
| affects | No | shared: every FID that uses this layout (all of them move). | |
| fixture | Yes | FID of a fixture with cells; its type and mode define the layout. | |
| preview | No | ||
| exclusive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description itself discloses the shared-scope mutation blast radius and the own-scope patch-session copy, including what data is preserved. It also states the lack of undo, the previous-position record, refusal conditions, coordinate behavior, and compatibility requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core operation and shared-scope consequences are front-loaded, and nearly every clause carries useful operational information. The single semicolon-heavy paragraph is nevertheless difficult to scan, with important refusal and no-undo details buried near the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex nested mutation tool without annotations or an output schema, it unusually covers geometry, fixture-wide effects, copying behavior, recovery information, prerequisites, and compatibility. The undocumented verify/exclusive flags and vague "Read back per cell" instruction leave small but real invocation and follow-up gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the 50% schema coverage: path-shape geometry, spacing and origin behavior, scope and own defaults, count/rest interaction, units, and the parent-geometry coordinate frame. However, verify and exclusive remain unexplained, and the behavior of a points path is less explicit than the other shapes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence precisely identifies the operation and resource: positioning cells of a multi-cell fixture along a path. It also distinguishes this type-level cell-geometry operation from whole-fixture placement by referring to gma3_place_fixtures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete selection rules for scope "shared" versus "own", including defaults, the affects requirement, and preview-based FID discovery. The patch-copy refusal, fixture-placement cross-reference, and bridge-version requirement provide further invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_layoutsRead layouts and their elementsA
Read the Layout pool or one layout in an explicit data pool using children/objects/object. Returns bounded element pages, current element numbers, GUID identities, assigned object handles and geometry, action, appearance, custom text and visibility fields. schema optionally returns the layout's live property schema. Read-only; no selection, programmer, playback or Viewer window changes. An incomplete page is explicitly flagged; read all pages before planning a broad edit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| layout | No | ||
| offset | No | ||
| schema | No | ||
| data_pool | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so well: it declares read-only semantics, enumerates the side-effect-free surface (no programmer/playback/Viewer changes), and discloses the pagination truncation flag. It does not cover concurrency, performance, or failure modes, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope statement is front-loaded, then return contents, then safety, then the pagination caveat — a logical order with no filler sentences. It is dense and slightly list-heavy, but every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter read tool with no output schema and no annotations, the description covers purpose, return shape, safety profile, and pagination behavior, which is most of what an agent needs. The remaining gap is that limit/offset semantics and the distinction from adjacent layout/cell tools are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, so the description must compensate. It does explain data_pool (explicit pool), layout (one layout vs the whole pool), and schema (returns the live property schema), but limit and offset are only implied by 'bounded element pages' and the incomplete-page note — neither is named, defaulted, or bounded in prose. That is meaningful partial compensation, not full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read the Layout pool or a single layout within an explicit data pool, and it enumerates what comes back (element numbers, GUIDs, object handles, geometry, appearance, custom text, visibility). An agent can distinguish this read path from mutation siblings like gma3_store_layout or gma3_edit_layout_elements. It stops short of naming those siblings explicitly, which keeps it at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operating context: read-only, and no selection, programmer, playback, or Viewer window changes, which tells the agent it is safe to call during inspection. It also adds a real procedural rule — an incomplete page is flagged, so read all pages before planning a broad edit. There is no explicit when-to-use-this-instead-of-that routing against gma3_layout_cells or gma3_list_children.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_list_childrenList child objectsA
List the children of an object (e.g. cues of a sequence, items of a pool, executors of a page) with name, class, address and index, plus optional property values per child. Paginated: truncated: true (with a note) when more children follow. For the used and free numbers of a pool use gma3_pool_usage.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference. Either command-line object syntax ("Sequence 1", "Sequence 1 Cue 3", "Fixture 101", "Group 5", "Macro 2", "Page 1.201"), a dotted show-data path from a root ("DataPool.Sequences", "Root.ShowData", "Patch.Fixtures"), a numeric address like "14.14.1.6.1", or one of: Root, ShowData, DataPool, SelectedSequence, CurrentCue, Patch, Programmer, Selection, CurrentExecPage. | |
| limit | No | Max items (default 200) | |
| fields | No | Property names to read for each child, e.g. ['No','Name','TrigType','TrigTime'] | |
| offset | No | ||
| compact | No | With fields: drop addr and addrNative per child and return minified JSON (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does disclose meaningful behavior: pagination semantics ("truncated: true (with a note) when more children follow") and the per-child payload contents. It never states outright that the operation is read-only or side-effect free, and says nothing about ordering or failure behavior for an invalid ref, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and resource, then return shape, then pagination, then the sibling hand-off. No filler or repetition of schema detail beyond what is needed to frame the call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter read tool with no annotations and no output schema, the description covers the essentials: what a child record contains, that fields are optional per child, and how truncation is signalled. It lacks only ordering guarantees, error behavior for bad refs, and differentiation from the specialized listers, so it is close to complete but not airtight.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents ref, limit, fields, offset and compact in detail. The description only adds that property values per child are optional (echoing fields) and does not clarify offset/limit interaction or when compact is worth setting. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the children of an object") and grounds it with concrete examples: cues of a sequence, items of a pool, executors of a page. It also names the return shape (name, class, address, index). It falls short of 5 because those examples overlap with existing siblings (gma3_cues, gma3_executors, gma3_objects) and the description never says how this tool differs from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes one case explicitly to an alternative ("For the used and free numbers of a pool use gma3_pool_usage"), which is genuinely useful. However there is no guidance on when to prefer this generic lister over the specialized siblings like gma3_cues or gma3_executors, and no exclusions or prerequisites, so usage is largely implied by the examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_luaRun Lua inside grandMA3A
FALLBACK: use a structured tool when one fits; they check, read back and need no Lua. Patch: gma3_patch_library, gma3_patch_import, gma3_patch_add, gma3_patch_set, gma3_patch_move, gma3_patch_stages, gma3_patch_retype, gma3_patch_type_structure, gma3_place_fixtures, gma3_layout_cells. Dialogs: gma3_dialog (never Mouse()). Groups: gma3_store_group, gma3_configure_matricks. Presets: gma3_apply_preset, gma3_store_preset. Phasers: gma3_build_phaser. Looks: gma3_set_attributes. Cues: gma3_store_cues, gma3_edit_cues, gma3_build_chase, gma3_cue_contents. Recipe cues: gma3_store_recipe_cues, then gma3_cook_recipes. Playback: gma3_configure_sequence, gma3_configure_executor, gma3_playback, gma3_goto_cue. Reads: gma3_objects, gma3_get_object, gma3_list_children, gma3_programmer; used and free pool numbers and executors: gma3_pool_usage. Many objects at once: gma3_store_group (groups), gma3_store_preset (presets, each from explicit content), gma3_store_macro (macros), gma3_edit_macro_line (edits), gma3_assign_to_executor (assignments), gma3_configure_sequence (sequences, with ranges), gma3_set_variable (variables), gma3_store_cues (sequences), gma3_store_tag (tags), gma3_delete_tag (tags), gma3_assign_tag (assignments), gma3_configure_tag (tags) take lists with per-item checks and read-back; never loop over them in Lua. Watching over time: gma3_observe_tempo (how fast running sequences (chases) advance), gma3_observe_values (programmer or DMX output values of fixtures as they change), gma3_build_chase (one cycle of the chase it built), gma3_run_macro (a macro's running line), gma3_timecode_transport (a timecode show's cursor and the sequences it fires). They sample server-side; never write a Lua waiting or polling loop (gma3_lua has a 5 s budget). Evaluate Lua 5.4 code inside the grandMA3 Lua engine and return the result(s) as JSON. The code is first compiled as an expression ('return '), then as a statement block. All grandMA3 Lua API functions are available (Cmd, ObjectList, DataPool, Root, ShowData, Patch, Programmer, SelectedSequence, GetCurrentCue, GetExecutor, GetVar/SetVar, Printf, Echo, Enums, ...). Object handles are returned as {name, class, addr, addrNative, index, childCount}; use handle:Get('Prop') to read properties, :Children(), :Count(), :Ptr(i). Examples: 'SelectedSequence().name', 'GetCurrentCue():Get("No")', 'DataPool().Sequences:Count()', 'local t={} for i,c in ipairs(ObjectList("Fixture Thru")) do t[#t+1]=c.name end return t'. Use gma3_lua_api to look up function signatures. This capability is OFF by default on the console: the operator enables it by starting the bridge with Plugin "gma3_mcp_bridge" "lua" or running Plugin "gma3_mcp_bridge" "lua on" (gma3_status shows the policy). Each request runs under the console's execution budget (default 5 s wall-clock / 20 M VM instructions, operator-configurable) and is aborted with an error when it exceeds it, so keep scripts short and prefer the structured tools (gma3_get_object, gma3_list_children, gma3_objects) for bulk reads. By default the console's own hook on the plugin thread is preserved, which means the instruction budget is NOT enforced and the deadline is only checked when the script yields or returns: a script that loops without yielding cannot be stopped (gma3_status shows lua.bounded; the result's budget.instructionHookEnforced says what applied). The operator can start the bridge with luahook=replace to enforce hard quotas. Because a script may call Cmd() or Set(), every gma3_lua request is serialised with this server's other mutations (it waits for a running workflow and blocks later ones while it runs).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Lua code to evaluate | |
| timeout_ms | No | Request timeout (default 15000). Also passed to the console as the wall-clock execution budget, capped by the console's own limit, so the code stops when the client stops waiting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load and does so well: capability is OFF by default and enabled by a specific plugin command, 5 s / 20 M instruction budget, default hook does not enforce instruction quotas so a non-yielding loop cannot be stopped, and every request is serialised with other mutations. It stops short of describing the return envelope shape beyond "result(s) as JSON" and the budget field, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loading is correct: FALLBACK and the routing list come first, then the actual semantics. But the routing block is a dense run-on enumeration of roughly fifty sibling tool names that is hard to scan and partly duplicates information available from sibling definitions, making the whole block disproportionately long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with real operational complexity (default-off capability, instruction budget quirks, serialisation semantics) the description covers enablement, budget behavior, object handle shape, API discovery via gma3_lua_api, and four worked code examples. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema, including the timeout_ms/console-budget relationship, so the baseline is 3. The description mentions the budget and the compile-as-expression-then-statement behavior but adds no per-parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The core sentence states a specific verb and resource: "Evaluate Lua 5.4 code inside the grandMA3 Lua engine and return the result(s) as JSON." The opening "FALLBACK: use a structured tool when one fits" plus the routing list makes it unambiguous which sibling to prefer over this one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not-to-use guidance leads (use structured tools for patch, dialogs, groups, presets, cues, pool usage, bulk operations, observation) with the exact tool name for each task domain. It even states the failure mode to avoid ("never loop over them in Lua", "never write a Lua waiting or polling loop").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_lua_apiSearch the grandMA3 Lua APIA
Search the live grandMA3 Lua API descriptor (function name, arguments, return values) for both object-free functions (Cmd, ObjectList, …) and object methods (Get, Children, SetFader, …). Leave query empty to list everything.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| query | No | Case-insensitive substring to match against names, arguments and returns |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Search the live ... descriptor' implies a read-only lookup and it discloses the return shape (name, arguments, returns), but it never explicitly confirms there are no side effects or that results reflect the running system.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler; the resource and scope are front-loaded, and the enumeration hint follows naturally. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description still conveys what is searched and what comes back (names, arguments, returns), which is enough for an agent to call it correctly. It stops short of naming the sibling it complements or confirming read-only behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% — the query parameter is documented in-schema, but the kind enum is not. The description compensates by explaining the two categories ('object-free functions' vs 'object methods') and the empty-query listing behavior, covering the meaning of both parameters even if it never spells out the 'all' enum value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') and resource ('grandMA3 Lua API descriptor') and even specifies the fields searched (function name, arguments, return values) plus the two function categories. It does not explicitly distinguish itself from the sibling gma3_lua (which presumably executes Lua), so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete operational hint ('Leave query empty to list everything'), which tells the agent how to enumerate rather than search. It never states when to reach for this tool versus gma3_lua or gma3_help, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_macrosRead the macro pool or one macroA
Read-only. Without macro: the macro pool (number, name, line count; offset/limit, default 100). With macro: its name, note, lock, CLI, the line it is running now (null when idle) and every line exactly as stored (command, wait as seconds / "follow" / "go", enabled, add_to_cmdline, execute, name, note; a name of null is the default). check_references: true also lists the objects each line refers to (Sequence, Cue, Macro, Group, Preset, MAtricks, Page, Master, ...) and whether they exist.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| macro | No | ||
| offset | No | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| check_references | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full load, and it does disclose the read-only nature plus a detailed picture of returned data (running line is null when idle, line fields, name null meaning default). It omits error/not-found behavior and any permission or rate-limit context, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key constraint ('Read-only.') and organizes the two modes clearly in sequence. The long parenthetical enumerating line fields is dense but each item is informative; only the reference-type list ('Sequence, Cue, Macro, Group, Preset, MAtricks, Page, Master, ...') edges toward excess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 5 parameters at 20% coverage, the description does the heavy lifting by outlining both the pool listing fields and the full per-line field set. Remaining gaps are minor: default for limit, data_pool interaction (deferred to schema), and behavior when the macro does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% (only data_pool is documented in-schema), so the description must compensate and largely does: it explains the offset/limit default of 100, the meaning of the optional 'macro' selector, and the effect of check_references including the object types checked. It still leaves limit/offset units and valid macro number ranges unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('macro pool or one macro') and cleanly splits the two operating modes by whether the 'macro' parameter is supplied. It does not name the sibling tools that write or run macros (gma3_store_macro, gma3_edit_macro_line, gma3_run_macro), so differentiation is implicit via 'Read-only' rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two modes imply usage (omit 'macro' for the pool, supply it for one macro's detail), which is useful conditional guidance. However there is no explicit when-to-use/when-not statement and no pointer to alternatives such as gma3_store_macro or gma3_run_macro for the write/execute cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_matricksRead a MAtricks objectA
Read-only. The per-axis settings of MAtricks : wings, blocks, groups, width, shift, shuffle, and the fade/delay (seconds), phase (degrees) and speed (BPM) distributions as {from, to}; null means None. Also lists other settings that differ from a fresh MAtricks. Sends no command.
| Name | Required | Description | Default |
|---|---|---|---|
| matricks | Yes | MAtricks pool number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so credibly: it declares the operation is read-only, sends no command, defines the {from, to} distribution format, and explains that null means None. It also discloses that non-default settings are listed. Missing only auth/permission or scope caveats, which are minor for a read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The read-only qualifier and resource are front-loaded in the first two words, and the dense field list earns its space by telling the agent exactly what comes back. It is lengthy but not padded; a slightly lighter field enumeration would read more cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must convey return shape, which it largely does by enumerating fields, defining the distribution format, and specifying null semantics. A read-only single-param tool is well covered, though permission prerequisites are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single required parameter is already documented as 'MAtricks pool number'. The description's 'MAtricks <n>' restates this without adding format, range, or default detail, so it earns the baseline 3 with no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb ('Read') and resource ('MAtricks object'), then enumerates the exact settings returned (wings, blocks, groups, width, shift, shuffle, fade/delay, phase, speed distributions). An agent can distinguish this inspection tool from gma3_configure_matricks and the command-sending siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Read-only' and 'Sends no command' framing implies this is for inspection rather than mutation, which is useful context. However, it never names the write alternative (gma3_configure_matricks) or says when to prefer this over gma3_get_object/gma3_dump; usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_objectsResolve an object rangeA
Resolve a command-line object range to a list of objects with optional property values. Examples: "Fixture 1 Thru 20", "Fixture Thru" (all fixtures), "Group Thru", "Sequence 1 Thru 10", "Preset 4.1 Thru 20", "Page 1.201 Thru 1.215". "Preset 4.1 Thru 4.20" and "Preset 4.1 + 21.2" need bridge 0.46.0 (an older bridge returns nothing for them; a range across pools is refused).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Command-line object range | |
| limit | No | Max items (default 500); the result has truncated: true (with a note) when more objects follow | |
| fields | No | Property names to read for each object | |
| offset | No | ||
| compact | No | With fields: drop addr and addrNative per object and return minified JSON (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real behavioral context: it discloses a silent-failure mode (an older bridge returns nothing for cross-pool preset ranges) and a hard refusal case (a range across pools is rejected). It does not describe ordering, error shapes, or pagination behavior beyond what the schema states, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause, followed by examples that earn their place by defining the input grammar, then a single version-compatibility caveat. No sentence is redundant, and the most failure-prone information is stated last but clearly marked.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter read tool with no output schema, the description covers the core semantics, the range grammar, and the two known failure conditions. The main remaining gap is return-shape detail — the agent must infer field naming and ordering, though the `compact` parameter description hints at addr/addrNative per object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the baseline is 3, but the description goes beyond the schema's bare "Command-line object range" for `ref` by demonstrating the actual grammar through examples, including the pool-qualified preset forms that are easy to get wrong. It adds nothing for `offset` and only indirectly touches `compact`, which is why this is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: resolve a command-line object range into a list of objects, optionally with property values. That is clear enough for an agent to distinguish it from siblings like gma3_get_object or gma3_list_children, though it never names those siblings or states the difference explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through six concrete range examples ("Fixture 1 Thru 20", "Group Thru", "Preset 4.1 Thru 20"), which show the agent what kind of input belongs here. However, there is no explicit when-to-use versus gma3_get_object, gma3_list_children, or gma3_pool, and no stated prerequisites beyond the bridge-version note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_observe_tempoMeasure how fast running sequences advanceA
OBSERVES OVER TIME on the server side (use it instead of a Lua waiting loop). Read-only. Samples the current cue of 1-8 running sequences for seconds (1-30, default 6) every interval_ms (default 40) and reports the observed step interval next to the configured one: the rate (rate master's effective BPM / 60 x RateScale, or the sequence's own rate fader) and, for chases whose cues are all Time-triggered with one trigger time, the predicted step interval. It starts nothing: run the sequences first. The phaser tempo (speed master) is reported as configured only; phaser output is not observable over the bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| seconds | No | ||
| sequences | Yes | ||
| interval_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares read-only behavior, server-side sampling, that it starts nothing, and the observability limit that phaser output is not visible over the bridge. The main omission is that the call blocks for `seconds` before returning, which matters for a tool that can hold for 30 seconds.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operating mode and read-only status are front-loaded, and every clause carries information about scope, timing, or limits. The middle sentence is long and packs several clauses, but none are filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does describe what is reported (observed step interval beside the configured one, the rate formula, predicted step interval for Time-triggered chases). It does not describe the response shape or what happens with non-running or invalid sequence IDs, leaving a modest gap for a measurement tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, yet the description documents all three parameters: `seconds` (1-30, default 6), `interval_ms` (default 40), and `sequences` as 1-8 running sequence identifiers. Ranges and defaults are exactly what the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: samples the current cue of 1-8 running sequences over time and reports observed vs configured step interval. It explicitly differentiates itself from a Lua waiting loop and from pure configuration reads, so an agent can place it against siblings like gma3_tempo_sync_status or gma3_lua.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear alternative and the reason to prefer it ('use it instead of a Lua waiting loop') plus a hard prerequisite ('It starts nothing: run the sequences first'). It does not name the other observation sibling (gma3_observe_values) or state when not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_observe_valuesWatch fixture values changeA
OBSERVES OVER TIME on the server side (use it instead of a Lua polling loop). Read-only. Samples the programmer values (source programmer, default) or the DMX output (source output) of fixtures for seconds (1-30, default 5) every interval_ms (50-2000, default 200) and reports which channels changed: first and last value, min/max and the timed changes. Programmer: fixtures is a range ("101 Thru 112") or a list. Output: 1-8 fixtures; output on a universe that is not granted cannot be read, and the tool says so up front (outputState) and samples nothing. attributes limits the channels (Dimmer, ColorRGB_R, ...). It starts nothing: run the playback or phaser first. A running phaser in the programmer reads as its steps (not a moving value); watch its output instead.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | ||
| seconds | No | ||
| fixtures | Yes | Fixture range ("101 Thru 112"), one fixture (101) or a list of fixtures ([101, "201.3"]). | |
| attributes | No | Only these attributes (case-insensitive). | |
| interval_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description must carry the full behavioral load, and it does most of it: declares read-only, states the call is server-side over time, describes the returned data (first/last value, min/max, timed changes), and discloses the failure mode for ungranted universes (outputState, samples nothing). What it never says outright is that the call blocks for up to 30 seconds and what happens if the fixtures do not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core concept and every sentence carries information, but the parenthetical asides accumulate and the source/default information is scattered rather than grouped, making it denser than it needs to be for five parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema and five parameters, the description covers the return shape, the error condition, prerequisites and the phaser caveat. The remaining gap is the blocking nature of the call and its cost against the server, which an agent scheduling work would want to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, yet the description supplies defaults and bounds absent from the schema for seconds (1-30, default 5) and interval_ms (50-2000, default 200), explains source values (programmer default vs output), clarifies fixtures accepts a range or list, restricts output mode to 1-8 fixtures, and gives examples of attributes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('OBSERVES OVER TIME... samples the programmer values or the DMX output of fixtures... reports which channels changed'), plus the distinguishing scope: it samples repeatedly over a duration rather than returning a snapshot, which separates it from gma3_fixture_output and gma3_programmer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative it replaces ('use it instead of a Lua polling loop'), states the prerequisite ('It starts nothing: run the playback or phaser first'), and gives a non-obvious exclusion with the correct fallback ('a running phaser in the programmer reads as its steps... watch its output instead').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_oscRead the OSC input and output configurationA
Read-only. The console's OSC input and output: EnableInput / EnableOutput, Interface and PreferredIP, every OSC line (port, prefix, Receive, Receive Command, Send, Send Command, destination IP), the network interfaces, and what it means: whether commands are accepted and from where (the console listens on every interface whatever Interface and PreferredIP say), where output goes, and whether this server's own OSC sender (gma3_command via osc, gma3_start_bridge) reaches a line. Needs bridge 0.33.0.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it does substantial work: it declares the operation read-only, discloses the non-obvious fact that the console listens on every interface regardless of Interface/PreferredIP settings, and states a hard prerequisite ('Needs bridge 0.33.0'). It omits anything about auth or response size, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the key signal ('Read-only') and nothing is truly filler, but the body is a single long comma-spliced run-on that mixes field inventory, interpretive meaning, and a version requirement without structural separation. The 'what it means' clause and the sender-reachability caveat are valuable but hard to parse on first read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and no parameters, the description must explain return contents and it does so field by field, plus it explains the practical consequence of those values for command acceptance and output routing. It is complete enough to call the tool, with only minor gaps such as the exact response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4 and there is no parameter semantics to document. The description correctly adds nothing gratuitous about inputs and instead spends its space on return contents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Read-only' read of 'the console's OSC input and output') and then enumerates the exact fields returned: EnableInput/EnableOutput, Interface/PreferredIP, OSC lines with port, prefix, Receive/Send flags and destination IP, plus network interfaces. That is far more specific than the sibling configuration tools and lets an agent tell it apart from gma3_configure_osc without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states 'Read-only' and explains what the data means for OSC routing, which implies this is the inspection counterpart to gma3_configure_osc. However, it never explicitly says 'use configure_osc to change these values' or names a when-not condition, so the agent must infer the read-vs-write split from sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_addAdd fixtures to the patchA
Add count fixtures of one fixture type and DMX mode at consecutive FIDs from fid, patched consecutively from a DMX address (address, or the first free block found from findFreeFrom), or unpatched when neither is given. Pre-checks (nothing sent on failure): the FIDs are free, the whole block is free and fits inside one universe, the mode has a single DMX break. Fixtures are added at the top level of a stage (default: the first stage). Runs one patch session through the patch edit copy, never a dialog: read-only pre-checks (command line at Root, the copy closed, so nobody is in the Patch menu, no modal open, plus the tool's own checks), then enter the copy, apply the change there, an isolation check, commit, and read back. Requires exclusive: true. Patch changes need exclusive use of the console: the isolation check compares fingerprints of the copy and the live patch, left out the touched FIDs, over several seconds. It is best-effort detection of someone else's changes, not a guarantee, and on a mismatch nothing is committed and the copy is left open for the operator. A committed patch change has NO UNDO (Oops does not revert it). Takes about 10 s (mostly the isolation check). When a session cannot be finished, the copy is closed again only if it provably holds no change; otherwise the result says copyLeftOpen: true and the command line stays inside the edit patch with no Patch window open: the operator keeps the copy by typing ChangeDestination Root at the console (no way to discard it without the Patch menu is known). Needs bridge 0.19.0; a session in a stage with a Name needs bridge 0.45.0. verify reads the new FIDs back: present, patch addresses, name (when given) and mode. With count above 1 a clean success lists each new fixture as {fid, name, address} in items (detail: true for the full rows).
| Name | Required | Description | Default |
|---|---|---|---|
| fid | Yes | First fixture ID; the block uses fid .. fid+count-1, all of which must be free. | |
| mode | Yes | DMX mode number or name within that type. | |
| name | No | Optional name for the new fixtures (default: the console's naming). | |
| type | Yes | Fixture type number or name, as gma3_patch_types lists it. | |
| count | No | Number of fixtures (1-256, default 1). | |
| stage | No | Stage name (default: the first stage). A stage with a Name needs bridge 0.45.0. | |
| detail | No | Return the full result on a success too: every step's detail and each fixture's state before and after (default false: a clean success, committed and read back matched or not requested, lists one entry per fixture in items; anything else is always returned in full). | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| address | No | DMX start address "U.AAA" (e.g. "2.001"); the block must be free and inside one universe. | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. | |
| findFreeFrom | No | Instead of address: use the first free block from this "U.AAA". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden and does so thoroughly: it discloses the read-only pre-checks, the edit-copy session flow, that a committed patch change has NO UNDO, the exclusive-console requirement, the best-effort isolation check and its ~10 s cost, and the copyLeftOpen failure mode with recovery instructions. Bridge version requirements and verify/read-back behaviour are also stated explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and virtually every clause carries operational information, with no filler. The remainder is a dense run-on block with nested parentheticals that would read better as bullets, so it is efficient but not optimally structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutating tool with no annotations and no output schema, the description covers what is missing elsewhere: success/failure shapes, the `items`/`detail` return contract, commit/undo semantics, timing, session-abort behaviour and bridge version gates. An agent has everything needed to call it and interpret the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters and the baseline is 3. The description adds genuine meaning only for the address/findFreeFrom/neither relationship and the count>1 `items` return shape, which the schema does not convey; the rest of the parameter meaning is already in structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a precise verb and resource plus scope: add `count` fixtures of one type and mode at consecutive FIDs, patched at `address`, at the first free block from `findFreeFrom`, or unpatched. The 'add' semantics implicitly separate it from gma3_patch_set/patch_move/patch_retype, but no sibling is named explicitly, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly specifies the three addressing paths and the exact conditions under which each applies ('address, or the first free block found from findFreeFrom, or unpatched when neither is given'), plus the exclusive:true prerequisite. There is no explicit 'use X instead when…' exclusion against neighbouring patch tools, which keeps it at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_importImport a fixture type from the libraryA
Import one fixture type from the console's library into the show, so gma3_patch_add can patch it. file is a file name exactly as gma3_patch_library lists it. Pre-checks (nothing sent on failure): the file is in exactly one library, and the show has no type with the same manufacturer and name (the console would silently add a second one) unless allow_duplicate. Runs one patch session at the copy's fixture-type pool: Import /File "" /Path "" (no dialog; it reads the file from its folder, where Import Library looked the name up in a cached listing that could lack the user library), then waits for exactly one new type and claims it only when its name or manufacturer matches the file. The isolation check compares everything the live patch already has; the new type and the attributes it brings are appended and left out. Then commit and read back: the result has the new type's number, name, GUID and DMX modes with footprints, and attributesAdded. Imports of user-library .xml and WorldServer files are not verified on the console yet (the result warns); user-library .gdtf is (bridge 0.38.0). Requires exclusive: true (see gma3_patch_add for what the patch session means). A committed import has NO UNDO; gma3_patch_remove_type removes an unused type again, but the attributes it brought stay. Needs bridge 0.26.0.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Library file name, e.g. "oppsk@36pcs 4in1 led wall washer.pxml". | |
| source | No | Library the file is in (optional; the file must be in only one library either way). | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. | |
| allow_duplicate | No | Import even though the show has a type with the same manufacturer and name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the exact console command issued, that no dialog appears, the wait-for-one-new-type and name/manufacturer matching logic, the isolation check, the commit-and-read-back behavior, and that a committed import has NO UNDO (and that attributes survive removal). It even discloses known verification gaps for user-library .xml/WorldServer versus .gdtf.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, but the remainder is a dense wall of run-on sentences with deeply nested parentheticals (the library-path/cached-listing aside, the isolation-check aside). Every fact is relevant, but the packaging makes it hard to scan for the operational essentials.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers preconditions, execution semantics, return fields (type number, name, GUID, DMX modes with footprints, attributesAdded), failure behavior, undo limitations, and version requirements. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the schema documents all five parameters. The description still adds value by explaining why allow_duplicate exists (the console would silently add a second type) and reinforcing that exclusive must be true or nothing is sent. It does not add much beyond the schema for file/source/verify, which keeps it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Import one fixture type from the console's library into the show') and ties it to the downstream sibling gma3_patch_add. An agent can distinguish this from gma3_patch_library (listing) and gma3_patch_add (patching) without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit preconditions for use (file must exist in exactly one library, no existing manufacturer+name match unless allow_duplicate), names the alternative for listing files (gma3_patch_library) and for reversing (gma3_patch_remove_type). It also flags the exclusive:true requirement and the bridge-version dependency, so the agent knows when the call will be refused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_librarySearch the fixture-type libraryA
Read-only. Searches the fixture types the console can import: its grandMA3 library (a few fixtures plus scenery), its grandMA2 library (about 11 500 fixtures, the main one), the user library and WorldServer downloads (.xml and .gdtf). Every word of query must occur in the manufacturer, model or file name (case-insensitive), e.g. "chauvet festoon" or "mega hex". Each entry has the source, the file name to pass to gma3_patch_import, manufacturer and model, the mode names when the file is readable (grandMA3 and user .xml; grandMA2 .pxml files are encrypted, so their modes are known only after the import: gma3_patch_types then lists them), verified (false for user-library .xml and WorldServer files, whose import is not verified on the console yet; user-library .gdtf is verified) and inShow: show types already matching it by manufacturer and name (importing again would add a duplicate). Scenery (set@ files) is left out unless include_sets. Paginated (limit default 50, max 500; nextOffset is where the next page starts). compact: true lists file names only, per library, with inShow and notVerified (also per library) for the files that have them (default limit 500): use it for a broad query (a manufacturer) and ask for the full entries of the files you need. Every page is cut to about 40000 characters so it fits the client; the result says truncated when it was. gma3_patch_library_add puts a .gdtf or .xml file into the user library. Needs bridge 0.26.0.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries (default 50, or 500 with compact; max 500). | |
| query | No | Words to match, e.g. "oppsk wall washer". Omit to list everything. | |
| offset | No | Entries to skip (default 0). | |
| compact | No | File names only, grouped by library, plus inShow and notVerified (per library) where they apply (default false). | |
| sources | No | Libraries to search (default all). | |
| include_sets | No | Include scenery (set@ files: trusses, buildings, markers). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the whole burden and delivers: read-only declared up front, pagination defaults, a ~40,000-character page cap reported via truncated, the verified flag's meaning per source, and the encrypted .pxml caveat. This is unusually complete behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads 'Read-only.' correctly, but the rest is a dense run-on paragraph mixing return fields, pagination, encryption caveats and sibling guidance. Informative yet hard to scan; a few sentences are doing too much work.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, no-output-schema search tool, the description documents every returned field (source, file name, manufacturer, model, modes, verified, inShow, nextOffset, truncated) and the compact-mode shape. Nothing needed to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so most parameter meaning is already structured, but the description adds real semantics: query is AND-of-words across manufacturer/model/file name, case-insensitive; compact changes the default limit to 500; include_sets admits only set@ scenery. It goes beyond the schema's examples without contradicting it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (searches fixture types the console can import) and enumerates the four libraries covered. It is clearly distinguishable from sibling gma3_patch_types, which is explicitly relegated to listing modes after import.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real routing guidance: use compact:true for a broad query such as a manufacturer, then fetch full entries for the files needed, and it warns that importing an inShow type would duplicate. It doesn't say when to prefer this over gma3_patch_types for simple lookups, but the import-oriented framing makes the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_library_addAdd a fixture-type file to the user libraryA
Put a fixture-type file (GDTF .gdtf, or a grandMA3 fixture-type .xml) into the console's user fixture library, so gma3_patch_import can import it. The bytes go over the bridge: the client need not be on the console's machine. Give the file as content_base64 (its bytes, base64) with file_name, or as path (a file on the MCP server's host; file_name defaults to its name). file_name must be manufacturer@model[@revision].gdtf or .xml, the extension in lower case. Pre-checks (nothing written on failure): the name; at most 8 MiB; a .gdtf is a zip whose description.xml has a FixtureType (its name, manufacturer and DMX modes are reported); an .xml has a FixtureType element; the name is not in the user library yet unless replace: true, and in no other library (Import Library could not tell them apart). The file is written next to its target and moved into place only when its size and CRC-32 match. Read-back: the file's size and CRC-32 on the console, and gma3_patch_library lists it under source user. The show is not changed. Needs bridge 0.38.0.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | A file on the MCP server's host to send instead of content_base64. | |
| replace | No | Overwrite a file of the same name in the user library (default false: refuse). | |
| file_name | No | Library file name, e.g. "SHEHDS@180W_Beam@2026-10-20.gdtf". Required with content_base64; defaults to path's file name. | |
| content_base64 | No | The file's bytes, base64. Give this or path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so thoroughly: it enumerates every pre-check that runs before anything is written (name format, 8 MiB cap, zip/FixtureType validation, collision rules), states that failures write nothing, and describes the write-next-to-target-then-move atomicity with size and CRC-32 verification. It also discloses that the show is not changed and that bridge 0.38.0 is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose first, then inputs, then validation, then verification, and nearly every clause carries operational weight. It is a single dense block, though, and the parenthetical about Import Library not telling libraries apart slightly interrupts the flow where a short list of pre-checks would scan faster.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, zero-required, mutation-style tool with no annotations and no output schema, the description covers everything an agent needs: input alternatives, validation failure behavior, atomicity guarantees, how to confirm success via size/CRC-32 and gma3_patch_library, the absence of show side effects, and a bridge version floor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds real meaning beyond it: the mandatory file_name pattern manufacturer@model[@revision] with a lower-case extension, the defaulting of file_name from path, and the precise collision semantics of replace (refuse if the name exists in the user library, and refuse if it exists in any other library because Import Library cannot distinguish them). That is substantive constraint information the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource: put a fixture-type file (GDTF .gdtf or .xml) into the console's user fixture library. It explicitly frames the tool's downstream role relative to siblings by saying this is what gma3_patch_import later imports, and it names gma3_patch_library as the verification surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when to reach for this tool (before importing a fixture type) and lays out the two mutually exclusive input routes: content_base64 versus path on the MCP server host. It does not explicitly exclude alternatives such as importing a type that already lives on the console, so it stops short of full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_listList patched fixturesA
Read-only. Lists the show's fixtures from the live patch, every stage, sub-fixtures included, in patch order. Each fixture has FID, CID, ID type, name, fixture type, mode, patch address, DMX breaks, stage, depth, parent FID, subfixtures (child fixtures of a grouping fixture) and cells (the fixture's own cells, e.g. 12 on a 12-cell wall washer; bridge 0.28.0). Filter by FID range (fromFid/toFid; fixtures without a numeric FID are omitted when a range is given); paginated (limit default 200, max 2000).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows (default 200, max 2000). | |
| toFid | No | Highest FID to include. | |
| offset | No | Rows to skip (default 0). | |
| fromFid | No | Lowest FID to include. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does solid work: it declares 'Read-only', discloses pagination caps (default 200, max 2000), and states a non-obvious truncation behavior (fixtures without a numeric FID are omitted when a range is given). It also version-gates one field ('bridge 0.28.0'). It does not cover error behavior or whether stages are aggregated vs. repeated per row, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the safety property ('Read-only') then the operation, then return shape, then filtering and pagination — a sensible order for an agent scanning for fitness. The long field enumeration is dense but each item is a distinct returned column compensating for the absent output schema, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description supplies the returned field set, filtering semantics, pagination defaults and caps, and an edge-case (missing numeric FIDs). Remaining gaps are minor — how multi-stage results are ordered across stages and what the 'depth'/'DMX breaks' fields contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are documented in the schema itself and the baseline would be 3. The description earns above baseline by explaining the FID-range filter as a pair and adding the consequential caveat that non-numeric FIDs drop out of range queries — meaning the schema text alone would be incomplete for correct filtering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Lists the show's fixtures from the live patch') and adds scope detail ('every stage, sub-fixtures included, in patch order') that separates it from a plain fixture list. It stops short of explicitly naming the nearby siblings (gma3_fixtures, gma3_patch_library, gma3_patch_types), so the differentiation is implied by 'live patch' rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than prescribed: the reader can infer this is the tool for enumerating patched fixtures when a range filter or pagination is needed. There is no explicit 'use this instead of X when…' routing, and no warning that gma3_patch_library is the type catalog rather than the patched fixture list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_moveMove fixtures under a grouping fixture (or back to the top level)A
Moves fixtures into a grouping fixture's children (parent: its FID), e.g. the rig under the MA Show Start's grouping fixtures FID 1-8, or back to the stage's top level (parent: "root"). FIDs, addresses, names, groups and presets are kept. The console asks how to keep the 3D placement: position "absolute" (default) keeps each fixture's place and rotation in the world; "relative" keeps its offset from the parent (the fixture moves with the parent's position and rotation). With a parent at the origin and unrotated both are the same. Pre-checks (nothing sent on failure): every FID exists, holds no fixtures itself, all share one parent (the top level or one top-level grouping fixture) in one stage, and the target is another top-level grouping fixture of that stage (type Grouping) or the top level. Move fixtures with different parents in one call each. In the copy: Cut, ChangeDestination, Paste, and the console's "Move Fixtures" dialog answered by the bridge, each step checked before the next (a failure cancels the dialog). The isolation check compares fixtures without their list positions, because a move renumbers the fixtures after the moved ones. Runs one patch session through the patch edit copy, never a dialog: read-only pre-checks (command line at Root, the copy closed, so nobody is in the Patch menu, no modal open, plus the tool's own checks), then enter the copy, apply the change there, an isolation check, commit, and read back. Requires exclusive: true. Patch changes need exclusive use of the console: the isolation check compares fingerprints of the copy and the live patch, left out the touched FIDs, over several seconds. It is best-effort detection of someone else's changes, not a guarantee, and on a mismatch nothing is committed and the copy is left open for the operator. A committed patch change has NO UNDO (Oops does not revert it). Takes about 10 s (mostly the isolation check). When a session cannot be finished, the copy is closed again only if it provably holds no change; otherwise the result says copyLeftOpen: true and the command line stays inside the edit patch with no Patch window open: the operator keeps the copy by typing ChangeDestination Root at the console (no way to discard it without the Patch menu is known). Needs bridge 0.19.0; a session in a stage with a Name needs bridge 0.45.0. verify compares each fixture with its state before the session: parent, address, name, its groups, and its 3D pose (absolute: in the world; relative: to the parent). A clean success lists each fixture as {fid, parent: [before, after]} in items (detail: true for the poses, groups and rows). Needs bridge 0.42.0.
| Name | Required | Description | Default |
|---|---|---|---|
| fids | Yes | Fixture IDs to move (1-256), all with the same parent. | |
| detail | No | Return the full result on a success too: every step's detail and each fixture's state before and after (default false: a clean success, committed and read back matched or not requested, lists one entry per fixture in items; anything else is always returned in full). | |
| parent | Yes | FID of the target grouping fixture, or "root" for the top level of the stage. | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| position | No | How the 3D placement is kept (default "absolute": the place and rotation in the world). | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the whole burden and does so well: it discloses that a committed change has no undo, that the run takes about 10 s, that the isolation check is best-effort, and exactly what happens on a mismatch (nothing committed, copy left open). The copyLeftOpen recovery procedure is unusually thorough. It falls short of a 5 only because the three separate bridge-version requirements are scattered across the text and the failure taxonomy is spread over several paragraphs rather than consolidated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the position semantics are front-loaded, but the remainder is a dense run-on paragraph that repeats itself: the exclusive requirement is stated twice, and bridge versions 0.19.0, 0.45.0 and 0.42.0 appear in three unrelated places. The console-dialog internals (Cut, ChangeDestination, Paste) are implementation detail an agent cannot act on, and the same information could be conveyed in roughly half the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, exclusive-lock, multi-second patch mutation with no output schema, the description covers what an agent needs: preconditions, what is preserved, the verification comparison, the success shape in items, and recovery when a session cannot finish. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, and the description largely restates those semantics (parent, position, verify, detail). It does add real value on position: the absolute-versus-relative distinction is explained in terms of world placement versus parent offset, plus the edge case that both are identical with an unrotated parent at the origin. Otherwise the description adds little beyond the schema, so baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource with the exact addressing scheme: fixtures are moved into a grouping fixture's children by FID, or to the top level with parent "root". It also states what is preserved (FIDs, addresses, names, groups, presets), which separates it from attribute-level patch siblings such as gma3_patch_set or gma3_patch_retype.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage conditions are spelled out: all moved FIDs must share one parent, fixtures with different parents need separate calls, and exclusive: true is mandatory or the call is refused. It does not name a sibling tool as the alternative for adjacent operations (e.g. changing a fixture's address), so the when-not guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_removeDelete fixtures from the showA
Delete fixtures by FID from the patch, removing them from the show (with everything that refers to them, e.g. their values in cues and groups: the console handles references). Fixtures with sub-fixtures are refused. Pre-check (nothing sent on failure): every FID exists and has no sub-fixtures. Runs one patch session through the patch edit copy, never a dialog: read-only pre-checks (command line at Root, the copy closed, so nobody is in the Patch menu, no modal open, plus the tool's own checks), then enter the copy, apply the change there, an isolation check, commit, and read back. Requires exclusive: true. Patch changes need exclusive use of the console: the isolation check compares fingerprints of the copy and the live patch, left out the touched FIDs, over several seconds. It is best-effort detection of someone else's changes, not a guarantee, and on a mismatch nothing is committed and the copy is left open for the operator. A committed patch change has NO UNDO (Oops does not revert it). Takes about 10 s (mostly the isolation check). When a session cannot be finished, the copy is closed again only if it provably holds no change; otherwise the result says copyLeftOpen: true and the command line stays inside the edit patch with no Patch window open: the operator keeps the copy by typing ChangeDestination Root at the console (no way to discard it without the Patch menu is known). Needs bridge 0.19.0; a session in a stage with a Name needs bridge 0.45.0. verify reads the FIDs back and checks they are gone.
| Name | Required | Description | Default |
|---|---|---|---|
| fids | Yes | Fixture IDs to delete (1-256). | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied the description carries the full burden and does so: it discloses the no-undo semantics ('Oops does not revert it'), the cascading deletion of cue/group references, the ~10 s runtime, the session sequence (copy, isolation check, commit, read-back), and the failure state 'copyLeftOpen: true' with the operator recovery command. It also honestly frames the isolation check as best-effort detection rather than a guarantee.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads purpose well, but the remainder is a dense run-on chain of clauses, with some restatement (exclusive is explained both here and in the schema description) and parenthetical asides that slow parsing. The length is defensible for a destructive, no-undo operation, but the structure could be tightened into distinct paragraphs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, session-based mutation tool with no annotations and no output schema, the description covers the full lifecycle: prerequisites, pre-checks, what is destroyed, commit semantics, failure/partial-failure results, and bridge version requirements. An agent has what it needs to decide, call, and interpret the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: 'verify reads the FIDs back and checks they are gone' explains what verification actually does, and the isolation-check/fingerprint explanation gives operational substance to 'exclusive' beyond 'confirms nobody else uses the console'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete fixtures by FID from the patch, removing them from the show') plus a hard constraint (sub-fixture fixtures refused). That is enough to separate it from gma3_patch_remove_type and gma3_patch_set without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-not conditions (sub-fixtures refused, exclusive must be true or the call is refused and nothing is sent) and describes the pre-check gate before anything is transmitted. It does not explicitly name an alternative tool or say when to prefer another patch operation, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_remove_typeRemove an unused fixture type from the showA
Delete a fixture type no fixture uses, e.g. one imported by mistake. Pre-check (nothing sent on failure): the type exists and no fixture uses it. Runs one patch session; the type is deleted by its number, checked against its GUID. A type counts as used only by the fixtures whose type is that object (bridge 0.43.0; an older bridge also counts fixtures on another import of the same GDTF, which shares the GUID). Every type after it moves down one number (fixtures keep their type; only the number changes), and the result lists the renumbered types. The attributes the type brought into the show stay, unused: the console keeps them and they cannot be told apart from its own unused attributes. Requires exclusive: true. NO UNDO. Needs bridge 0.26.0.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Fixture type number or name, as gma3_patch_types lists it (a number when two types share a name). | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and delivers: pre-check means nothing is sent on failure, it mutates the show irreversibly ('NO UNDO'), it renumbers all subsequent types, orphaned attributes remain, and it requires a bridge version. These are exactly the consequences an agent needs before invoking a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its constraint, then moves through pre-check, mechanics, side effects, and requirements in a logical order. Several sentences are dense with parentheticals (GUID sharing, renumbering caveat) that slow parsing but each carries real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-annotations tool with no output schema, the description covers preconditions, failure behavior, return content ('the result lists the renumbered types'), irreversibility, and version requirements. An agent has everything needed to call it correctly and to decide whether to call it at all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the input schema. The description adds one genuinely new semantic detail — the type is identified by number and validated against its GUID, which explains why a stale number is safe — but otherwise restates schema content. Baseline 3 is appropriate given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a fixture type') plus the key scope constraint ('no fixture uses'). This clearly distinguishes it from gma3_patch_remove (fixtures) and gma3_patch_types (listing) without requiring the agent to open sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage scenario ('e.g. one imported by mistake') and a hard precondition (the type exists and is unused), plus a required flag (exclusive: true) that gates the call. It does not explicitly name the sibling to use when the type IS in use (e.g. gma3_patch_set or retype), so routing guidance is slightly incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_retypeMove fixtures to another fixture type with the same DMX modeA
Moves fixtures to another fixture type in the show whose DMX mode of the same name has the same channels and footprint (refused otherwise), keeping FIDs, addresses, cells, groups and preset values. Use it after importing a fixed revision of a GDTF or library type: the fixtures move from the old import to the new one, then gma3_patch_remove_type removes the old type. Also moves fixtures between a type and its layout copy (the same as gma3_assign_cell_layout). Runs one patch session (isolation-checked, committed with NO UNDO); requires exclusive: true. The read-back checks each fixture's type; a clean success lists each fixture as {fid, type: [before, after]} in items (detail: true for the rows). Needs bridge 0.29.0.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | The target fixture type, by number or name (a number when two types share a name, e.g. two imports of one GDTF). | |
| detail | No | Return the full result on a success too: every step's detail and each fixture's state before and after (default false: a clean success, committed and read back matched or not requested, lists one entry per fixture in items; anything else is always returned in full). | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| fixtures | Yes | FIDs to retype. | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it discloses preservation of FIDs, addresses, cells, groups and preset values, that the commit has NO UNDO, that it is isolation-checked, that exclusive: true is mandatory, that verification reads the patch back, and that bridge 0.29.0 is required. These are exactly the risk facts an agent needs before a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the strongest constraint are front-loaded, and every sentence carries operational content. It is dense and slightly overloaded mid-paragraph, and 'requires exclusive: true' duplicates the schema's own wording, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive, multi-step patch operation with no annotations and no output schema would normally leave gaps; this description covers eligibility, side effects, undo loss, prerequisite bridge version, and the shape of the success response (items with {fid, type: [before, after]}). Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds only light framing around detail/items and the read-back check, restating exclusive: true rather than adding new meaning. It does clarify that the target type may be a number when two types share a name, but the schema already says this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Moves fixtures to another fixture type in the show') plus the exact eligibility condition (same DMX mode name, same channels and footprint). It explicitly contrasts with siblings gma3_patch_remove_type and gma3_assign_cell_layout, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('after importing a fixed revision of a GDTF or library type'), the follow-up step, the layout-copy equivalence with gma3_assign_cell_layout, and a when-not condition (refused when the DMX mode doesn't match). Alternatives and sequencing are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_setReaddress, unpatch or rename fixturesA
Change existing fixtures: per edit, a new DMX address (address), unpatch: true, and/or a new name. Addresses are applied together, so fixtures can swap addresses or move across their own current range. Pre-checks (nothing sent on failure): every FID exists, single-break modes only, and the new ranges overlap no other patched fixture. In the copy the bridge re-checks and restores every change of the call on any problem. Runs one patch session through the patch edit copy, never a dialog: read-only pre-checks (command line at Root, the copy closed, so nobody is in the Patch menu, no modal open, plus the tool's own checks), then enter the copy, apply the change there, an isolation check, commit, and read back. Requires exclusive: true. Patch changes need exclusive use of the console: the isolation check compares fingerprints of the copy and the live patch, left out the touched FIDs, over several seconds. It is best-effort detection of someone else's changes, not a guarantee, and on a mismatch nothing is committed and the copy is left open for the operator. A committed patch change has NO UNDO (Oops does not revert it). Takes about 10 s (mostly the isolation check). When a session cannot be finished, the copy is closed again only if it provably holds no change; otherwise the result says copyLeftOpen: true and the command line stays inside the edit patch with no Patch window open: the operator keeps the copy by typing ChangeDestination Root at the console (no way to discard it without the Patch menu is known). Needs bridge 0.19.0; a session in a stage with a Name needs bridge 0.45.0. verify reads each edited fixture back (address and/or name). A clean success lists per edit {fid, address?: [before, after], name?: [before, after]} in items (detail: true for the full rows).
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | Edits (1-256); each FID at most once. | |
| detail | No | Return the full result on a success too: every step's detail and each fixture's state before and after (default false: a clean success, committed and read back matched or not requested, lists one entry per fixture in items; anything else is always returned in full). | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: atomic application of all edits, rollback in the copy on any problem, pre-check refusal with nothing sent, best-effort isolation check with its caveats, no-undo warning, ~10 s runtime, bridge version requirements, and the copyLeftOpen recovery path with the exact operator workaround.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and exclusivity requirement are front-loaded, but the body is a dense run of long parenthetical clauses where the pre-check/rollback story is told twice (once as pre-checks, once as the in-copy re-check and restore). Most sentences earn their place, but the packaging makes it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an irreversible mutation tool with no annotations and no output schema, the definition supplies return shape (items with before/after pairs, detail: true for full rows), failure modes, recovery instructions, and version gates. An agent has everything needed to call it correctly and to interpret failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuinely non-schema semantics: addresses are applied together so fixtures can swap or shift within their own range, and verify reads each edited fixture back after commit. The remaining params (detail, exclusive) are only restated from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause states a specific verb and resource ('Change existing fixtures: per edit, a new DMX address, unpatch: true, and/or a new name'), which is concrete enough to act on. However, it never distinguishes itself from the sibling gma3_patch_move or gma3_patch_retype, which plausibly overlap with readdressing/renaming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the pre-check rules (all FIDs must exist, single-break modes only, no range overlaps), which tells an agent when a call will be refused. There is no explicit 'use this instead of X' routing to gma3_patch_move/gma3_patch_add/gma3_patch_remove, and no guidance on when to prefer a different tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_stagesList, create, rename and remove patch stagesA
Stages (areas of the venue, e.g. "Main Floor", "Basement"; gma3_patch_add takes one by name). action "list" (read-only, the live patch): each stage's index (its position), number, name and nameKind ("default": an empty Name or one set to "Stage ", which read alike; "explicit": any other), fixtures (all, sub-fixtures included) and topLevel, whether it has a Spaces list and how many spaces. "create" {name} or {names: [...]}: appends stages (Acquire, then Name; the bridge deletes what it appended on any problem). "rename" {stage, name}. "remove" {stage}: only an empty stage (no fixtures, no spaces) and never the first or the only one; stages after it move up a place, and one with a default name then reads its new number (refused when that is another stage's name; an unreadable Fixtures, Spaces or children list is a refusal too). stage: the index or the name. Names: no characters the console strips (" . , and the like), trimmed, unique among the stages ignoring case (a stage may change the case of its own name). Pre-checks (nothing sent on failure) read the live stages. Runs one patch session through the patch edit copy, never a dialog: read-only pre-checks (command line at Root, the copy closed, so nobody is in the Patch menu, no modal open, plus the tool's own checks), then enter the copy, apply the change there, an isolation check, commit, and read back. Requires exclusive: true. Patch changes need exclusive use of the console: the isolation check compares fingerprints of the copy and the live patch, left out the touched FIDs, over several seconds. It is best-effort detection of someone else's changes, not a guarantee, and on a mismatch nothing is committed and the copy is left open for the operator. A committed patch change has NO UNDO (Oops does not revert it). Takes about 10 s (mostly the isolation check). When a session cannot be finished, the copy is closed again only if it provably holds no change; otherwise the result says copyLeftOpen: true and the command line stays inside the edit patch with no Patch window open: the operator keeps the copy by typing ChangeDestination Root at the console (no way to discard it without the Patch menu is known). Needs bridge 0.19.0; a session in a stage with a Name needs bridge 0.45.0. The isolation check leaves out only the stages the change touches (appended or removed ones, and the Name and number of a renamed stage and of those moving up). verify reads the stages back from the live patch: names in order, no two alike, and every stage's fixture count (an unreadable count makes it unavailable, not matched). Removing uses Delete on Stages, not verified on a console yet. Needs bridge 0.48.0; the bridge's own re-check of a removal (unreadable lists, a name clash) needs bridge 0.49.0.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | create: the new stage's name; rename: the new name. | |
| names | No | create: several new stages at once (1-32), in order. | |
| stage | No | rename / remove: the stage's index (position, from list) or its name. | |
| action | Yes | "list" (read-only), "create", "rename" or "remove". | |
| verify | No | Read the patch back after the commit and compare (default true). | |
| exclusive | No | Required, must be true: confirms nobody else uses the console while this runs (see the description). Without it the call is refused and nothing is sent. Not needed for list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the patch-edit-copy session flow, the isolation check and its best-effort limits, that committed changes have NO UNDO, that a failure can leave the copy open (copyLeftOpen: true) with the operator's recovery command, the ~10 s runtime, and bridge version requirements per feature. These are exactly the traits an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded with the resource definition and per-action contracts, but the whole thing is a single dense block of roughly 400 words with long nested clauses that are hard to parse on a first read. Some material is restated, notably the isolation check's exclusion rules and the bridge version numbers appearing in two places, which could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action mutation tool with no output schema, the description covers preconditions, locking, verification, timing, version gating, and failure/recovery states, including what the result reports when a session cannot finish. There is no obvious gap an agent would need to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: 'stage' accepts either an index or a name, names must be trimmed, unique case-insensitively, and free of console-stripped characters, and verify is defined as reading names in order plus per-stage fixture counts from the live patch. The nameKind/fixtures/topLevel return fields are also explained, which the schema cannot do.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (patch stages, defined as venue areas) and enumerates the four actions with their payloads, so an agent knows exactly what each action does. It also positions itself against siblings by noting that gma3_patch_add takes a stage by name, and it distinguishes stages from the fixtures/spaces they contain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is spelled out per action: list is read-only, create appends, rename needs {stage, name}, remove only works on an empty stage and never the first or only one. It also states exclusive:true is required and that a refusal sends nothing. It stops short of explicitly routing the agent to gma3_patch_list or gma3_patch_add as alternatives for adjacent tasks, which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_typesList fixture types and DMX modes in the showA
Read-only. Lists the fixture types imported into the show with their DMX modes: number, name, manufacturer, short name, source, and per mode the DMX footprint, the number of DMX breaks, the channels per break and the number of cells (bridge 0.28.0; null on older plugins; a mode with cells patches fixtures whose cells are selectable sub-fixtures). gma3_patch_type_structure lists a mode's channels, cells and geometry. Use the type and mode numbers or names with gma3_patch_add. Only the show's own types are listed: find a fixture in the console's library with gma3_patch_library and add it to the show with gma3_patch_import.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Optional case-insensitive substring filter on type name, short name or manufacturer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does: it declares the operation read-only, enumerates the return payload, flags version-dependent behaviour ("bridge 0.28.0; null on older plugins"), and explains what a mode with cells means for patching. That is behavioral context beyond anything the bare schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The read-only guarantee and the core listing action are front-loaded, and the routing sentences follow in a logical order. The parenthetical about cells and bridge versions is dense and slightly interrupts flow, but it conveys real information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description compensates by describing the returned fields, the null/version caveat, and the downstream tools that consume the type and mode identifiers. Nothing essential for a correct call is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single optional `search` parameter is already documented as a case-insensitive substring filter on name, short name or manufacturer. The description does not mention filtering at all, so it adds nothing over the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Lists the fixture types imported into the show with their DMX modes") and enumerates the returned fields. It explicitly separates itself from gma3_patch_type_structure (channel/cell/geometry detail) and gma3_patch_library (console library fixtures), so an agent can pick the right tool without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is spelled out end to end: use the type and mode numbers/names with gma3_patch_add, use gma3_patch_type_structure for per-mode structure, and use gma3_patch_library plus gma3_patch_import for fixtures not yet in the show. The exclusion ("Only the show's own types are listed") tells the agent when this tool will return nothing useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_patch_type_structureRead a fixture type's structure: modes, cells, channels, geometry, sizeA
Read-only. One fixture type of the show (number or name, as gma3_patch_types lists it). Per DMX mode: footprint, breaks, the root geometry and its size (the model's length, width, height), the cells (the geometry references a patched fixture's cells come from: name, position, break offset) and, with channels, every DMX channel expanded per cell: break, offset (1-based within the break), fine/ultra offsets, attribute(s), cell, virtual (no DMX address, e.g. an RGB fixture's dimmer). addressesUsed counts the footprint's addresses the channels cover; limitations say what could not be established. geometry: the tree as flat nodes (name, class, parent, depth, position, rotation, model, the template a reference points to); with a mode, only the geometry that mode uses. Without a mode, every mode is summarised (cells, footprint) and channels and geometry are left out unless asked for (a pixel fixture's full listing is large). Lengths in unit (m default; cm, mm, ft, in), angles in degrees. Needs bridge 0.28.0. cellOrder (SU-19): the cells' physical order along the string is their DMX order, which can differ from the cell numbers (the Festoon's 2-string mode: 1-9, 19-29, 10-18, 30-40); stepsInDmxOrder checks it against the type's positions. Use it with gma3_layout_cells order: "dmx" and group lists {cells_of: , order: "dmx"}. wheels (bridge 0.34.0): each wheel's slots with name, colour, media and the channel sets that select them (mode, channel, attribute, DMX range in the channel's resolution; null when the resolution is unknown); slotColors says set, unset (every slot white: ask, do not guess) or unreadable. No cell order is given from an incompletely readable address.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | DMX mode number or name (default: every mode, summarised). | |
| type | Yes | Fixture type number or name in the show. | |
| unit | No | Length unit for positions and sizes (default m). | |
| channels | No | List the DMX channels (default: true with a mode, false without). | |
| geometry | No | Include the geometry tree and models (default: true with a mode, false without). | |
| channel_limit | No | Most channel rows per mode (default 2000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it declares read-only, discloses defaults, warns that a pixel fixture's full listing is large, states version requirements (bridge 0.28.0 / 0.34.0), and surfaces failure/limitation behavior ('limitations say what could not be established', slotColors unreadable, 'No cell order is given from an incompletely readable address'). This is far beyond what structured fields supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the read-only scope, but the body is a dense run-on of nested parentheticals (cellOrder, wheels, slotColors) that is hard to parse on first read. Much of it earns its place, yet it would benefit from being broken into distinct labeled sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter read tool with no output schema, the description explains return shape thoroughly (footprint, breaks, geometry tree, cells, expanded channels, addressesUsed, limitations, wheels) and covers the mode-dependent behavior. Nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning: what mode summarisation implies, that offsets are 1-based within the break, what 'virtual' means (no DMX address, e.g. an RGB dimmer), and unit/angle conventions. Only channel_limit is left unaddressed in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read-only. One fixture type of the show') and pins the identifier source to the sibling ('number or name, as gma3_patch_types lists it'). An agent can tell this apart from gma3_patch_types (listing) and gma3_patch_list (instances) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing guidance: use with gma3_layout_cells order: "dmx" and group lists {cells_of: <fid>, order: "dmx"}, and explains the mode-vs-no-mode decision (summarised vs expanded, large output warning). It stops short of explicit when-not-to-use cases, but the alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_phaser_releaseRelease a phaser build or auditionA
The stop/release path for gma3_build_phaser: when the console is in the Preview environment (an interrupted build), clears the Preview programmer and leaves Preview. clear_normal: true (with exclusive: true) also clears the Normal programmer (ClearAll), which stops an effect called there. Reports the environment and what is left.
| Name | Required | Description | Default |
|---|---|---|---|
| exclusive | No | Required with clear_normal. | |
| clear_normal | No | Also ClearAll the Normal programmer (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the burden and does well: it discloses that Preview is cleared and exited, that clear_normal triggers a ClearAll on the Normal programmer (destroying a running effect there), and that the result reports environment plus leftovers. It omits any permission/auth or error-mode notes, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the relationship to gma3_build_phaser before the mechanics. Jargon (ClearAll, Normal programmer) is domain-appropriate and nothing is filler, though it reads a little run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param mutation tool with no annotations and no output schema, the description covers the trigger, both parameters' effects, and the return ('reports the environment and what is left'). What an agent needs to call it correctly is essentially present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter semantics the schema only hints at ('Required with clear_normal'): the exclusive+clear_normal pairing and that it performs a ClearAll that stops an effect. That dependency explanation is real added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (release/stop the phaser build) and explicitly anchors itself as 'the stop/release path for gma3_build_phaser,' so an agent can pair it with that sibling rather than guessing. It also states the exact state it acts on (Preview environment from an interrupted build).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition: use it when the console is stuck in Preview after an interrupted build, and explains the additional clear_normal + exclusive combination. It does not, however, name an alternative for clearing programmers (e.g. gma3_clear_programmer, a live sibling), so the when-not-to-use side is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_place_fixturesPlace fixtures in 3DA
Set fixtures' position, rotation and mesh mirroring in the 3D stage (X positive stage left, Y positive upstage, Z positive up). Positions in unit (m, cm, mm, ft, in); rotations in degrees, always all three angles (the console renormalizes them, so one axis cannot be changed on its own; read the current rotation with gma3_fixture_positions). placements: [{fid, position?: {x?, y?, z?}, rotation?: {x, y, z}, mirror_mesh?}] (position axes not given stay). layouts expand into placements: line {kind: 'line', fids, from, to, rotation?} spaces fixtures evenly from..to (inclusive); arc {kind: 'arc', fids, center, radius, start_deg, end_deg, rotation?, follow?} spaces them on a horizontal arc (0° = stage left of the centre, 90° = upstage; follow adds the arc angle to rotation z); mirror {kind: 'mirror', pairs: [[source_fid, target_fid]]} puts each target at its source's final pose mirrored across the stage centre line (x negated, rotation y and z negated). preview: true returns the expanded plan with every fixture's current values and sends nothing. Refused while the patch copy is open (committing it would overwrite the positions). Scale is not offered: the console ignores scale writes. mirror_mesh is the fixture's MeshMirrorX flag (its 3D model mirrored). Read back a frame later: positions within 0.1 mm, rotations by quaternion. NO UNDO (Oops does not revert positions): the result's restore list holds every fixture's previous values in the same format. A clean success (all written, read-back matched or not requested) lists each fixture as {fid, position, rotation, mirror_mesh?} in items, the pose it now has, with the writes as one step; detail: true returns every write step and each fixture's pose before and read back.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Unit for positions and radii: m (default), cm, mm, ft or in. The console stores metres; rotations are always degrees. | |
| detail | No | Return the full result on a success too: one step per property write and each fixture's pose before and read back (default false: a clean success lists one entry per fixture in items, plus restore; anything else is always returned in full). | |
| verify | No | Read back and compare (default true). | |
| layouts | No | ||
| preview | No | Return the plan without sending anything. | |
| placements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it states NO UNDO (Oops does not revert positions) and that the restore list holds every previous value, that writes are refused during patch copy, that rotations are renormalized so a single axis cannot be changed alone, that scale is silently ignored, and that read-back occurs a frame later with stated tolerances (0.1 mm, quaternion). That is exactly the destructive/reversibility and verification context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and coordinate system before descending into layout kinds and return shapes, so an agent can stop reading early if it only needs a simple placement. It is dense and long, with some overlap against schema property descriptions (unit, follow, preview), but essentially every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description takes responsibility for the return contract: items with {fid, position, rotation, mirror_mesh?} on a clean success, the restore list, and the fuller per-write-step shape under detail: true. Combined with the refusal and no-undo notes, an agent has enough to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds substantial meaning beyond the 67%-covered schema: it defines the arc angle convention (0° = stage left of centre, 90° = upstage, 180° = stage right), what 'follow' adds to rotation z, how mirror negates x and rotation y/z, that line spacing is inclusive from..to, and that position axes not given stay unchanged. It also restates the semantics of unit, preview, detail, verify and mirror_mesh in operational terms rather than mere labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Set fixtures' position, rotation and mesh mirroring in the 3D stage') and pins down the coordinate convention (X stage left, Y upstage, Z up), which tells an agent exactly what domain of state this mutates. It also names gma3_fixture_positions as the read counterpart, but never contrasts itself with the sibling gma3_set_position, which is the most likely confusion point for a write-to-stage-position tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use conditions: preview: true to expand a plan without sending, and the explicit exclusion that the call is refused while the patch copy is open. It also directs the agent to read rotation via gma3_fixture_positions first. The missing piece is guidance on when to use this versus the programmer-oriented gma3_set_position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_playbackPlayback controlA
Trigger a playback function on a sequence or executor. Equivalent to commands like 'Go+ Sequence 1', 'Off Executor 201', 'Load Sequence 1 Cue 5'. Targets: 'Sequence 3', 'Executor 201', 'Page 2.201', 'Sequence 1 Cue 4' (for load/go to a cue), 'Master 3.1', 'Macro 5', 'Group 2'. For a Sequence or Executor target the playback state is read back a frame after the command (playbackState: active, currentCue {no, name}, or lastCue after Off; needs bridge 0.32.0 for the cue). A tag target ('Tag 5' or 'Tag "Encore"') reaches every sequence the tag carries when its Forward Commands is on: the tag is resolved first (an unknown tag or a name more than one tag has sends nothing), the command addresses it by number, and each tagged sequence's state is read back (playbackState.sequences; bridge 0.36.0). resync: ReSync for 'Sequence 1', 'Sequence 1 + 11 Thru 19' (every sequence must exist; each one's state is read back) or an executor. ReSync gradually moves the start point of the phasers running in the sequences to the moment of the command (the console's manual: it synchronizes phasers gradually, it does not jump). It does not restart the sequence or change its cue.
| Name | Required | Description | Default |
|---|---|---|---|
| fade | No | Optional fade time in seconds (appends 'Fade <s>') | |
| action | Yes | ||
| target | Yes | Object the action applies to, e.g. 'Sequence 1' or 'Executor 201' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so well: it discloses that state is read back one frame after the command, what returns (playbackState, currentCue {no, name}, lastCue after Off), bridge version gates (0.32.0, 0.36.0), tag resolution rules (unknown or duplicate tag names send nothing), and that ReSync syncs phasers gradually rather than restarting the sequence. The remaining gap is failure behaviour for invalid non-tag targets, which is unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and equivalent commands are front-loaded, then progressively deeper detail, which is the right ordering. Some sentences are dense and clause-stacked — the tag-target sentence in particular nests resolution, addressing and readback into one breath — but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-style playback tool with no annotations and no output schema, the description goes beyond the minimum by documenting return fields and version prerequisites. It is nearly complete; the shortfall is undefined error semantics for malformed or non-existent targets and unexplained enum values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description supplies the biggest missing meaning: the target grammar and the semantics of go, off, load and resync. The 'action' enum's remaining values (toggle, flash, select, release, learn, rate1, speed1) and the 'fade' parameter are left entirely to the schema, so it adds strong but partial meaning beyond structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Trigger a playback function on a sequence or executor') and immediately grounds it with equivalent console syntax ('Go+ Sequence 1', 'Off Executor 201', 'Load Sequence 1 Cue 5'). That framing lets an agent distinguish it from neighbouring tools like gma3_goto_cue or gma3_run_macro without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The target-format catalogue ('Sequence 3', 'Executor 201', 'Page 2.201', 'Sequence 1 Cue 4', 'Master 3.1', 'Macro 5', 'Group 2') tells the agent exactly what shapes are accepted, and the resync paragraph scopes when that action applies. It stops short of naming when to prefer a sibling (e.g., gma3_goto_cue for cue navigation) or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_poolList a poolC
List the objects of a pool in the selected data pool: Sequences, Groups, Presets (pool name like 'Presets' lists preset pools; use 'Preset 4' style ref via gma3_list_children for one pool), Macros, Pages, Worlds, Filters, Timecodes, Timers, Layouts, Views, Appearances, MAtricks, Plugins, Cameras, Sounds, ScreenConfigurations, Agendas, Images, Videos, Scribbles, Gels, Datapools.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | Pool child name of the data pool, e.g. 'Groups', 'Macros', 'PresetPools', 'Sequences', 'Pages' | |
| limit | No | ||
| fields | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it states only that objects are listed. It never says the operation is read-only, nor does it explain pagination even though the schema exposes limit/offset, nor the shape or size of the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first clause, but the trailing enumeration of roughly two dozen pool names is a dense wall of text that is hard to scan. Every item is arguably informative, yet the run-on single sentence costs readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description supplies the pool-name vocabulary an agent needs to invoke the tool, which is real value. It nonetheless omits pagination behavior and return-value expectations for a tool whose schema clearly supports paging.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% — 'pool' is documented, while limit, fields, and offset are bare. The description's enumeration of valid pool names meaningfully reinforces the 'pool' parameter, but it adds nothing for the three undocumented pagination/projection parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('the objects of a pool') and enumerates the pool names it accepts, which lets an agent recognize it against sibling list-style tools. It does not fully disambiguate from gma3_objects or gma3_list_children beyond the one preset-pool note, so it falls short of a clean 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical gives a genuine routing rule: preset pools listed via this tool vs. a single pool via gma3_list_children ('Preset 4' style ref). However there is no general when-to-use guidance versus gma3_objects, gma3_get_object, or gma3_dump, and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_pool_usageUsed and free pool numbersA
Read-only: which numbers a show already uses, per pool, before you store into it. For each pool: stored (the number of stored objects), used (their numbers as ranges, "1-11, 5001-5534"), with names: true [no, name] pairs, and with free: {size, from?} the first free block of that size ("21-40"; null when there is none up to 9999 or the read is incomplete). Pools: DataPool pools by name ("Groups", "Sequences", "Macros", "MAtricks", "Timecodes", "Layouts", ...); a preset pool as "Preset 4" or in preset_pools (stored presets, not the pool's 1000 slots); "PresetPools" (every preset pool as [no, name, stored, used]); "Page 2" (its executors with an assigned object as [no, class, name]; covered: the numbers a wider executor (Width > 1) spans, never free; an assignment that cannot be read (an invalid handle, or a read that raised: bridge 0.47.0) is listed as unreadable and makes the page incomplete; free searches one row: 101-198, 201-298, 301-390, 401-490, from 101 by default); "Pages" (every page as [no, name, executors used, used]). Every pool is read to its end page by page; complete: false with reason (keeping what was read) when a read fails, the console cannot list the children, the pool changes during the read or an object has no number (an executor without a readable No); free blocks are offered only from complete reads and need bridge 0.47.0 (with an older bridge unconfirmed says why and free is null); the call is an error only when no pool could be read at all. Ranges such as "Page 1.101 Thru 1.115" are not accepted (executor ranges can hang onPC). Use this instead of gma3_objects "Macro Thru" or a Lua walk of the pools.
| Name | Required | Description | Default |
|---|---|---|---|
| free | No | Find the first free block of size numbers in each pool. | |
| names | No | Also list [no, name] per stored object (default false). | |
| pools | No | Pools to read: "Groups", "Sequences", "Macros", "MAtricks", "Timecodes", "Layouts" (any DataPool pool name), "Preset 4", "PresetPools", "Page 2", "Pages". | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| preset_pools | No | Preset pool numbers, e.g. [1, 4, 21] (the same as "Preset 1", ... in pools). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it discloses the complete:false/partial-read contract, that free blocks are only offered from complete reads, that older bridges (<0.47.0) return unconfirmed with free=null, that the call errors only when no pool is readable, and that unreadable executor assignments mark a page incomplete. These are exactly the failure modes an agent needs before relying on the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Nearly all content is substantive and the purpose is front-loaded, but it is delivered as a single dense block of semicolon-chained clauses with nested parentheses, which makes the partial-read and free-block rules hard to extract on first read. No sentence is truly wasted, but the structure works against quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with nested objects and no output schema, the description supplies the return shape, per-pool semantics, failure modes, version gating, and default search behavior. An agent has enough to decide whether and how to call it without consulting anything else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the shape of the response per parameter (used as compressed ranges '1-11, 5001-5534', with names as [no, name] pairs, with free as {size, from?} capped at 9999), clarifies that preset_pools is equivalent to 'Preset n' in pools, and describes Page's one-row free search (101-198, 201-298, ...). It does not explain data_pool's effect beyond the schema's default note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Read-only: which numbers a show already uses, per pool, before you store into it.' It enumerates the pools it covers (DataPool, presets, PresetPools, Page n, Pages) and explicitly distinguishes itself from gma3_objects and a Lua walk, so an agent can separate it from gma3_pool and gma3_list_children.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the operative moment ('before you store into it') and names the alternatives to avoid: gma3_objects 'Macro Thru' and a Lua pool walk. It also warns that 'Page 1.101 Thru 1.115' ranges are not accepted, which is a concrete when-not rule an agent could otherwise trip over.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_presetRead a preset's stored content and references, or a pool's storage defaultsA
Read-only. preset: "." returns what the preset actually stores: per fixture and attribute the mode the value was stored in (selective; global, held by the lowest FID of a fixture type; universal, one holder), value (percent) or steps (each with absolute/relative, width, trans, accel, decel and the preset it integrates; absent layers are the console defaults width/trans 100, accel/decel 0), the phaser layers speedBpm, phase (degrees), measure (beats) and speedMaster (absent: 60 BPM, phase 0), fade/delay, and the source preset of an embedded value; plus PresetMode, StoredData, lock, how many objects reference it, and its dependencies (embedded sources) followed recursively with validity (a deleted source is an invalid dependency) and whether that inspection was complete. pool: returns the pool's default mode and input filter and the operator's store preferences (the defaults a store would otherwise use). Needs bridge 0.22.0.
| Name | Required | Description | Default |
|---|---|---|---|
| pool | No | Preset pool number (1-9 feature groups, 21-25 All pools). | |
| preset | No | Preset as "<pool>.<number>", e.g. "4.12". | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the safety and behavior burden and does well: it declares 'Read-only', explains recursive dependency inspection, validity of deleted sources, and inspection completeness. It also states the bridge version requirement, though it does not cover error handling or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with 'Read-only.' and all details are relevant, but it is written as a single dense paragraph with nested parentheticals and long lists. It is information-rich but could be restructured for easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description explains the returned preset data and pool defaults in substantial detail, including dependency behavior. The main gap is that it does not clarify how the optional parameters interact when multiple are supplied or omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters, and the description adds mainly mode semantics for 'preset' and 'pool'. It does not mention the 'data_pool' parameter, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read-only' and then states exactly what the preset mode returns versus what the pool mode returns, giving a specific verb+resource pair. It distinguishes itself from sibling write tools like gma3_store_preset or gma3_apply_preset by framing the operation as inspection of stored content and storage defaults.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for each parameter mode: 'preset' inspects a preset's stored data and references, while 'pool' returns pool defaults and operator store preferences. It does not name alternatives or explicitly say when not to use the tool, but the mode descriptions make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_programmerInspect the programmerA
Structured view of active programmer values per UI channel (fixture, subfixture patch index, attribute, value, timing, phaser steps). Scope is explicit: all (every patched (sub)fixture, including unselected ones), selection (SelectionTable) or fixtures (an explicit range). Works with gma3_lua disabled (structured bridge op, plugin >= 0.3.0). Read-only: never changes selection, programmer or playback. ROWS ARE PROGRAMMER CONTENT, NOT OUTPUT VALUES (source "programmer"; use gma3_fixture_output/gma3_dmx for output). A row is emitted only when the console's activity masks show programmer data; value: 0 with present: true is a real zero, an absent row means no programmer value. Multi-step phasers keep every step in steps[] (value is null) with phaser-level fade/delay/speed/phase; phaser.supported is false with a reason when the API shape was unusable. coverage reports whether the scan was complete; when it is not (budget reached, API unavailable) the programmer is NOT claimed empty. Paginated. value is percent, valueRaw the 24-bit integer. Compact form: fields keeps only those row keys; by_fixture: true gives perFixture, one entry per fixture, with attribute -> value (a multi-step phaser reads "phaser (n steps)"). To watch values change over time use gma3_observe_values.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows to return (default 200, max 5000). | |
| scope | Yes | all = every patched (sub)fixture; selection = current selection; fixtures = the `fixtures` range. | |
| fields | No | Compact form: keep only these row keys (fid, subfixtureIndex and attribute are always kept). | |
| offset | No | Rows to skip (pagination). | |
| fixtures | No | Required for scope "fixtures": fixture IDs/ranges such as "1 Thru 5", "101 + 103", "Fixture 501.3". Groups are not expanded. | |
| by_fixture | No | Compact form: perFixture, one entry per (sub)fixture with attribute -> value (or -> the chosen fields), instead of rows (one per channel). Folds the rows of this page. | |
| max_channels | No | Scan budget in UI channels per request (default 5000). The scan stops when reached and coverage.complete is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and delivers: it declares read-only with specificity ('never changes selection, programmer or playback'), explains that zero with present:true is a real value versus an absent row meaning no programmer data, and describes coverage/scan-budget failure semantics so the agent does not misread an incomplete scan as an empty programmer. Phaser degradation (phaser.supported false with a reason) and pagination are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded and every sentence carries information an agent needs, including the loud 'ROWS ARE PROGRAMMER CONTENT, NOT OUTPUT VALUES' warning that prevents a real misread. It is dense and slightly long with parenthetical asides and caps emphasis, but for a complex no-annotation tool almost nothing could be cut without losing routing or caveat value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, and the description compensates fully: it describes the returned row shape, phaser steps structure, compact forms, coverage reporting, pagination, and the edge cases around absent rows and unusable API shapes. Nothing an agent needs in order to call this correctly and interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already carries the per-parameter documentation and the baseline is 3. The description nonetheless adds meaning beyond it: that `fields` acts as a compact projection, that `by_fixture` folds only the rows of this page into perFixture, and that `max_channels` drives coverage.complete to false. It also clarifies row-level value semantics (percent vs 24-bit valueRaw), which the schema does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names the specific resource (active programmer values) and enumerates the row shape (fixture, subfixture patch index, attribute, value, timing, phaser steps). It then explicitly distinguishes this from gma3_fixture_output/gma3_dmx and gma3_observe_values, so an agent can pick it out of a large sibling set without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states exactly when to use each scope (`all` = every patched (sub)fixture including unselected, `selection` = SelectionTable, `fixtures` = explicit range), names the alternative tools for output values and for time-based watching, and gives a prerequisite (works with gma3_lua disabled, plugin >= 0.3.0). When-to-use, when-not-to-use, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_recipesRead the recipe lines of a preset or cue partA
Read-only. target: {preset: "N.M"} or {sequence, cue, part?} (part 0 by default). Returns every recipe line (standard and phaser) with its selection (group and its members), values (preset), MAtricks, filter, Enabled, SelectionMode, the console's last cooking state, and problems (missing or empty group, missing preset, disabled), plus the target's coverage: per fixture which attributes are cooked (from recipes) and which are stored directly. Lines whose coverage is not predicted (phaser recipes, filters) are flagged; presets that embed others are noted. Needs bridge 0.24.0.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Preset or cue part. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does so well: it declares read-only behavior, the default part value, a bridge version prerequisite ('Needs bridge 0.24.0'), and reports problem states (missing/empty group, missing preset, disabled) plus coverage caveats. It stops short of permission or rate-limit notes, so a 4 rather than a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key fact ('Read-only') and the target spec before the long return-value enumeration. It is dense and reads as one long sentence, but nearly every clause carries distinct information, so it is appropriately sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does: recipe lines, selections, values, MAtricks, filter, Enabled, cooking state, problems, and per-fixture coverage. That covers the nested-return complexity well, though some fields (e.g. MAtricks, SelectionMode shapes) remain undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: the preset format ('N.M'), the mutually exclusive preset vs sequence/cue/part shapes, and the part default of 0. The schema only says 'Preset or cue part,' so this is real added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('recipe lines of a preset or cue part'), and the target forms are spelled out explicitly. An agent can tell this is a read of recipe data rather than a cook (gma3_cook_recipes) or edit (gma3_edit_recipe) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the target forms and the default (part 0) but never states when to prefer this tool over siblings like gma3_cue_contents, gma3_edit_recipe, or gma3_cook_recipes. Usage is implied by the target specification rather than declared, and no exclusions are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_release_attributesRelease attributes from the programmerA
Remove values from the programmer for an explicit target: attributes sends Off Attribute "A" + "B"; all: true sends Off Attribute Thru (every value of the target, the cells of a compound fixture included; the target stays selected). Target: fixtures OR use_selection: true (with fixtures, ClearSelection and a select first). The release is scoped to the selection, and with nothing selected the console would release the attributes from EVERY fixture, so the tool refuses unless the target is selected. Read-back compares the whole programmer before and after: the released values must be gone from the target fixtures and their cells, and every other fixture's values must be unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Release every value of the target instead of named attributes. | |
| verify | No | Compare the programmer before and after (default true). | |
| fixtures | No | Explicit target: fixture IDs/ranges ("1 Thru 5", "1 + 3 + 5 Thru 8", "Fixture 101.1") or a group ("Group 5"). Exactly one of fixtures / use_selection is required. | |
| attributes | No | Attribute names to release (up to 32). | |
| use_selection | No | Apply to the fixtures currently selected on the console (explicit opt-in). Fails before sending when nothing is selected. | |
| add_to_selection | No | With `fixtures`: keep the fixtures already selected and add the target to them, so previously selected fixtures ALSO receive the values (explicit opt-in). Default false: ClearSelection is sent first so exactly the named fixtures are targeted. ClearSelection only deselects; programmer values are never cleared. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does it well: it names the exact console commands emitted, discloses the safety refusal when nothing is selected, explains that the target stays selected, and describes the before/after read-back contract. It also flags the destructive scope ('would release the attributes from EVERY fixture') that an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the command mapping, then targets, then the safety rule, then verification. It is one dense paragraph with heavy parenthetical nesting, which is efficient but slightly hard to scan; nearly every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers command emission, target selection semantics, the side effect on the selection, the refusal condition, and the verification contract for a six-parameter mutation tool with no annotations and no output schema. There is no output schema to explain and nothing material is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description still adds meaning by pairing each parameter with the command it emits and by clarifying that `fixtures` triggers ClearSelection and a select while `add_to_selection` inverts that. It adds little on `verify` and `attributes` beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove values from the programmer') plus the scoping constraint ('for an explicit target'), which separates it from a whole-programmer clear. It never names a sibling tool explicitly, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use conditions for the two modes (`attributes` for named values vs `all: true` for everything of the target) and states the target requirement (`fixtures` OR `use_selection`). It does not point at alternatives such as gma3_clear_programmer or gma3_set_attributes, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_run_macroRun (Go+) or stop (Off) a macro and observe itA
EXECUTES: action go sends Go+ Macro N (starts it, or continues it after a Go wait); off sends Off Macro N. Then OBSERVES the macro's running line over time, on the server side (no Lua loop needed), for observe_seconds (default 3, max 60): finished, paused_at_go (a manual wait), running, idle. After a go it also reads the console's top dialog: a line that opened one (a Lua Confirm(), e.g. the MA Show Start's wizards) waits for it, and execution.dialog then has its title, message and buttons, to answer with gma3_dialog (dialog: false when none is open; needs bridge 0.42.0; unknown on an older one). The result separates dispatched (the command was accepted) from observed (the run state seen); it never claims that every line succeeded, because a failing line does not stop a macro. Lines with a (prompt) ask the operator for input.
| Name | Required | Description | Default |
|---|---|---|---|
| macro | Yes | ||
| action | Yes | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| interval_ms | No | ||
| observe_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses that the call mutates state (sends Go+/Off), that observation polls over observe_seconds (default 3, max 60), the four possible run states, the dialog readback with bridge 0.42.0 dependency and "unknown" fallback, and the crucial caveat that dispatched does not mean every line succeeded. That is exactly the kind of side-effect and result-semantics detail annotations would otherwise supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The EXECUTES/OBSERVES framing is front-loaded and every clause carries information. It is a dense single paragraph with stacked parentheticals (e.g. the MA Show Start wizard aside) that slow parsing, but there is little genuinely wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, unannotated, no-output-schema mutation tool, the description covers side effects, timing, state vocabulary, dialog handling, and the dispatched-vs-observed distinction. The remaining gap is the return payload's full field list and the unexplained interval_ms, which keeps it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description has to compensate and it partially does: it defines action (go/off), macro N, and observe_seconds (default 3, max 60). However, interval_ms is never explained anywhere — its unit, default, and effect on polling are left to inference — and data_pool is only covered by the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"EXECUTES: action go sends Go+ Macro N ... off sends Off Macro N" names a specific verb (run/stop) and resource (macro N), then adds the observation behavior. It is clearly distinguishable from siblings like gma3_macros (listing), gma3_store_macro, and gma3_edit_macro_line, which an agent could otherwise confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the two action modes and states the observation happens server-side "no Lua loop needed," implicitly steering the agent away from gma3_lua polling, and it explicitly routes dialog answering to gma3_dialog. It does not state when to prefer this over gma3_command or gma3_playback, so the alternative-selection guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_save_showSave the show fileA
Save the show: under the current name (default) or a new name (which becomes the console's current show). A new name is at most 32 characters (the console cuts longer names; non-ASCII counts in UTF-8 bytes) and is refused before anything is sent. Refuses to replace another show's existing file unless overwrite: true, and refuses while a dialog is open. SaveShow is sent so that it cannot stall the bridge; the tool answers SaveShow's own confirmation ("Change show file name?", or "... and overwrite existing show file?" with overwrite: true) and nothing else. Verification: matched when the file carries a time from this save and the console names it current; the result reports the file (size, time). Requires exclusive: true. Use gma3_show_files to see the files first. Needs bridge 0.35.0.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Show name (without .show), at most 32 characters. Default: the current show. | |
| exclusive | No | ||
| overwrite | No | Replace an existing file of another show with this name (default false: refuse). | |
| timeout_ms | No | How long to wait for the save (2000-120000, default 20000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so unusually well: it discloses the destructive overwrite condition, the dialog-open refusal, name truncation by UTF-8 byte length with pre-send refusal, which confirmation prompt it answers, and the exact verification criteria (file timestamp from this save plus console naming it current). It also states the result payload (size, time) and a bridge version requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary action and default, then layered constraints, verification, and prerequisites in a logical order with no filler. Some sentences are densely packed (the SaveShow/confirmation sentence requires a second read), which costs a point but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with no annotations and no output schema, the description supplies everything an agent needs: naming rules, overwrite risk, dialog-state prerequisite, confirmation handling, verification logic, and what the result contains. No material gap remains for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, and the description compensates for the gap: 'exclusive' has no schema description but the prose states it is required, and 'name' gains the 32-character limit, byte-counting rule for non-ASCII, and pre-validation behavior. Only timeout_ms is left to the schema, and the description adds no failure/timeout semantics of its own.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save the show') plus the two scoping modes (current name default vs. a new name that becomes current). It is clearly distinguishable from the file-listing sibling gma3_show_files, which it names as a separate step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions and routing: use gma3_show_files first to inspect files, requires exclusive: true, and it will refuse while a dialog is open or when colliding with another show's file unless overwrite: true. It stops short of an explicit 'do not use this when…' statement or naming a rename-only alternative, so it is strong but not a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_selectSelect fixturesA
Select fixtures by range or group in the programmer. Sends the selection expression as a command (e.g. Fixture 1 Thru 5, Group 3). CHANGES THE SELECTION: grandMA3 adds to the current selection when it has no active values and replaces it when values are active; set clear_first to send ClearSelection first for a deterministic result. Does NOT clear programmer values (ClearSelection only deselects). Verifies that Selection.CountTotalSelected is >= 1 afterwards and lists the selected members (first 50) for information; it does not assert exact membership. Serialised against this server's other mutations only, not against other operators or clients.
| Name | Required | Description | Default |
|---|---|---|---|
| fixtures | Yes | Fixture IDs/ranges ("1 Thru 5", "1 + 3", "Fixture 101 Thru 110", "Fixture 1.1") or a group ("Group 5"). | |
| clear_first | No | Send ClearSelection before selecting (default false). Deselects only; programmer values are kept. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: mutation semantics (add vs replace based on active values), clear_first deterministic option, non-destructive to programmer values, verification of Selection.CountTotalSelected, listing of first 50 members, and serialization scope. This is exactly the behavioral context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and then layers behavioral details in a logical order. It is dense but every sentence adds value; slightly long for a two-parameter tool, though justified by the complexity of the selection semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a mutation tool with no annotations and no output schema. It covers side effects, determinism, verification, and serialization limits, leaving no significant gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters including examples and defaults. The description adds context about clear_first's effect (deterministic result) but no syntax beyond what the schema provides; baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Select fixtures ... in the programmer') and immediately grounds it with concrete examples of selection expressions. An agent can distinguish this from siblings like gma3_clear_programmer or gma3_selection_grid without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when the tool adds to vs. replaces the selection, and names clear_first as the deterministic alternative with its precondition. It also delineates behavior vs. siblings by noting it does not clear programmer values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_selection_gridRead a group's or the selection's gridA
Read-only. With group: the stored fixtures of Group (in the console's stored order, which is patch order) with their selection-grid X/Y/Z cells, PreserveGridPositions, lock, shared cells, bounds and gap count, read from the group's stored data (nothing is selected). Without group: the current selection in the order it was selected, with its grid cells (MAtricks-transformed when MAtricks is active). Distributions follow the cells, not the list order. Fixture ids are FIDs or dotted cell ids ("501.1"). Grid cells are the selection grid MAtricks and phasers use, not physical stage positions. Needs bridge 0.21.0.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Group number; omit to read the current selection. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it declares read-only up front, states that reading a group does not select anything, discloses ordering semantics (patch order vs selection order), notes MAtricks transformation is applied to the live selection, warns that 'Distributions follow the cells, not the list order', and lists the returned fields including PreserveGridPositions, lock, shared cells, bounds and gap count. It also flags the bridge 0.21.0 prerequisite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The read-only flag and the group/no-group split are front-loaded, and most sentences carry distinct facts. It is, however, a single dense run-on block with listed return fields that could be trimmed or laid out more scannably, which keeps it below 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no annotations and no output schema, the description covers everything an agent needs: mode selection, ordering, MAtricks interaction, what the numeric cells mean versus stage positions, the shape of ids, and a version prerequisite. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both 'group' and 'data_pool' fully, making 3 the baseline. The description reinforces what omitting 'group' means and clarifies the ID format of returned fixtures (FIDs or dotted cell ids like "501.1"), but adds nothing about the 'data_pool' parameter that the schema does not already carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb and resource and splits it into two clearly enumerated modes: 'With group: the stored fixtures of Group <n> ... with their selection-grid X/Y/Z cells' versus 'Without group: the current selection in the order it was selected'. It also pre-empts confusion with the similarly named sibling gma3_fixture_positions by stating 'Grid cells are the selection grid MAtricks and phasers use, not physical stage positions.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit selection logic for the two modes (pass group to read stored data with nothing selected; omit it to read the live selection), which is stronger than most siblings. It stops short of naming alternative tools for physically-oriented queries (e.g. gma3_fixture_positions or gma3_matricks) as the destination when this tool is wrong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_sequencesList sequencesB
List all sequences in the selected data pool with cue count, whether they have active playback, and the current cue (currentCue {no, name} while it plays; lastCue: the cue it stopped in, after Off). Needs bridge 0.32.0 for the cue.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | Extra property names to include per sequence | |
| offset | No | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does add real behavioral context: it explains the currentCue vs lastCue semantics (current cue while playing, last cue after Off) and states a bridge version prerequisite (0.32.0) for the cue field. It stops short of saying it is strictly read-only or describing failure modes when the bridge is older.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and scope, then the returned attributes, then the version caveat. The parenthetical about currentCue/lastCue is dense but earns its place; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description usefully sketches the return payload and a version dependency, but leaves pagination, error behavior, and the limit/offset/fields parameters unexplained. Adequate but with visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: limit and offset have no descriptions, and fields is terse. The description mentions the 'selected data pool' but does not clarify pagination behavior, defaults for limit, what happens to extra fields, or the interaction with data_pool, so it does not compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all sequences in the selected data pool') and enumerates the salient returned attributes (cue count, active playback, current cue). It doesn't distinguish itself from close siblings like gma3_cues or gma3_configure_sequence, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'List' and the data-pool scoping; there is no explicit statement of when to use this versus gma3_cues or gma3_configure_sequence. An agent can infer it is a read/inspection call, but must guess at the boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_attributeSet a fixture attributeA
Set one attribute (Dimmer, Pan, Zoom, ColorRGB_R, ...) to an absolute value in the programmer. Sends Attribute "<name>" At Absolute [<unit keyword>] <value> after establishing the target. Target is explicit: fixtures (range/group) OR use_selection: true. With fixtures the tool sends ClearSelection and then SELECTS exactly those fixtures (the selection changes; previously selected fixtures are not affected unless add_to_selection is true). Never clears programmer values. Without unit the number is interpreted by the user profile's readout. Small explicit targets are pre-checked against the fixture type's attribute list (check_attributes), and after setting, the programmer is read back and compared per fixture in the unit sent (verify); a fixture without the attribute is a mismatch, not a success. Serialised against this server's other mutations only.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Value-type keyword sent with At: percent, percent_fine, physical (degrees/Hz/rpm), natural (attribute's natural readout), decimal8/16/24. Omit to use the console's current readout. | |
| value | Yes | Absolute value. Range depends on unit: percent/percent_fine 0..100, decimal8 0..255, decimal16 0..65535, decimal24 0..16777215, physical/natural any finite number. | |
| verify | No | Read the programmer back after setting (default true): every targeted fixture must hold the value, compared in the unit it was sent in (percent of the attribute range, tolerance 0.5 %). A fixture without the attribute is reported as a mismatch. Needs plugin 0.3.2 or newer; older plugins yield verification 'unavailable'. | |
| fixtures | No | Explicit target: fixture IDs/ranges ("1 Thru 5", "1 + 3 + 5 Thru 8", "Fixture 101.1") or a group ("Group 5"). Exactly one of fixtures / use_selection is required. | |
| attribute | Yes | Attribute name as grandMA3 shows it, e.g. "Dimmer", "Pan", "Tilt", "Zoom", "ColorRGB_R" (letters, digits, _ and . only). | |
| use_selection | No | Apply to the fixtures currently selected on the console (explicit opt-in). Fails before sending when nothing is selected. | |
| add_to_selection | No | With `fixtures`: keep the fixtures already selected and add the target to them, so previously selected fixtures ALSO receive the values (explicit opt-in). Default false: ClearSelection is sent first so exactly the named fixtures are targeted. ClearSelection only deselects; programmer values are never cleared. | |
| check_attributes | No | With `fixtures` resolving to at most 8 fixtures (default true): check each fixture type's attribute list first and fail before sending when a fixture lacks the attribute. Skipped for groups and larger targets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does: it discloses that ClearSelection is sent and the selection changes, that previously selected fixtures are untouched unless add_to_selection is true, and that programmer values are never cleared. It also spells out the pre-check/verify pipeline and the mismatch-is-not-success rule, which an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first sentence and then walks through targeting, side effects, and verification in a logical order. Dense but each sentence carries information; the final serialisation note and a few packed clauses edge it just below maximum readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no annotations and no output schema, the description covers what an agent needs: how to target, what mutations occur to the selection and programmer, how failures are surfaced (pre-check failure, verification mismatch), and version constraints for verify. Nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the effect of omitting `unit` (interpreted by the user profile's readout), the selection side effect of `fixtures`, and the dependency of `check_attributes` on target size. These are behavioural couplings the per-property schema text only partially conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set'), a bounded resource ('one attribute ... to an absolute value in the programmer'), and gives concrete examples (Dimmer, Pan, Zoom, ColorRGB_R). It also names the underlying command sent, so the mechanism is unambiguous. It never explicitly differentiates from nearby siblings that also write values (gma3_set_color, gma3_set_position, gma3_set_property), so it lands at clear-but-not-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: the target must be explicit via `fixtures` OR `use_selection: true`, when the pre-check applies (small explicit targets, <=8 fixtures), when verification runs, and that the operation is serialised against this server's other mutations. It stops short of saying when to prefer this over gma3_set_color/gma3_set_position or gma3_command, so no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_attributesSet several attributes (a look) in one callA
Set a whole look on one target in one call: intensity (At <value>, percent) and/or several attributes, each Attribute "<name>" At Absolute [<unit keyword>] <value>, in the order given. Stops at the first command the console rejects (partial result). Target is explicit: fixtures OR use_selection: true; with fixtures, ClearSelection and then a select (see gma3_set_attribute). Never clears programmer values. Note: setting one colour attribute activates the fixture's whole colour group in the programmer (the other mix channels at their defaults), so the programmer can hold more rows than attributes sent. Small explicit targets are pre-checked against the fixture types' attributes (check_attributes); the programmer is read back and every targeted fixture (and cell) is compared per attribute in the unit sent (verify), as gma3_set_attribute does. Serialised against this server's other mutations only.
| Name | Required | Description | Default |
|---|---|---|---|
| values | No | Attributes to set (up to 32), each once. | |
| verify | No | Read the programmer back after setting (default true): every targeted fixture must hold the value, compared in the unit it was sent in (percent of the attribute range, tolerance 0.5 %). A fixture without the attribute is reported as a mismatch. Needs plugin 0.3.2 or newer; older plugins yield verification 'unavailable'. | |
| fixtures | No | Explicit target: fixture IDs/ranges ("1 Thru 5", "1 + 3 + 5 Thru 8", "Fixture 101.1") or a group ("Group 5"). Exactly one of fixtures / use_selection is required. | |
| intensity | No | Intensity 0..100 percent, sent as `At <value>` (the Dimmer attribute). | |
| use_selection | No | Apply to the fixtures currently selected on the console (explicit opt-in). Fails before sending when nothing is selected. | |
| add_to_selection | No | With `fixtures`: keep the fixtures already selected and add the target to them, so previously selected fixtures ALSO receive the values (explicit opt-in). Default false: ClearSelection is sent first so exactly the named fixtures are targeted. ClearSelection only deselects; programmer values are never cleared. | |
| check_attributes | No | With `fixtures` resolving to at most 8 fixtures (default true): check each fixture type's attribute list first and fail before sending when a fixture lacks the attribute. Skipped for groups and larger targets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses important behavior: partial results on rejection, selection clearing behavior, the colour-group activation side effect, pre-checking, readback verification, and serialisation against other mutations. These details go well beyond what a bare mutation description would provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the content is dense but useful. It is a single long paragraph, and some selection behaviour details are repeated through references, but there is little outright waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 7-parameter mutation tool with no annotations and no output schema, the description supplies the missing operational context: target rules, side effects, failure behavior, verification, and mutation serialisation. An agent has enough information to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description adds useful command-level meaning: intensity is sent as `At <value>` in percent, attributes use `Attribute "<name>" At Absolute [<unit keyword>] <value>`, and values are applied in the order given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: set a whole look, including intensity and/or several attributes, on one target in one call. It distinguishes this multi-attribute operation from the singular sibling by referencing gma3_set_attribute for selection semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly requires an explicit target via `fixtures` or `use_selection: true`, and explains when pre-checking and verification apply. It does not explicitly compare against other nearby tools such as gma3_set_color or gma3_set_position, but the multi-attribute use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_colorSet RGB colourA
Set ColorRGB_R, ColorRGB_G and ColorRGB_B (each 0..100 %) in the programmer: three commands Attribute "ColorRGB_R" At Absolute Percent <r> etc., stopping at the first the console rejects (partial result). Target is explicit: fixtures OR use_selection: true. With fixtures the tool sends ClearSelection and then SELECTS exactly those fixtures (the selection changes; previously selected fixtures are not affected unless add_to_selection is true). Never clears programmer values. Only the documented ColorRGB_* attributes are supported. Small explicit targets are pre-checked against the fixture type's attributes (check_attributes); after setting, the programmer is read back and each fixture's R, G and B are compared in percent (verify), so a fixture without RGB is a mismatch, not a success. Serialised against this server's other mutations only.
| Name | Required | Description | Default |
|---|---|---|---|
| red | Yes | Red 0..100 (percent) | |
| blue | Yes | Blue 0..100 (percent) | |
| green | Yes | Green 0..100 (percent) | |
| verify | No | Read the programmer back after setting (default true): every targeted fixture must hold the value, compared in the unit it was sent in (percent of the attribute range, tolerance 0.5 %). A fixture without the attribute is reported as a mismatch. Needs plugin 0.3.2 or newer; older plugins yield verification 'unavailable'. | |
| fixtures | No | Explicit target: fixture IDs/ranges ("1 Thru 5", "1 + 3 + 5 Thru 8", "Fixture 101.1") or a group ("Group 5"). Exactly one of fixtures / use_selection is required. | |
| use_selection | No | Apply to the fixtures currently selected on the console (explicit opt-in). Fails before sending when nothing is selected. | |
| add_to_selection | No | With `fixtures`: keep the fixtures already selected and add the target to them, so previously selected fixtures ALSO receive the values (explicit opt-in). Default false: ClearSelection is sent first so exactly the named fixtures are targeted. ClearSelection only deselects; programmer values are never cleared. | |
| check_attributes | No | With `fixtures` resolving to at most 8 fixtures (default true): check each fixture type's attribute list first and fail before sending when a fixture lacks the attribute. Skipped for groups and larger targets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses partial-failure behavior ('stopping at the first the console rejects'), that it never clears programmer values, that ClearSelection fires and mutates the selection when `fixtures` is used, the check/verify round-trip with mismatch reporting, and serialization against other mutations. These are the exact non-obvious traits an agent needs for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first clause, and the remaining sentences each carry distinct operational information. It is dense and somewhat run-on with console-syntax detail, but for an 8-parameter mutation tool every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation tool with no output schema, the description covers targeting rules, side effects on selection, failure/partial-result semantics, and verification outcomes, so an agent can call and interpret it correctly. Nothing essential is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all eight parameters (baseline 3). The description still adds meaning by tying parameters together: the explicit-target XOR rule, the ClearSelection side effect of `fixtures`, the add_to_selection interplay, and the read-back/compare behavior behind `verify`. Only marginal duplication keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: set ColorRGB_R/G/B in the programmer, and it scopes the tool by declaring 'Only the documented ColorRGB_* attributes are supported', which implicitly separates it from the generic gma3_set_attribute/gma3_set_property siblings. An agent can tell immediately what this tool operates on and what it writes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is well specified: the target must be either `fixtures` or `use_selection: true`, and small explicit targets trigger pre-checks. It doesn't, however, explicitly compare itself to alternatives like gma3_set_attribute or gma3_select for building selections, so the routing guidance stops short of naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_cue_timingSet cue timingA
Edit the timing of an existing cue part (default part 0, the cue's main part) with one Set() per given field: fade (CueInFade), delay (CueInDelay), out_fade (CueOutFade), out_delay (CueOutDelay), snap_delay (SnapDelay), all in seconds; 0 is a value. Only the given fields are changed. Refuses (nothing sent) when the cue part does not exist. No command-line command is sent; selection and programmer are untouched. Reads the changed fields back from the part. Stored fixture values are not touched or verified. The mutation lock orders only this server's own mutations; it does not isolate the operation from another console operator or another client.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | One cue number, fractional allowed (2, 2.5, "10.001"; max three decimals). Ranges (Thru, +) are rejected. | |
| fade | No | Cue (in) fade time in seconds; 0 is a value. Part property CueInFade. | |
| part | No | Part number (default 0 = the cue's main part). | |
| delay | No | Cue (in) delay time in seconds; 0 is a value. Part property CueInDelay. | |
| verify | No | Read the result back after the mutation (default true). Verification is reported separately from the mutation steps. | |
| out_fade | No | Out fade in seconds (dimmers going down); 0 is a value. Part property CueOutFade. | |
| sequence | No | Sequence number (1..99999). Required unless use_selected_sequence is true; exactly one of the two. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| out_delay | No | Out delay in seconds; 0 is a value. Part property CueOutDelay. | |
| snap_delay | No | Snap delay in seconds (Part property SnapDelay); 0 is a value. | |
| use_selected_sequence | No | Act on the console's currently selected sequence. It is resolved to its sequence number first, and the command is sent with that explicit number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so: one Set() per field, additive (only given fields change), fail-closed behavior (nothing sent when the part is missing), no command-line command emitted, selection and programmer untouched, read-back verification, and fixture values neither touched nor verified. It even discloses the mutation lock's limit — it orders only this server's mutations and does not guard against other console operators or clients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the mutation model, the field mapping, and the refusal behavior come first, and the caveats about selection, verification, and the mutation lock follow. The parenthetical property names duplicate the schema, so a small amount of text is redundant, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no annotations and no output schema, the description covers the essentials: what changes, what does not, failure behavior, concurrency limits, and that results are read back. It stops short of describing what the verification report actually contains, but the 'reported separately from the mutation steps' note gives the agent enough to interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all 11 parameters are already documented, including units, '0 is a value', and the default part 0. The description largely restates the same field-to-property mapping the schema provides, adding little semantic detail beyond it; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: edit the timing of an existing cue part, with an explicit field-to-property mapping (fade=CueInFade, delay=CueInDelay, out_fade/out_delay/snap_delay). Scope is narrowed effectively by 'only the given fields are changed.' It never names a sibling such as gma3_set_cue_trigger, so the differentiation is by scope rather than by explicit routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: use it on an existing cue part to change timing fields, with default part 0. The refusal condition (part does not exist) tells the agent a precondition, but there is no explicit when-not guidance and no pointer to gma3_set_cue_trigger or gma3_store_cue_part as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_cue_triggerSet cue triggerA
Set how an existing cue is triggered: trigger "go" (manual), "time" (after time seconds; time required), "follow" (when the previous cue completes; optional time as extra delay), "sound" or "bpm" (no time). Sets the cue's TrigType and then TrigTime via Set(); no command-line command is sent, selection and programmer are untouched. Refuses (nothing sent) when the cue does not exist. Reads TrigType and TrigTime back. The mutation lock orders only this server's own mutations; it does not isolate the operation from another console operator or another client.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | One cue number, fractional allowed (2, 2.5, "10.001"; max three decimals). Ranges (Thru, +) are rejected. | |
| time | No | Trigger time in seconds (TrigTime). Required for "time", optional for "follow", not allowed for "go", "sound", "bpm". 0 is a value. | |
| verify | No | Read the result back after the mutation (default true). Verification is reported separately from the mutation steps. | |
| trigger | Yes | Trigger type (console TrigType: Go, Time, Follow, Sound, BPM). | |
| sequence | No | Sequence number (1..99999). Required unless use_selected_sequence is true; exactly one of the two. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| use_selected_sequence | No | Act on the console's currently selected sequence. It is resolved to its sequence number first, and the command is sent with that explicit number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so: it discloses the internal write order (TrigType then TrigTime via Set()), that no command-line command is sent and selection/programmer are untouched, the refusal path when the cue does not exist, and the read-back. It even scopes the mutation lock, noting it does not isolate against other console operators or clients.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then packs the trigger-value semantics into one dense sentence, followed by mechanics, failure behavior, and the lock caveat. No filler or restated title; every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter mutation tool with no annotations and no output schema, the definition covers what changes, in what order, what is left untouched, when it refuses, and what is verified afterward. Nothing an agent needs in order to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all seven parameters including the trigger enum and the time cross-constraints. The description restates the time/trigger dependency rather than adding new semantics, and says nothing about `sequence` versus `use_selected_sequence` or `data_pool`. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Set how an existing cue is triggered", and enumerates the exact trigger values with their meanings. It never names the nearest sibling (gma3_set_cue_timing, which handles cue timing rather than trigger type), so the agent must infer the boundary between the two, which keeps it out of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives per-value applicability rules that function as usage guidance: "time" requires `time`, "follow" accepts an optional extra delay, "go"/"sound"/"bpm" take no time, and the tool operates only on an existing cue. It stops short of explicitly naming alternatives or stating when not to use this tool in favor of a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_faderSet a faderA
Set a fader of a playback object (sequence, executor's assigned object, master) to a value 0..100 via the Lua SetFader API. Tokens: FaderMaster (default), FaderX, FaderXA, FaderXB, FaderTemp, FaderRate, FaderSpeed, FaderHighlight, FaderLowlight, FaderTime, FaderSolo. For a timed fade use gma3_command with e.g. 'FaderMaster Sequence 1 At 50 Fade 3'.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference. Either command-line object syntax ("Sequence 1", "Sequence 1 Cue 3", "Fixture 101", "Group 5", "Macro 2", "Page 1.201"), a dotted show-data path from a root ("DataPool.Sequences", "Root.ShowData", "Patch.Fixtures"), a numeric address like "14.14.1.6.1", or one of: Root, ShowData, DataPool, SelectedSequence, CurrentCue, Patch, Programmer, Selection, CurrentExecPage. | |
| token | No | ||
| value | Yes | ||
| enabled | No | Enable/disable a toggleable fader (e.g. FaderTime) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the mechanism (Lua SetFader API), the valid value range, the default token, and the toggleable-fader hint for 'enabled'. It does not say whether the change takes effect immediately on live output, what happens on an invalid ref, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and value range, then the token inventory, then the alternative path. The long token list is justified because the schema leaves 'token' undescribed, though the enumeration is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description makes no claim about return values, and it does cover the two parameters the schema leaves thin (token tokens/default) as well as the value range. For a 4-param mutation tool this is nearly complete; only error/precondition behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and the undocumented 'token' parameter is exactly where the description adds value, enumerating all valid tokens (FaderMaster, FaderX, FaderXA/XB, FaderTemp, FaderRate, FaderSpeed, FaderHighlight, FaderLowlight, FaderTime, FaderSolo) with a stated default. It reinforces the 0..100 range but does not add meaning to 'ref' beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) plus the resource (a fader of a playback object) and scopes the target set explicitly to sequence, executor's assigned object, or master. It also names the sibling tool (gma3_command) that handles the timed-fade case, so an agent can separate it from both gma3_get_fader and gma3_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: use this for a direct value set via the Lua SetFader API, and route timed fades to gma3_command with a concrete example. It also flags FaderMaster as the default token. It stops short of stating exclusions such as preconditions or when the fader doesn't exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_positionSet Pan/TiltA
Set Pan and/or Tilt in the programmer with explicit units: unit "degrees" sends Attribute "Pan" At Absolute Physical <v>, unit "percent" sends ... At Absolute Percent <v> (0..100). Pan first, then Tilt; stops at the first rejected command. Target is explicit: fixtures OR use_selection: true. With fixtures the tool sends ClearSelection and then SELECTS exactly those fixtures (the selection changes; previously selected fixtures are not affected unless add_to_selection is true). Never clears programmer values. Small explicit targets are pre-checked against the fixture type's attributes (check_attributes); after setting, the programmer is read back and Pan/Tilt are compared per fixture in the unit sent, converting degrees through each fixture's physical range (verify). A fixture without Pan/Tilt is a mismatch, not a success. Serialised against this server's other mutations only.
| Name | Required | Description | Default |
|---|---|---|---|
| pan | No | Pan value in `unit`. At least one of pan/tilt is required. | |
| tilt | No | Tilt value in `unit`. | |
| unit | Yes | "degrees" (Physical readout, negative values allowed) or "percent" (0..100). Required. | |
| verify | No | Read the programmer back after setting (default true): every targeted fixture must hold the value, compared in the unit it was sent in (percent of the attribute range, tolerance 0.5 %). A fixture without the attribute is reported as a mismatch. Needs plugin 0.3.2 or newer; older plugins yield verification 'unavailable'. | |
| fixtures | No | Explicit target: fixture IDs/ranges ("1 Thru 5", "1 + 3 + 5 Thru 8", "Fixture 101.1") or a group ("Group 5"). Exactly one of fixtures / use_selection is required. | |
| use_selection | No | Apply to the fixtures currently selected on the console (explicit opt-in). Fails before sending when nothing is selected. | |
| add_to_selection | No | With `fixtures`: keep the fixtures already selected and add the target to them, so previously selected fixtures ALSO receive the values (explicit opt-in). Default false: ClearSelection is sent first so exactly the named fixtures are targeted. ClearSelection only deselects; programmer values are never cleared. | |
| check_attributes | No | With `fixtures` resolving to at most 8 fixtures (default true): check each fixture type's attribute list first and fail before sending when a fixture lacks the attribute. Skipped for groups and larger targets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it delivers: it discloses that ClearSelection is sent (selection changes) but programmer values are never cleared, that execution stops at the first rejected command, that a fixture lacking Pan/Tilt is a mismatch not a success, and that it is serialised against other mutations. This is exactly the side-effect and failure-mode disclosure an 8-param mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and dense but largely non-redundant; nearly every clause carries behavioural or targeting information. It is a single long paragraph with some overlap against the schema descriptions (e.g., use_selection/add_to_selection), which costs it the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 8 parameters, the description covers everything an agent needs: units, targeting rules, selection side effects, verification/readback semantics, and failure handling. There is no significant gap left for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining what the `unit` value actually dispatches (`Attribute "Pan" At Absolute Physical <v>` vs `... At Absolute Percent <v>`) and the ordering (Pan first, then Tilt). It reinforces rather than merely repeats the parameter docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) and resource (Pan and/or Tilt in the programmer) with explicit scope. An agent can distinguish this from siblings like gma3_set_attribute or gma3_set_color without opening a schema, since the title and first clause pin it to pan/tilt positioning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: target must be either `fixtures` or `use_selection: true`, values are set in the programmer, and pre-check/verify conditions are explained. It stops short of naming sibling alternatives (e.g., when to prefer gma3_set_attribute for non-pan/tilt), so it is clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_propertySet an object propertyA
Set a property of a show object via the Lua Set() API, e.g. ref 'Sequence 1', property 'Name' or 'Tracking'; ref 'Sequence 1 Cue 2', property 'TrigTime'. Values are passed as text the way they would be typed in the editor (e.g. 'Yes', 'No', '2.5', 'Follow'). This modifies the show file. The property and the object's Lock and SystemLocked are read before the write; the console keeps the old value without an error when it does not take one. The result's verification is 'verified' only for plain values that read back as requested: Yes/No (its spellings only on a Yes/No property), enums, numbers (by the raw value), and text compared exactly, spaces included. 'failed' (an error): the value is still the old one (naming the lock, Unlock then set then Lock again, or saying the lock state is unknown), another plain value, or the read-back failed. 'unverified' (not an error): object references (Appearance, ...), a macro line's Command and Wait, Tags, durations and other values the console reformats are not judged; the read-back is returned with a hint naming the typed tool that checks it (gma3_get_object, gma3_macros / gma3_edit_macro_line, gma3_tags).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Object reference. Either command-line object syntax ("Sequence 1", "Sequence 1 Cue 3", "Fixture 101", "Group 5", "Macro 2", "Page 1.201"), a dotted show-data path from a root ("DataPool.Sequences", "Root.ShowData", "Patch.Fixtures"), a numeric address like "14.14.1.6.1", or one of: Root, ShowData, DataPool, SelectedSequence, CurrentCue, Patch, Programmer, Selection, CurrentExecPage. | |
| value | Yes | ||
| property | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and does so: it discloses that the show file is modified, that property plus the object's Lock and SystemLocked are read before writing, that the console silently keeps the old value on a rejected write, and it enumerates verified / failed / unverified outcomes including the recovery action (Unlock, set, Lock again). It also explains that unverified is not an error and points to the typed tool that can check the read-back, which is exactly the context an agent needs to interpret a result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The identification and example content is front-loaded, which is good, but the remainder is a run-on block of long comma-chained sentences with no separation between the lock behavior and the verification taxonomy. Every fact earns its place, yet the lack of structure makes the verified/failed/unverified distinctions harder to extract than they need to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation tool with no annotations and no output schema, the definition covers the important ground: what is mutated, what is returned (verification state, read-back, and a hint naming the checking tool), and how failures present. The main remaining gap is procedural guidance on choosing this tool over the other set/store siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% – only 'ref' is documented – so the description must compensate, and it does for the two undocumented parameters. It explains that 'property' takes field names like 'Name', 'Tracking' or 'TrigTime' and that 'value' is passed as text the way it would be typed in the editor ('Yes', 'No', '2.5', 'Follow'), which tells the agent a stringified value is acceptable despite the union type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: setting a property of a show object through the Lua Set() API, and it grounds that with concrete example pairs ('Sequence 1' / 'Name', 'Sequence 1 Cue 2' / 'TrigTime'). That is enough for an agent to tell it apart from narrower siblings such as gma3_set_attribute or gma3_set_color, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: it directs the agent to gma3_get_object, gma3_macros / gma3_edit_macro_line and gma3_tags for verifying values it cannot confirm. There is no explicit 'use this instead of X when Y' routing against the many other set/store tools in the sibling list, leaving the agent to infer when the generic Set() path is preferred over gma3_command or gma3_lua.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_set_variableSet or delete a console variableA
Set a global or user variable to a value with its type (integer, double or text, as SetGlobalVariable / SetUserVariable do; a text keeps quotes exactly), or delete it, then read it back (value and type). User variables are the bridge's user's (another user profile has its own). Macros and cue commands use them as $name (outside quotes); a user variable shadows a global one. Needs bridge 0.31.0. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Variable name (case-sensitive). Required unless variables is given. | |
| type | No | The type (default: from the value: whole number integer, other number double, string text). | |
| scope | No | global (every user) or user (the bridge's user profile). Required unless variables is given (it may then be a default). | |
| value | No | The value: a number (integer or double) or a text ("9" is the text 9). | |
| delete | No | Delete the variable instead of setting it. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | Read the variable back and compare (default true). | |
| variables | No | Batch form: several variables, each {scope, name, value, type} or {scope, name, delete: true}; scope may be given once for all. | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so well: it discloses the automatic read-back verification, that text keeps its quotes exactly, that type is inferred from the value, that batch items run in order with no retries and an unknown outcome halts the rest, and how stop_on_failure interacts with object-level dependencies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the rest is one dense run-on paragraph with heavy parenthetical nesting (batch semantics, detail, stop_on_failure all stacked). Every clause carries information, yet the batch rules would be far easier to parse as separate sentences or a short list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no annotations and no output schema, the description covers mutation semantics, verification, batch ordering and failure handling thoroughly. The gap is the return shape: 'one line per item' and 'detail: true for every step' are gestured at but not concretely described, and the single-form error behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: outer arguments act as per-item defaults and an item's own fields win, and text values retain quoting. It stops short of explaining the interplay of verify/detail in the single form, but the batch defaulting rule is genuinely additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: set a global or user variable to a typed value, or delete it, then read it back. The dual set/delete behavior and the type handling are made explicit. It does not name the sibling read/list tool (gma3_variables) that an agent would use instead of the read-back, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real usage context: variables are referenced by macros and cue commands as $name outside quotes, a user variable shadows a global one, and bridge 0.31.0 is required. It also spells out when the batch form applies (list instead of single fields, defaults for every item). No explicit 'use X instead when...' routing to a sibling, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_show_filesList the show filesA
Read-only. The console's current show, the shows folder and every .show file in it (name, size, time as ISO and as the console's local wall-clock time), newest first, and a dialog when one is open. Use it before gma3_save_show to choose a name that does not replace another show. Needs bridge 0.35.0.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does so well: it declares 'Read-only', describes the exact returned payload and its ordering ('newest first'), notes the presence of a dialog when one is open, and states the bridge version prerequisite (0.35.0). It stops short of describing failure behavior when the bridge is absent or the console is unreachable, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The safety-relevant word 'Read-only' is front-loaded, the return contents follow, and the usage guidance plus version requirement close it out. Nothing is repeated from the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description compensates by enumerating every returned field and the sort order, so an agent knows precisely what to expect back. For a zero-parameter read tool, the addition of the bridge version requirement and the dialog caveat leaves nothing material missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so parameter semantics are trivially satisfied by the baseline of 4. The description correctly adds no parameter detail because there is none to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('list' the show files) and enumerates exactly what is returned: the current show, the shows folder, and every .show file with name, size, and both ISO and local wall-clock times. This is clearly distinguishable from siblings such as gma3_save_show or gma3_list_children without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow condition: 'Use it before gma3_save_show to choose a name that does not replace another show.' That names the alternative tool and the situation that selects it, so no inference is required. A when-not clause is unnecessary because the tool is a zero-parameter read with a single clear purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_speed_master_actionTap, double, halve or reset a speed masterA
action learn: Learn Master 3.N, one tap (the console times the taps itself; taps with interval_ms send several, with the network's jitter); double / half: DoubleSpeed / HalfSpeed (the speed scale one step up or down, the fader stays); reset: Speed1 (60 BPM, scale One). Refuses a locked master. Verifies the scale and tempo afterwards; a single tap cannot be verified (the console needs an interval).
| Name | Required | Description | Default |
|---|---|---|---|
| taps | No | learn only: taps to send (1-16, default 1). | |
| action | Yes | ||
| master | Yes | ||
| verify | No | ||
| preview | No | ||
| interval_ms | No | learn only: time between taps (100-10000 ms). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it states that a locked master is refused, that scale and tempo are verified afterwards, and that a single tap cannot be verified because the console needs an interval. It also notes network jitter when interval_ms sends multiple taps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loads the action semantics, with no filler sentences. It is structured as action: explanation, though the long semicolon chain slightly reduces readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations or output schema, it provides strong behavioral context: preconditions, verification, and limitations. However, it leaves the meanings of verify and preview parameters unstated, so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, so the description must compensate. It maps the action enum values to console commands and clarifies taps/interval_ms behavior, but leaves master, verify, and preview undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (speed master) and the four distinct actions (learn/double/half/reset) with their console commands, so an agent can tell what the tool does without opening the schema. It differentiates itself from sibling configure/list tools by being action-oriented.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the effect of each action but never states when to choose this tool over siblings like gma3_configure_speed_master or gma3_observe_tempo. Usage is only implied through action semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_speed_mastersRead the speed masters, what follows them, and the sound inputA
Read-only. The 16 speed masters (Master 3.N): name, fader, base BPM (from the fader: 50 = 60 BPM), speed scale, effective BPM (base x scale, what followers use), the console's own tempo text, learn mode, lock and problems (duplicate names make links ambiguous). usage (default true): per master the sequences that follow it by speed (phasers in their cues) and by rate (cue timing; the rate is effective BPM / 60 x RateScale) and the executors holding it. sound (default true): the onPC audio input device, the available devices, the SoundIn level and master 16 (the BPM master, driven by the input); beat detection and lock are not readable on 2.5.1, so synchronisation is never claimed. observe_seconds (0-10): samples the masters (master 16 when masters is not given) and reports how they moved. Distinct from timing masters (pool 5, fixed seconds) and cue timing.
| Name | Required | Description | Default |
|---|---|---|---|
| sound | No | ||
| usage | No | ||
| masters | No | Master numbers 1-16 (default all). | |
| observe_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares the tool read-only, states that beat detection and lock are not readable on 2.5.1 and that synchronisation is therefore never claimed, and notes duplicate names make links ambiguous. This version-specific limitation disclosure is genuinely useful, though it does not cover auth requirements or result volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the read-only nature and the resource, and each sentence carries distinct content. It is a dense wall of text with long compound sentences, which slightly hurts scannability, but nothing is padding given the schema coverage gap it must fill.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains the return contents for the base read, the usage expansion, the sound expansion, and the observe behavior, plus the 2.5.1 readability limits. An agent has enough to call it and interpret the response without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only 'masters' is documented), so the description must compensate and it does thoroughly: it defines usage (per-master followers by speed and by rate, plus executors), sound (device, available devices, SoundIn level, master 16 driven by input), and observe_seconds (sampling behavior and default of master 16). Each parameter's meaning and default is spelled out beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ("Read-only. The 16 speed masters") and enumerates exactly what is retrieved (name, fader, base BPM, speed scale, effective BPM, tempo text, learn, lock, problems). It explicitly distinguishes itself from timing masters (pool 5) and cue timing, so an agent can route without opening a sibling schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for the optional parameters (usage default true, sound default true, observe_seconds 0-10) and names the conceptual alternatives (timing masters, cue timing). It does not explicitly contrast with the adjacent write/read siblings like configure_speed_master, speed_master_action, or observe_tempo, so a small routing gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_start_bridgeStart the bridge plugin via OSCA
Fallback for when the bridge is not running: sends the command Plugin "gma3_mcp_bridge" to onPC over OSC (/cmd). Requires the OSC configuration in onPC (Menu > In & Out > OSC) to have Enable Input on and Receive Command = Yes on a line matching GMA3_OSC_PORT (gma3_osc shows it; gma3_test_osc_input proves it). Then waits briefly and pings the bridge.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it discloses the exact OSC command and endpoint, the onPC menu settings that must already be enabled, and that the tool waits then pings the bridge. It omits failure behavior, timeout length, and idempotency, which is what keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The fallback condition is front-loaded and every sentence adds operational information. The nested parenthetical and doubled spacing around the plugin name make it slightly denser than it needs to be, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter recovery tool with no annotations and no output schema, it covers the mechanism and prerequisites well but leaves the agent guessing about what a call returns, how long the wait lasts, and what to do when the ping does not succeed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema baseline is 4. The description mentions GMA3_OSC_PORT, but only as an environment/configuration value that must match onPC's OSC line, not as an input the agent supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (send the Plugin "gma3_mcp_bridge" command over OSC /cmd) and frames it precisely as a fallback for when the bridge is not running, which separates it from connection-oriented siblings like gma3_status or gma3_osc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes use to the bridge-down case and names the prerequisites and verification siblings (gma3_osc shows the port, gma3_test_osc_input proves the input path). It never states what to do if the bridge is already running or if the ping fails, so the exclusion is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_statusgrandMA3 connection statusA
Check whether the gma3_mcp_bridge plugin inside grandMA3 onPC is reachable and report software version, show file, user, the Lua execution policy (whether gma3_lua is enabled on the console and its per-request time/instruction budget), the configured OSC fallback, and whether this server build matches its source checkout (server.build.state 'stale' means tools added or changed since the build are missing or out of date).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it implies a non-mutating probe, discloses the concrete data returned (version, show file, user, OSC fallback), and explains the non-obvious 'stale' build state semantics. It stops short of stating error/return behavior when the bridge is unreachable or confirming it has no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense but front-loaded sentence that opens with the core purpose before listing reported fields. The trailing clause explaining 'stale' is justified, though the sentence is long and could be split for scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns — and it enumerates the key reported fields (version, show file, user, Lua policy and budget, OSC fallback, build state). It leaves response shape and the unreachable-case representation implicit, which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters with 100% schema coverage, so the parameter burden is nil; baseline 4 applies. Nothing in the description is needed to clarify inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Check whether the gma3_mcp_bridge plugin ... is reachable') and then enumerates exactly what is reported. It is unmistakably distinct from every sibling, none of which is a health/diagnostic probe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the description reads like a preflight/diagnostic check, but it never says when to call it (e.g., 'call before other tools', 'verify after gma3_start_bridge') or what to do when the bridge is unreachable. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_cueStore a cueA
Store the programmer content as a cue of a sequence (create, merge or overwrite), optionally with a name and cue timing (seconds). Sends one Store command (/NoConfirmation; /Merge or /Overwrite for those modes), then one Set() per given name/timing field on the part (part 0 for a cue): Name, CueInFade (fade), CueInDelay (delay), CueOutFade, CueOutDelay. Mode create first checks that the target does not exist and refuses (nothing sent) if it does; that check is a point-in-time read, not a transaction lock. The current fixture selection is not changed; the programmer is not cleared (no Clear is sent). Reads back existence, Name and the timing fields that were given; the store step and the read-back are reported separately. Stored fixture values (attribute data) are NOT verified; that needs gma3_cue_contents (FR-10). The mutation lock orders only this server's own mutations; it does not isolate the operation from another console operator or another client.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | One cue number, fractional allowed (2, 2.5, "10.001"; max three decimals). Ranges (Thru, +) are rejected. | |
| fade | No | Cue (in) fade time in seconds; 0 is a value. Part property CueInFade. | |
| mode | Yes | create: refuse if the cue exists. merge: /Merge into an existing cue. overwrite: /Overwrite an existing cue. Exactly one mode. | |
| name | No | Cue name. Names must not contain any of \ " $ & * ? , . ; ^ { } | ~ (the console strips them) and are trimmed; they are set via the Name property of the part after the store. | |
| delay | No | Cue (in) delay time in seconds; 0 is a value. Part property CueInDelay. | |
| verify | No | Read the result back after the mutation (default true). Verification is reported separately from the mutation steps. | |
| out_fade | No | Out fade in seconds (dimmers going down); 0 is a value. Part property CueOutFade. | |
| sequence | No | Sequence number (1..99999). Required unless use_selected_sequence is true; exactly one of the two. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| out_delay | No | Out delay in seconds; 0 is a value. Part property CueOutDelay. | |
| use_selected_sequence | No | Act on the console's currently selected sequence. It is resolved to its sequence number first, and the command is sent with that explicit number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does so thoroughly: it names the exact command form (/NoConfirmation, /Merge, /Overwrite), the follow-up Set() calls on part 0, and the point-in-time nature of the create existence check (not a transaction lock). It explicitly discloses limits -- the mutation lock does not isolate from another console operator, and fixture values are not verified -- which is exactly the kind of behavioral caveat an agent needs before calling a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and modes, then progressively details command mechanics, caveats, and verification scope. Every sentence carries information, though the middle section is a dense run-on cramming five property names into one sentence, which costs some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation tool with no annotations and no output schema, the description covers command mechanics, mode semantics, side effects, and the split between store step and read-back. It stops short of describing failure behavior for merge/overwrite when the target cue does not exist, and gives only a high-level notion of what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns more by tying the fade/delay/out_fade/out_delay parameters to their concrete console properties (CueInFade, CueInDelay, CueOutFade, CueOutDelay) applied via Set() on part 0, and by clarifying that name is applied after the store rather than during it. It adds the verification-separate-from-mutation framing that the schema's 'verify' description only hints at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource -- 'Store the programmer content as a cue of a sequence' -- and enumerates the three modes. It therefore separates itself from read-oriented siblings like gma3_cue_contents, but it never mentions gma3_store_cues or gma3_store_cue_part, so an agent cannot tell from the description alone why it should pick this single-cue tool over the plural one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage conditions are stated clearly: create refuses when the cue exists, merge/overwrite apply to an existing cue, and stored attribute data needs gma3_cue_contents instead. It also explains the side-effect boundaries (fixture selection unchanged, programmer not cleared). It does not, however, route the agent between this tool and its near-duplicate siblings gma3_store_cues or gma3_store_cue_part, which is the main missing piece.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_cue_partStore a cue partA
Store the programmer content into a part of a cue (Store Sequence n Cue c Part p). Part 0 is the main part that every cue has, so storing to part 0 is the same as storing the cue; parts 1..999 hold values with their own timing. Sends one Store command (/NoConfirmation; /Merge or /Overwrite for those modes), then one Set() per given name/timing field on the part (part 0 for a cue): Name, CueInFade (fade), CueInDelay (delay), CueOutFade, CueOutDelay. Mode create first checks that the target does not exist and refuses (nothing sent) if it does; that check is a point-in-time read, not a transaction lock. The current fixture selection is not changed; the programmer is not cleared (no Clear is sent). Reads back existence, Name and the timing fields that were given; the store step and the read-back are reported separately. Stored fixture values (attribute data) are NOT verified; that needs gma3_cue_contents (FR-10). The mutation lock orders only this server's own mutations; it does not isolate the operation from another console operator or another client.
| Name | Required | Description | Default |
|---|---|---|---|
| cue | Yes | One cue number, fractional allowed (2, 2.5, "10.001"; max three decimals). Ranges (Thru, +) are rejected. | |
| fade | No | Cue (in) fade time in seconds; 0 is a value. Part property CueInFade. | |
| mode | Yes | create: refuse if the part exists. merge: /Merge. overwrite: /Overwrite. Exactly one mode. | |
| name | No | Part name. Names must not contain any of \ " $ & * ? , . ; ^ { } | ~ (the console strips them) and are trimmed; they are set via the Name property of the part after the store. | |
| part | Yes | Part number 0..999. 0 is the cue's main part (always exists once the cue exists); mode create therefore refuses part 0 of an existing cue. | |
| delay | No | Cue (in) delay time in seconds; 0 is a value. Part property CueInDelay. | |
| verify | No | Read the result back after the mutation (default true). Verification is reported separately from the mutation steps. | |
| out_fade | No | Out fade in seconds (dimmers going down); 0 is a value. Part property CueOutFade. | |
| sequence | No | Sequence number (1..99999). Required unless use_selected_sequence is true; exactly one of the two. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| out_delay | No | Out delay in seconds; 0 is a value. Part property CueOutDelay. | |
| use_selected_sequence | No | Act on the console's currently selected sequence. It is resolved to its sequence number first, and the command is sent with that explicit number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does: it discloses the exact command sequence (one Store with /NoConfirmation plus /Merge or /Overwrite, then Set() per field), that the programmer is not cleared and selection is unchanged, that the create check is a non-transactional point-in-time read, and that the mutation lock does not isolate from other clients. These are exactly the side effects and race conditions an agent needs before invoking a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the command form and followed by behavior, risk, and verification in a logical order. It is dense and mostly earns its length for a 12-parameter mutation, though the parenthetical "(part 0 for a cue)" restates part semantics already covered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex unannotated mutation with no output schema, the description covers what is sent, what is deliberately not done (no Clear, no selection change), what is and is not verified, and the concurrency limits. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema states only piecemeal: the fade/delay/out_fade/out_delay to CueInFade/CueInDelay/CueOutFade/CueOutDelay mapping, and the interaction between part 0 and mode=create. It repeats some schema content (part range 1..999) without adding to it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific action and target with the underlying command form ("Store Sequence n Cue c Part p") and immediately explains the part-0 equivalence, which separates it from gma3_store_cue. An agent can distinguish this tool from its store siblings without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when the tool is equivalent to storing a cue (part 0) and explicitly routes attribute-value verification to gma3_cue_contents. It does not explicitly say when to prefer gma3_store_cue or gma3_store_cues over this one, so the sibling routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_cuesStore a list of cues from explicit contentA
Store several cues of one sequence in one call, each from explicit content: a look (fixtures with presets, intensity, attribute values and/or a phaser) or several looks, with an optional name, timing, trigger, command and note (the cue's Note, e.g. scene metadata a plugin reads) per cue; a cue with a command needs no look (stored empty). mode create refuses (nothing sent) when any of the cues exists; merge and overwrite store into existing cues. The store creates the sequence when it does not exist; sequence_name names it: a new name another sequence has is refused before anything is sent, naming the holder (a duplicate makes lookups by name ambiguous; whether the console would store "#2" is not verified for sequences), unless on_name_taken: "allow_suffix"; in the batch form a name an earlier sequence of the call took counts as taken. fade, delay, out_fade, out_delay, trigger and time given for the call are defaults for every cue (a cue's own keys win; a cue with its own trigger takes none of the call's time); each stored cue's TrigType and TrigTime are read back against what it was given. presets {pool, from, to} (instead of cues): one cue per existing preset of the range on fixtures, named after it, with the call's timing and trigger. replace: true deletes the existing cues first (the sequence object, its settings and executor assignments stay, checked). sequence_settings (as gma3_configure_sequence) are applied after the build in the same call; a priority above ltp lists the running sequences it would switch off (Off When Overridden on), and protect_running: true turns that off on them. Built in the console's Preview environment: its own programmer and selection, so nothing is output and the operator's Normal programmer is untouched (checked before and after). Each cue starts from an empty programmer (ClearAll, sent only in Preview), its looks are applied in order (presets, then intensity, then values; a later look wins on shared fixtures), each look is checked in the programmer (preset links, values per fixture and cell), then the cue is stored. A look that did not apply stops the batch before that cue is stored; the cues already stored stay (nothing is undone or retried) and the result lists every cue with its status. A cue's stored values cannot be read back on 2.5.1; the cue's existence, name, timing, trigger, command and note are. A cue stored without a name takes the preset's name. Requires exclusive: true. The result is compact by default: outcome, verification, one line per cue (look details only for a cue that did not match), the observed cycle as its cue order and step intervals, and only the steps that did not succeed (with a count of the rest); detail: true returns every step, every look and every sample. Batch form (sequences): several sequences, each {sequence, sequence_name, mode, fixtures, cues}, each built in its own Preview session with these checks. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| cues | No | 1 to 100 cues, stored in the order given. Required unless sequences or presets is given. | |
| fade | No | Cue in fade, seconds (Part 0 CueInFade). | |
| mode | No | Required (per sequence or for the whole batch). | |
| time | No | Trigger time in seconds (TrigTime). | |
| delay | No | Cue in delay, seconds. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | ||
| presets | No | One cue per existing preset of the range on fixtures, numbered from first_cue, named after the preset (instead of cues). | |
| replace | No | Delete every existing cue first, then store (mode create); the sequence and its executor assignments stay. | |
| trigger | No | go, time (needs time), follow (optional time), sound, bpm. | |
| fixtures | No | Default target for looks that do not name their own fixtures. | |
| out_fade | No | Out fade, seconds. | |
| sequence | No | Sequence number. Required unless sequences is given. | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| exclusive | No | Required (true). | |
| first_cue | No | With presets: the first cue number (default 1). | |
| out_delay | No | Out delay, seconds. | |
| sequences | No | Batch form: several sequences, each {sequence, sequence_name, mode, fixtures, cues}. | |
| on_name_taken | No | When another sequence has sequence_name: refuse (default, nothing is sent) or allow_suffix (store anyway). | |
| sequence_name | No | ||
| protect_running | No | With a priority above ltp: turn Off When Overridden off on the running sequences the override would switch off (default false: they are listed in a warning). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| sequence_settings | No | Sequence settings applied after the build, as gma3_configure_sequence takes them (priority, off_when_overridden, wrap_around, ...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so in detail: exclusive: true is required, everything is built in the console's Preview environment so nothing is output and the operator's programmer is untouched, and nothing is undone or retried on a failed look. It also discloses the 2.5.1 limitation that stored values cannot be read back, and what verification does cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is valuable but the form is a single comma-and-semicolon-chained wall of prose with no paragraphing or bullets, which makes it hard to scan for the one clause that matters. Portions repeat, e.g. the batch form is introduced twice ('Batch form (sequences): several sequences...' and 'Batch form: give the list instead...').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter tool with deep nesting and no output schema, the description covers the environment, failure and partial-success semantics, the default cascade, the batch-vs-single relationship, and the return shape (compact by default, detail: true for every step). Nothing an agent needs in order to call it correctly is left out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 91%, so the baseline is 3, but the description adds genuinely new meaning: fade/delay/out_fade/out_delay/trigger/time on the call are defaults that a cue's own keys override, and a cue with its own trigger takes none of the call's time. It also explains on_name_taken's refusal-before-send behaviour and that sequence_settings are applied after the build.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource plus the scope that separates it from the singular sibling: 'Store several cues of one sequence in one call.' It then defines exactly what a cue is made of (looks, presets, values, phaser, command, note), so an agent knows the tool's job without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage conditions are implied rather than stated: mode create refuses existing cues while merge/overwrite store into them, presets is offered 'instead of cues', and the batch form is described as an alternative to the single object. What is missing is explicit routing against the many siblings — it never says when to prefer gma3_store_cue, gma3_edit_cues or gma3_store_cue_part.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_groupStore a group with an explicit selection gridA
Create or overwrite Group from a fixture list with explicit selection-grid cells. The cells are the order: the console stores a group in patch order and MAtricks, phasers and At a Thru b distribute along the grid, not along the list. Give either items ([{fixture, x, y, z}]) or an arrangement helper that expands into such a list: row (along one axis), rectangle (row by row, optional serpentine), mirror (left and right halves listed outside-in, right[i] mirrors left[i], optional centre gap), rows (one row per list, each spread over width cells). preview: true returns the expanded list, bounds, gaps and shared cells without sending anything. Rules: duplicate fixtures are refused (the console silently ignores a second selection); shared cells are refused unless allow_shared_cells: true; gaps and offsets are kept (preserve_grid_positions, default true; false lets a recall at the origin compact them); a fixture and its own cells (501, 501.1) are separate items; missing fixtures are refused. An existing group needs overwrite: true (its name is kept unless name is given); a locked group is refused. A name another group already has is refused before anything is sent, naming the holder (the pool's names are read once per call, compared case-insensitively; a duplicate makes lookups by name ambiguous, and whether the console would store "#2" is not verified for groups); on_name_taken: refuse (default) | allow_suffix (store anyway; a "#" read-back is a warning, not a mismatch). In the batch form a name an earlier group of the call was stored under counts as taken. Requires exclusive: true (not for preview): the tool clears the console's fixture selection (programmer values are kept), selects each fixture after its own 'Grid x/y/z' command, checks that the selection is exactly the plan before 'Store Group', sets PreserveGridPositions and the name, then (verify, default true) reads the stored group back and recalls it at Grid 0/0/0 to check order and cells (a one-fixture group is recalled at the cursor, so its recall checks the fixture and the read-back its cell), and finally clears the selection and returns the cursor to 0/0/0. Grid cells are not physical stage positions. Needs bridge 0.21.0. rows: rows of different lengths spread over one width (align spread, start or center); ranges run in their own direction ("402.36 Thru 402.1"). Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Group name (a new group is otherwise named by the console). | |
| group | No | Group number (1-9999). Required unless groups is given. | |
| items | No | Explicit list; each fixture once. The cells define the order distributions follow (the console stores the group in patch order). | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| groups | No | Batch form: several groups, each {group, name, items | arrangement, overwrite, ...}, stored one after the other. | |
| verify | No | Read back and recall-check the stored group (default true). | |
| preview | No | Only expand, analyse and check; send nothing (default false). | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| exclusive | No | Required (true) unless preview: nobody else uses the console's selection while the tool runs. | |
| overwrite | No | Replace an existing group (default false: refuse). | |
| arrangement | No | Helper that expands into the explicit list (see preview). | |
| on_name_taken | No | When another group has the name: refuse (default, nothing is sent) or allow_suffix (store anyway). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| allow_shared_cells | No | Allow two fixtures in one cell (default false: refuse). | |
| preserve_grid_positions | No | Store with PreserveGridPositions (default true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does so in detail: it discloses that exclusive mode clears the console's fixture selection while keeping programmer values, selects fixtures, checks the plan before storing, reads back and recalls for verification, then clears selection and returns the cursor to 0/0/0. It also lists refusal conditions, overwrite and name-collision behavior, and the bridge version prerequisite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and covers necessary complexity, but it is a single very dense paragraph with long run-on sentences. It is appropriately sized for a 15-parameter tool, yet it would be easier to scan if structured into shorter sections or bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, including batch operation, multiple arrangement forms, verification, preview, and no output schema, the description is complete enough for an agent to call it correctly. It covers prerequisites, side effects, failure modes, batch ordering, and partial return behavior such as preview output and one-line-per-item results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema: it explains why cell order matters, how arrangement helpers expand, how duplicate fixtures and shared cells are handled, and how batch arguments act as defaults. Some parameters such as data_pool and stop_on_failure are left largely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Create or overwrite Group <n> from a fixture list with explicit selection-grid cells." It also explains the distinguishing concept that the cells define the stored order, which separates it from generic group or selection tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for using items versus arrangement helpers, preview mode, overwrite mode, and the batch form. It does not explicitly compare against sibling tools such as gma3_selection_grid or gma3_place_fixtures, so it falls short of full when-to-use-vs-alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_layoutCreate or update a layoutA
Create a new empty layout or update only supplied layout fields in an explicit data pool. Create refuses an occupied number; names are checked against the pool. Sends Store Layout n /NoConfirmation only for create, then one set request per supplied field, followed by objects read-back. It never deletes or rebuilds elements. Canvas coordinates and dimensions use integer layout units; position/size are Int16, view coordinates Int32, view scale a positive ratio (0.8 = 80%; console read-back displays percent). Verifies existence and supplied fields, not rendered appearance. Does not select fixtures, clear programmer values, invoke layout elements, or execute assigned macros or sequences. Uses existing bridge operations without Lua, OSC fallback or automatic replay. Preview reads and validates without mutations. Mutations are serialised within this server, without isolation from another operator or client. Every property write requires read-back; uncertain writes stop the plan and require inspection before retrying. Layout Viewer window setup, grid and fit settings are outside this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| name | No | ||
| note | No | ||
| layout | Yes | ||
| view_x | No | ||
| view_y | No | ||
| markers | No | ||
| preview | No | ||
| canvas_x | No | ||
| canvas_y | No | ||
| data_pool | Yes | ||
| view_scale | No | ||
| canvas_width | No | ||
| value_colors | No | ||
| canvas_height | No | ||
| view_position_active | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so thoroughly: the confirmation-free command only on create, one set request per supplied field, mandatory read-back after every property write, abort-and-inspect on uncertain writes, name/occupancy checks, and no fallback via Lua or OSC. It also discloses that mutations are only serialised within this server and not isolated from another operator, which is exactly the caveat an agent needs before writing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first clause and subsequent sentences are dense but non-redundant, each covering a distinct constraint (units, verification scope, exclusions, fallbacks, concurrency). Some sentences are overloaded run-ons that would read better as short bullets, but nothing is wasted filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter mutation tool with no annotations and no output schema, the description covers safety, units, verification and concurrency well. It stops short of explaining the boolean options or what the read-back actually returns, which is a real gap when no output schema exists to define the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 16 parameters, so the description must supply meaning, and it does for units and ranges: canvas position/size are Int16 layout units, view coordinates Int32, and view_scale is a positive ratio where 0.8 means 80% with percent shown on read-back. However, the booleans (markers, value_colors, view_position_active) and name/note semantics are never explained, leaving roughly half the parameters understood only by name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb pair and resource ('Create a new empty layout or update only supplied layout fields') and scopes it to an explicit data pool. The mode enum and the statement that it 'never deletes or rebuilds elements' separate it from layout element editing and read-only layout listing. An agent can tell what this mutates without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operating context: create refuses an occupied number, preview reads and validates without mutations, and Layout Viewer window/grid/fit setup is explicitly out of scope. What it lacks is any named sibling routing (e.g. gma3_layouts for reads vs gma3_edit_layout_elements for element work), so the agent must infer that boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_macroCreate a macro or replace or append its lines (never runs it)A
mode (required): create (refuses an existing macro), replace (removes the existing lines first, keeping the macro, its appearance and its executor assignments) or append (adds after the existing lines). lines: [{command, wait (seconds, "follow" or "go" = a manual wait until the next Go+), enabled, add_to_cmdline, execute, name, note, raw}]; name, note, cli of the macro. Before anything is sent the references in each line are checked (single objects named with full keywords; a Store earlier in the macro counts as creating its object); raw: true stores a line unchecked. Refuses a locked or running macro, and a name another macro has (naming the holder; the pool's names are read once per call, compared case-insensitively; a duplicate makes lookups by name ambiguous, and whether the console would store "#2" is not verified for macros): on_name_taken refuse (default) | allow_suffix (store anyway); in the batch form a name an earlier macro of the call was stored under counts as taken. Sends Store Macro N, Delete/Store Macro N.L and one set per property; NEVER runs the macro. The console rewrites command text outside quotes (trims, collapses spaces, expands abbreviated keywords): every line is read back and compared exactly; a rewritten line is a mismatch unless accept_console_form: true (it is reported in rewritten either way). Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| cli | No | ||
| mode | No | Required (per macro or for the whole batch). | |
| name | No | ||
| note | No | ||
| lines | No | Required unless macros is given. | |
| macro | No | Macro number. Required unless macros is given. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| macros | No | Batch form: several macros, each {macro, mode, lines, name, note, cli}; mode may be given once for all. | |
| verify | No | ||
| preview | No | ||
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| on_name_taken | No | When another macro has the name: refuse (default, nothing is sent) or allow_suffix (store anyway). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| accept_console_form | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: pre-send reference checks, raw bypass, refusal conditions, case-insensitive name pool read per call, batch ordering with no retries and stop-on-unknown-outcome, and per-item outcomes. The console's text rewriting plus read-back comparison and the accept_console_form escape hatch is exactly the kind of non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with mode, which is the right choice, but the rest is a dense run-on with parenthetical nesting that is hard to parse on first read. Length is defensible for the complexity, yet several sentences pack three or four distinct rules each without structural breaks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 14-parameter, batch-capable, no-output-schema tool gets thorough coverage of refusal, verification and batch behavior. The omission of preview/verify/cli semantics leaves some gaps, but nothing an agent needs to avoid a destructive mistake is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 57% with 14 parameters, and the description adds real meaning for mode, line fields (wait 'follow'/'go', raw, enabled, add_to_cmdline), on_name_taken, accept_console_form and batch-default inheritance. It leaves verify, preview, cli, macro and data_pool largely or entirely unexplained, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (store a macro / replace or append its lines) and explicitly scopes out running it ('NEVER runs the macro'), which cleanly separates it from gma3_run_macro, gma3_edit_macro_line and gma3_macros.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use semantics for each mode (create refuses an existing macro, replace keeps appearance/executor assignments, append adds after existing lines) and when it refuses (locked/running macro, duplicate name). It never names the sibling to use instead for running or single-line edits, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_presetStore the programmer into a preset with explicit storage rulesA
Store the current programmer content into Preset .. Prepare the programmer first (gma3_select, gma3_set_attribute/color/position, At Preset ... for embedding); this tool only stores. Explicit rules: mode selective | global | universal (never the pool default: a default store resolves a mode conflict silently and can keep one fixture's values), or force global | universal for a forced conversion of an existing preset (removes its selective, or selective and global, data; needs existing: "merge"). existing: refuse (default) | merge | overwrite. fixtures: the scope; every active programmer value must belong to these fixtures (a fixture includes its cells) and each must have one; attributes (optional): exact attribute filter (an activation group, e.g. all ColorRGB_*, is activated as a whole); layers (default [absolute]; also relative, fade, delay, phaser) must cover every value's layers. Anything else in the programmer is refused, because the console stores every active value regardless of the selection. Also refused: universal mode with values that differ between fixtures, embed without a preset reference in the programmer, attributes a feature-group pool's input filter would drop (store into an All pool 21-25 or pass input_filter: false), a locked preset, and a name another preset of the same pool already has (the console keeps names unique within a pool and would store it as "#2"; the pool's names are read once per pool and call, compared case-insensitively, the holder is named, and storing a preset again under its own name is no collision): on_name_taken: refuse (default) | allow_suffix (store anyway; a "#" read-back is expected, with a warning, not a mismatch). embed (default false) stores references to the presets active in the programmer; matricks (default false) the selection MAtricks; keep_activation (default false); input_filter overrides the operator default for this store only. The command always carries /Programmer /Active, the mode, /Merge or /Overwrite, /Embed, /MAtricks, /KeepActivation and /NoConfirmation, so the operator's store preferences decide nothing and are not changed (read before and after); Look cannot be overridden per store, so the tool refuses while the operator's StoreLook preference is on. Requires exclusive: true (not for preview). verify (default true) reads the stored rows back and checks each programmer value by mode, value, layers and reference, unexpected content, the preset's mode, dependencies (recursively; incomplete inspection is reported) and that the store preferences are unchanged. Needs bridge 0.22.0. Batch form (presets): each preset from explicit content instead of the programmer: fixtures (ids or ranges: the target and the scope) with presets, intensity and/or values, or looks. They are built one by one in the console's Preview environment (its own programmer; the operator's Normal programmer and the output are not touched, checked before and after): from an empty Preview programmer, each look is checked right after its commands, then this tool's store, checks and read-back run there. A preset that fails does not stop the others; a name refused as taken fails only its preset, and a name an earlier preset of the call was stored under counts as taken. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Preset mode the data is stored in. | |
| name | No | Preset name. | |
| embed | No | Store references to the presets active in the programmer (default false: plain values). | |
| force | No | Forced conversion of an existing preset instead of mode (needs existing: merge). | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| layers | No | Data layers the values may carry (default [absolute]). | |
| preset | No | Target preset "<pool>.<number>", e.g. "4.12" or "23.1". Required unless presets is given. | |
| verify | No | Read back and check the stored content (default true). | |
| presets | No | Batch form: several presets, each from explicit content (built in Preview; the programmer is not stored). | |
| preview | No | Only read, check and return the planned command (default false). | |
| existing | No | What to do when the preset exists (default refuse). | |
| fixtures | No | Scope: fixture ids or "a Thru b" ranges; every programmer value must belong to them. Required unless presets is given (it is then the default target of every preset's content). | |
| matricks | No | Store the selection MAtricks into the preset (default false). | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| exclusive | No | Required (true) unless preview: nobody else changes the programmer while the tool runs. | |
| attributes | No | Exact attribute filter: the programmer may hold only these attributes, and each must be present. | |
| input_filter | No | Override the operator's preset input-filter default for this store only. | |
| on_name_taken | No | When another preset of the pool has the name: refuse (default, nothing is sent) or allow_suffix (the console stores "<name>#2"). | |
| keep_activation | No | Keep the stored values active in the programmer (default false). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden and does so thoroughly: it lists the exact command flags appended (/Programmer /Active, mode, /Merge or /Overwrite, /Embed, /MAtricks, /KeepActivation, /NoConfirmation), states that operator store preferences are neither consulted nor changed, that exclusive: true is required, that bridge 0.22.0 is a prerequisite, and that verify read-back checks values, layers, references, dependencies recursively and preference invariance. Destructive consequences of force (removes selective, or selective and global data) and overwrite/merge semantics are spelled out rather than left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is well front-loaded, but the remainder is a single dense paragraph of several hundred words with inline parentheticals carrying critical constraints (name-collision comparison rules, preview-programmer semantics, batch ordering). Everything roughly earns its place, yet the lack of sentence-level structure or bullets makes key rules easy to miss on a single read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter tool with no annotations and no output schema, the description covers what an agent needs: prerequisites, all refusal cases, mutation semantics, exclusivity, verification behaviour, batch isolation in the Preview programmer, per-item failure handling and stop_on_failure interaction. Nothing material for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 100% the baseline is 3, but the description adds meaning the schema does not: mode must never be left to the pool default because a default store resolves a mode conflict silently, attributes act as an activation group taken as a whole, layers "must cover every value's layers", and force requires existing: merge. It does not restate trivialities, though its parameter discussion is buried in prose rather than mapped cleanly to argument names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb, resource and destination: "Store the current programmer content into Preset <pool>.<number>", and immediately scopes it ("this tool only stores") so it is distinguishable from gma3_apply_preset, gma3_store_cue and gma3_store_group. The distinction between the single form and the batch form (built in Preview from explicit content) is also stated, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions are given (prepare the programmer first via gma3_select, gma3_set_attribute/color/position, At Preset for embedding), along with when-not guidance (refuses when the operator's StoreLook preference is on; refuses on locked presets, name collisions, universal mode with differing fixture values). Alternatives are named for the specific failure modes, e.g. store into an All pool 21-25 or pass input_filter: false when a feature-group pool's input filter would drop attributes, and on_name_taken: allow_suffix when a suffix store is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_recipe_cuesWrite the recipe lines of many cuesA
Write the standard recipe lines of up to 100 cue parts of one sequence in one call (at most 200 lines per part, 500 per call; a larger build is several calls). cues: [{cue, part? (default 0), name?, note?, lines: [{selection: group, values: "N.M" preset, matricks?, name?, enabled?, selection_mode?, x?/y?/z?: {wings, blocks, groups, width, shift, shuffle, select, fade/delay/phase/speed: {from, to}}}]}]. mode is required: replace deletes every line of the part first (refused while the part holds phaser lines), append adds after the existing ones. The cues must exist (gma3_store_cues creates them); name is the cue's name (Part 0), note its Note. Once for the whole call, before anything is sent: every cue part is read and every group, preset and MAtricks a line names must be in the show. Each line is written as gma3_edit_recipe adds one (Assign Group, Preset and MAtricks At the line, set for the other fields and the per-line MAtricks columns), and every reply is checked. Batch form: each cue part is an item: its steps stop at its first failure, the parts already written stay (nothing is undone or retried), an unknown outcome stops the rest, and its read-back is compact: the line count, then only mismatches (every field written, earlier lines unchanged on append, name, note). The console cooks each written line by itself (merge low priority). cook: a gma3_cook_recipes mode cooks every part afterwards, only when every part was written and matched (replace_uncooked and verify_cook as in gma3_cook_recipes). preview: true checks and returns the plan (detail: true every request). Phaser recipe lines are not written. Needs bridge 0.24.0.
| Name | Required | Description | Default |
|---|---|---|---|
| cook | No | Cook every written part with this gma3_cook_recipes mode afterwards. | |
| cues | Yes | Cue parts and their lines, in order. | |
| mode | Yes | ||
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| preview | No | ||
| sequence | Yes | ||
| verify_cook | No | With cook: read every cooked part back (default true). | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). | |
| replace_uncooked | No | With cook merge/overwrite: allow replacing or deleting uncooked values (default false: that part's cook is refused). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so: hard limits (200 lines/part, 500/call), pre-flight validation of every group/preset/MAtricks, per-item failure semantics (partial writes persist, no undo or retry, unknown outcome halts the rest), compact read-back format, and cook only when every part was written and matched. It even declares the bridge version requirement, which is exactly the kind of constraint an agent cannot infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, limits and mode semantics are front-loaded in the first two sentences, so an agent gets the essentials immediately. The remainder is a dense single paragraph mixing an inline JSON sketch with failure and cook semantics; it earns its length given the tool's complexity but would scan far better as separated clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter mutation tool with no annotations and no output schema, the description covers everything an agent needs: what is written, ordering, limits, atomicity and partial-failure behavior, what the read-back reports, and when cooking happens. Nothing material about invoking it correctly is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description compensates well: it explains the cues item shape, part default 0, name/note landing on Part 0, the 'N.M' preset string form, the mode enum semantics, and the interaction of cook with replace_uncooked and verify_cook. Some nested MAtricks fields are only covered by the schema, but the description defers to gma3_configure_matricks for their shape rather than leaving them opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: writes 'the standard recipe lines of up to 100 cue parts of one sequence in one call'. It differentiates itself from siblings by naming gma3_edit_recipe (one line at a time), gma3_store_cues (creates the cues), gma3_cook_recipes and gma3_configure_matricks, so an agent can tell exactly which tool writes many recipe lines at once.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions and exclusions: the cues must already exist, phaser recipe lines are not written, replace is refused while the part holds phaser lines, and workloads above the limits must be split across calls. It implicitly routes single-line work to gma3_edit_recipe but never states that trade-off explicitly, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_store_tagCreate or rename tagsA
Create a tag (Store Tag n "name") or rename it (if_exists: "rename"), then read it back. An existing number is refused unless if_exists is rename (Store on an existing tag changes nothing). Names follow the rules of every object name: characters the console removes (a comma among them) are refused before anything is sent. Tags are show-wide. Delete with gma3_delete_tag. Needs bridge 0.36.0. Batch form: give the list instead of the single object's fields; the other arguments are defaults for every item (an item's own fields win). Each item gets the single form's checks and read-back, and its own outcome; items run in order, nothing is retried, an unknown outcome stops the rest, and the result has one line per item (detail: true for every step).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Tag number (1-9999). Required unless tags is given. | |
| name | No | The name. | |
| tags | No | Batch form: several tags, each {tag, name}. | |
| detail | No | Return every item's full result with its steps (default false: one line per item). | |
| verify | No | Read back (default true). | |
| if_exists | No | When the number holds a tag: refuse (default) or rename it to name. | |
| stop_on_failure | No | Batch form: stop at the first item that does not succeed (default false: independent items go on; an item on an object an earlier item failed on is skipped either way). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses that existing numbers are refused by default, that name characters stripped by the console are rejected client-side before any request, that read-back happens by default, that tags are show-wide, and that a minimum bridge version (0.36.0) is required. Batch behavior is spelled out in detail — ordering, no retries, unknown-outcome abort, per-item independent outcomes, and per-item result lines.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and mutation semantics before the batch caveats, and nearly every clause carries information. It is dense to the point of being hard to scan — the whole batch contract is packed into one long paragraph with parenthetical asides rather than being broken out.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema and a dual single/batch surface, the description covers the mutation, validation, version gate, and batch result shape. The remaining gap is the single-form return value and error surface, which is left implicit while only the batch result format is described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema baseline is already strong and the description only needs to add meaning. It does add the non-obvious precedence rule the schema cannot express: when the batch list is used, the other arguments become defaults for every item and an item's own fields win. That is real added value; the rest (verify, detail, if_exists) largely restates schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a tag', 'rename it'), quotes the underlying console syntax (Store Tag n "name"), and explicitly separates create from rename via if_exists. It also names the sibling responsible for the opposite operation ('Delete with gma3_delete_tag'), so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear selection logic between the two modes (refuse vs rename on an existing number) and hands off deletion to a named sibling. It does not, however, differentiate itself from the other tag-related siblings in the same family (gma3_assign_tag, gma3_configure_tag, gma3_tags), so an agent choosing between those still has to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_tagsRead tags and the objects that carry themA
Read-only. The show's tags (one show-wide pool): number, name, type (None / Kill Instant / Kill Delayed), Forward Commands, pool action, appearance, note, reference count, and the objects that carry each tag (class, name, data pool, address, protect), from the console's reverse lookup. Answers "which sequences are tagged Encore" in one call: tags: ["Encore"], class: "Sequence". Tags are paged (offset/limit, default 100) and so are each tag's objects (references_offset/references_limit, default 200), with totals and incomplete flags. With of: "" it reads the tags given objects carry instead (a cue's tags are on its Part 0). gma3_get_object, gma3_objects and gma3_list_children also return an object's TAGS as [{tag, name, protect}]. Needs bridge 0.36.0.
| Name | Required | Description | Default |
|---|---|---|---|
| of | No | Read the tags these objects carry instead ("Sequence 1 Thru 10", "Sequence 5 Cue 2", "Macro 3.1"). | |
| to | No | Highest tag number to read. | |
| from | No | Lowest tag number to read. | |
| tags | No | Tags to read, by number or exact name (default every tag). | |
| class | No | Only objects of this class: Sequence, Group, Macro, MacroLine, Part (a cue), Preset, Tag. | |
| limit | No | Tags per page (default 100, at most 1000). | |
| offset | No | Tags to skip (paging; default 0). | |
| data_pool | No | Data pool number (DataPool n). Default: the current data pool, as without this parameter. | |
| references | No | List the objects that carry each tag (default true). | |
| references_limit | No | Objects per tag (default 200, at most 2000). | |
| references_offset | No | Objects to skip in each tag's list (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it states read-only behavior, enumerates returned tag and reference fields, explains paging defaults and incomplete flags, documents reverse lookup semantics, and notes the bridge version requirement. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core purpose and read-only nature. It avoids filler, though the single long paragraph could be split for easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema and no annotations, the description is complete: it covers both lookup directions, returned fields, pagination, reference-list paging, incomplete flags, related tools, and bridge compatibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; however, the description adds useful cross-parameter meaning by showing the tags + class combination for a concrete query and explaining that a cue's tags live on its Part 0 when using 'of'. The paging defaults are repeated from the schema but still reinforce behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading the show's tags, with exact scope (one show-wide pool) and return fields. It distinguishes the primary tag-to-objects lookup from the reverse 'of:' mode and from sibling tools that only return an object's tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case ('which sequences are tagged Encore') and notes that gma3_get_object, gma3_objects, and gma3_list_children also return object tags, which helps route between tools. However, it does not explicitly state when not to use this tool or fully rank it against those alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_tempo_sync_statusStatus of the tempo-sync pluginA
Read-only. Whether the tempo-sync plugin (bdstark/gma3-beat-sync, a separate console plugin that follows an external tempo source) is imported in this show and running, and what it publishes: state, tempo, beat, phase, peers, playing, drift, frame timing, the last action (ok / failed / uncertain), problems and errors; plus its configuration (master, quantum, actions, resync list, ...). Running means its State is not "not running" and its status was written within 2 s by the console clock (after a show load it is stopped and its saved values are stale). It says plainly when the plugin is not imported or not running and how to start it. Needs bridge 0.31.0 (0.35.0 for the clock).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so: it declares read-only, defines exactly what 'running' means (State not 'not running' AND status written within 2 s of console time), and warns that saved values go stale after a show load. It also lists the returned fields, the last-action outcomes (ok / failed / uncertain), and the minimum bridge versions (0.31.0, 0.35.0 for the clock).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with 'Read-only' and the core question, then built out with the running definition and return content; every clause is substantive. It is dense and slightly ungainly as a single run-on sentence with parentheticals, which costs a point, but little is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns and it does: field inventory, last-action outcomes, problems/errors, and configuration keys. It also covers failure modes (not imported, not running), remediation (how to start it), and version prerequisites, which is everything an agent needs to call and interpret this zero-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description cannot add or omit parameter meaning here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (the tempo-sync plugin, identified precisely as bdstark/gma3-beat-sync) and a specific operation (report whether it is imported and running, plus what it publishes). The read-only framing plus the enumeration of published state, tempo, beat, phase, peers, drift, and config distinguishes it from the sibling configuration tool gma3_configure_tempo_sync and from gma3_observe_tempo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context of use is implied clearly by the name and the 'read-only' framing, but there is no explicit 'use this when X, use gma3_configure_tempo_sync when Y' routing statement. The description does add useful operational guidance, such as what happens after a show load, but that is behavior rather than tool selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_test_osc_inputTest that OSC input worksA
Proves that the console receives OSC commands, with no shell: sends /[prefix/]cmd SetUserVariable "McpOscTest" "" to 127.0.0.1 on the port of each line with Receive Command (or line), then reads the variable back through the bridge. Matched when the console ran it. The variable is deleted afterwards; refused when it already exists or input is off. Needs bridge 0.33.0 (and 0.31.0's variable ops).
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | Only this OSC line (default: every line with Receive Command). | |
| timeout_ms | No | How long to wait for each command (200-5000, default 1500). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden and does so well: it discloses the exact OSC message, the localhost target and per-line port selection, the nonce-based matching criterion, the cleanup (variable deleted afterwards), the refusal cases, and the minimum bridge version. An agent knows the side effects and failure modes before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with what the tool proves and how, then matching, cleanup, and prerequisites in logical order. The heavy parenthetical nesting in the first sentence makes it slightly harder to scan, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter diagnostic with no output schema, the description covers the mechanism, the success criterion ('matched when the console ran it'), cleanup, refusal cases, and version requirements. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema. The description echoes the `line` semantics (port of each line with Receive Command, or a single line) but adds no format or behavioral detail for `timeout_ms` beyond what the schema states, so it earns the baseline rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and resource: proving the console receives OSC by sending a SetUserVariable command and reading the variable back through the bridge. This clearly distinguishes it from the sibling gma3_osc / gma3_configure_osc tools, which configure or send OSC rather than self-testing the input path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions and refusal conditions: it is refused when the variable already exists or OSC input is off, and it requires bridge 0.33.0 (plus 0.31.0's variable ops). It does not explicitly route the agent to a sibling when the test is unnecessary or fails, so it falls short of naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_timecodesRead the timecode pool or one timecode showA
Read-only. Without timecode: the timecode pool. With timecode: name, playing, cursor and duration (seconds), the source (tc_slot internal / slot N, offset, auto start/stop), playback settings (loop mode and count, switch off, assert previous events), recording settings (the armed state is not readable; these tools never record), and every track group, track (its target) and event: time in seconds and as H:MM:SS.sss (or H:MM:SS:FF with fps 24/25/30/60), exact raw time, action (go, goto, off, flash_press, ...), cue. problems names tracks without a target, Goto events without a cue and unmodelled tokens. slots: true lists the 16 timecode slots (their time only: external reception is not readable). Needs bridge 0.25.0.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| slots | No | ||
| timecode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it declares read-only, states that armed state and external reception are not readable, asserts these tools never record, and names the required bridge version. It omits error behavior and any size/pagination traits, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded and wastes few words, but the bulk arrives as one enormous run-on sentence packed with parentheticals that is hard to parse. A short bulleted breakdown of returned fields would read much better.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex read tool with no output schema and no annotations, the description does the heavy lifting by enumerating the returned fields (source, playback/recording settings, track groups, events, raw time, actions) and the version prerequisite. Only failure/pagination behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: timecode selects one show, slots:true lists the 16 slots, and fps governs the H:MM:SS:FF format at 24/25/30/60. The numeric type of timecode and its value domain remain only loosely implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (read) and resource (timecode pool or one timecode show), and the two operating modes are unambiguous. It is clearly a read tool distinct from the build/transport siblings, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without timecode: the timecode pool. With timecode: ...' gives a clear condition for selecting each mode, plus the useful caveat that slots:true lists the 16 slots. It stops short of routing the agent away from gma3_build_timecode or gma3_timecode_transport, so no explicit alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_timecode_transportPlay, stop, rewind or seek a timecode show and observe itB
PLAYS when asked and OBSERVES OVER TIME on the server side (no Lua loop needed): play sends Go Timecode N (from the cursor, internal time; with a timecode slot the time comes from the slot), stop sends Off (playbacks it started keep running unless switch_off is off), rewind sends Top, seek writes the cursor (to: a time as in gma3_build_timecode). Recording is not offered. Then samples the cursor and the target sequences for observe_seconds (play: default 5) and, for play, checks every event the cursor crossed against the sequences' observed cue changes in order (goto -> that cue, go -> the next cue, off -> off, presses -> running; others are listed as not predictable). The result separates dispatched from observed.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| fps | No | ||
| action | Yes | ||
| timecode | Yes | ||
| interval_ms | No | ||
| observe_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it names the underlying commands sent (Go Timecode N, Off, Top), discloses that stop leaves playbacks it started running, discloses the sampling window and default of 5 seconds, and explains that results separate dispatched from observed. The remaining gap is that it references a 'switch_off' setting that does not appear in the input schema, leaving the stop semantics unverifiable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Nearly all content earns its place, but it is delivered as one dense run-on with deeply nested parentheses, which makes it hard to parse on first read. The parenthetical 'no Lua loop needed' and the phrase 'PLAYS when asked' are filler that could be cut or moved into a clearer per-action list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, annotation-free, output-schema-free mutation-plus-observation tool, the description covers a lot: per-action dispatch, the observation model, and how events are matched against cue changes. But it never explains the required `timecode` identifier, leaves three parameters undocumented, and does not describe the shape of the returned dispatched-vs-observed result, which matters since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all parameter meaning, and it only partially does. It explains the four action values, the `to` target (as in gma3_build_timecode) and observe_seconds' default, but `timecode` (a required numeric identifier) is never clarified, and `fps` and `interval_ms` are completely unaddressed — `fps` is especially ambiguous since it also appears inside the `to` object variant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb set (play/stop/rewind/seek) on a specific resource (a timecode show) plus a server-side observation behavior, which maps cleanly onto the four enum values in the schema. It also implicitly distinguishes itself from gma3_build_timecode by referencing it for time syntax and by stating 'Recording is not offered'. It falls short of 5 because the opening clause 'PLAYS when asked' is odd phrasing and the true scope (dispatch + observe) is buried mid-sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through action semantics: play starts from the cursor, seek writes the cursor, stop leaves started playbacks running unless switch_off is off, and recording is explicitly out of scope. There is no statement of when an agent should reach for this instead of gma3_command, gma3_playback, or gma3_timecodes, nor any precondition such as requiring an existing timecode object.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_typeType text into the consoleA
Type Unicode text as one character event per code point into an EXPLICIT context. Which element receives characters cannot be observed from Lua, so acknowledge_focus: true is always required: you state that the command line (context 'command-line') or a text field (context 'text-field') is focused. 'command-line' is admitted only while the operator has disabled keyboard shortcuts (F10; with shortcuts enabled, characters never reach the command line and nothing is substituted) and is read back from the command line: matched when it shows the text; when it does not within the readback window the step is UNKNOWN and nothing after it runs. 'text-field' cannot be read back (verification unavailable) and must not be followed by PLEASE/Enter in the same sequence. Text is refused while an exclusive long-press is held or a held key's route changed. Text is typed in chunks by the bridge loop with the context rechecked between chunks; it stops with its progress (unknown) when shortcuts are toggled, a route changes or a long-press starts meanwhile. Newlines, tabs and other control characters are refused (up to 256 characters); text NEVER presses Enter, changes focus, opens an editor or toggles shortcuts: commit it with a separate gma3_hardkey PLEASE tap. Same gate and busy rules as gma3_hardkey (input OFF until the operator runs Plugin "gma3_mcp_bridge" "input=keyboard"; commands from every client are [busy] while it types). Nothing is retried or replayed; a character whose dispatch raised is reported as unknown at that position.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text (UTF-8, no control characters, at most 256 characters). | |
| context | Yes | Where the characters are meant to go; validated and read back where possible. | |
| display | No | Display index passed to the console as API context only. It must exist; input is NOT display-scoped on onPC 2.5.1 (no routing, focus or pop-up placement is promised). | |
| interaction | No | Id from gma3_input_interaction acquire. Required for a standalone hold (press). A bounded tap, chord tap, text or sequence may run without one (it owns an interaction for its duration) but must pass the id while this server has one open. | |
| acknowledge_focus | No | Must be true: you state that the named context (command line or a text field) is what currently receives characters; this cannot be observed from Lua. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers rich behavioral context beyond the schema: readback semantics (UNKNOWN when unmatched), chunked typing with context rechecks, refusal conditions (exclusive long-press, changed route, control characters), busy/gate rules, no retry/replay, and per-position unknown reporting. This is unusually complete disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is valuable but front-loaded with dense parenthetical and clause-heavy sentences that pack multiple rules together, making it harder to scan quickly. It is not padded with filler, but the wall-of-text structure is not optimally parsed by an agent skimming for the key constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers preconditions (explicit context, acknowledge_focus), failure modes (UNKNOWN, refusal conditions), interaction with siblings (gma3_hardkey for commit), and gate/busy rules. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: it explains why acknowledge_focus is always required (focus is unobservable from Lua), ties 'command-line' to the F10 shortcuts-disabled precondition, and states 'text-field' cannot be read back. Slight deduction because display and interaction parameters are addressed only via cross-reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (type) and resource (Unicode text as code-point character events into an explicit context), and distinguishes itself from siblings like gma3_hardkey and gma3_keyboard by clarifying it never presses Enter or changes focus. An agent can tell exactly what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use rules: 'text-field' must not be followed by PLEASE/Enter in the same sequence; commit text with a separate gma3_hardkey PLEASE tap; requires acknowledge_focus true; requires the keyboard bridge with input=keyboard. Names the sibling (gma3_hardkey) needed for committing, so alternatives and exclusions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gma3_variablesRead console variables (global and user)A
Read-only. The values and types (integer, double, text) of global and user variables, by name, and every $variable the macros reference (referenced, default when no names are given: each with the macro lines that use it). Variables cannot be listed on grandMA3 2.5.1 (no API enumerates them), so a variable that no macro references is read by its name. With scope both (default), resolvesTo says which one a $reference uses: a user variable shadows a global one. User variables are the bridge's user's. $variables expand in commands sent through gma3_command (outside quotes). Needs bridge 0.31.0.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | Variable names to read (case-sensitive). | |
| scope | No | Which variables (default both). | |
| referenced | No | Also read every $variable the macros reference (default: true when no names are given). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so: it declares read-only semantics, a platform limitation (no API enumerates variables on grandMA3 2.5.1), shadowing behavior ('a user variable shadows a global one') surfaced via resolvesTo, whose user owns user variables, and a minimum bridge version (0.31.0). These are non-obvious operational facts an agent could not get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Nearly every sentence carries information, but the opening sentence is a tangled, comma-spliced fragment ('The values and types ... of global and user variables, by name, and every $variable the macros reference ...') that is harder to parse than it needs to be. The density is justified; the structure and grammar are not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no annotations and no output schema, the description covers return content (values, types, resolvesTo, macro lines), defaults, platform limits, and prerequisites well. It is slightly incomplete on failure behavior — e.g., what happens when a named variable does not exist — which matters for a name-based lookup on a system that cannot enumerate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond it: it explains what `scope: both` actually yields (resolvesTo indicating which namespace a $reference resolves to), the default-when-empty logic for `names`/`referenced`, and that `referenced` results include the macro lines that use each variable. That is genuine semantic value over the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Read ... global and user variables') and even enumerates the returned data (values and types: integer, double, text), so an agent knows exactly what the tool does. It does not explicitly name a sibling (e.g., gma3_set_variable as the write counterpart), though the leading 'Read-only' implicitly separates it from mutation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real usage context: the default resolution of `referenced` when no names are supplied, the fact that variables cannot be enumerated on 2.5.1 so named lookup is required, and the tie-in to `gma3_command` expansion outside quotes. What is missing is an explicit 'use this instead of X' comparison against gma3_set_variable or other variable/object readers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
117 tool updates
v0.1.0- First observed
gma3_apply_preset - First observed
gma3_assign_cell_layout - First observed
gma3_assign_tag - First observed
gma3_assign_to_executor - First observed
gma3_build_chase - First observed
gma3_build_phaser - First observed
gma3_build_timecode - First observed
gma3_clear_programmer - First observed
gma3_command - First observed
gma3_configure_dmx_output - First observed
gma3_configure_executor - First observed
gma3_configure_matricks - First observed
gma3_configure_osc - First observed
gma3_configure_sequence - First observed
gma3_configure_speed_master - First observed
gma3_configure_tag - First observed
gma3_configure_tempo_sync - First observed
gma3_cook_recipes - First observed
gma3_cue_contents - First observed
gma3_cues - First observed
gma3_delete_cue - First observed
gma3_delete_tag - First observed
gma3_dialog - First observed
gma3_dmx - First observed
gma3_dmx_output - First observed
gma3_dump - First observed
gma3_edit_cues - First observed
gma3_edit_layout_elements - First observed
gma3_edit_macro_line - First observed
gma3_edit_recipe - First observed
gma3_executor_configuration - First observed
gma3_executor_settings - First observed
gma3_executors - First observed
gma3_feedback - First observed
gma3_fixture_attributes - First observed
gma3_fixture_output - First observed
gma3_fixture_positions - First observed
gma3_fixtures - First observed
gma3_get_fader - First observed
gma3_get_object - First observed
gma3_goto_cue - First observed
gma3_hardkey - First observed
gma3_hardkeys_release_all - First observed
gma3_hardkeys_status - First observed
gma3_help - First observed
gma3_input_interaction - First observed
gma3_input_sequence - First observed
gma3_keyboard - First observed
gma3_label_executor - First observed
gma3_layout_cells - First observed
gma3_layouts - First observed
gma3_list_children - First observed
gma3_lua - First observed
gma3_lua_api - First observed
gma3_macros - First observed
gma3_matricks - First observed
gma3_objects - First observed
gma3_observe_tempo - First observed
gma3_observe_values - First observed
gma3_osc - First observed
gma3_patch_add - First observed
gma3_patch_import - First observed
gma3_patch_library - First observed
gma3_patch_library_add - First observed
gma3_patch_list - First observed
gma3_patch_move - First observed
gma3_patch_remove - First observed
gma3_patch_remove_type - First observed
gma3_patch_retype - First observed
gma3_patch_set - First observed
gma3_patch_stages - First observed
gma3_patch_type_structure - First observed
gma3_patch_types - First observed
gma3_phaser_release - First observed
gma3_place_fixtures - First observed
gma3_playback - First observed
gma3_pool - First observed
gma3_pool_usage - First observed
gma3_preset - First observed
gma3_programmer - First observed
gma3_recipes - First observed
gma3_release_attributes - First observed
gma3_run_macro - First observed
gma3_save_show - First observed
gma3_select - First observed
gma3_selection_grid - First observed
gma3_sequences - First observed
gma3_set_attribute - First observed
gma3_set_attributes - First observed
gma3_set_color - First observed
gma3_set_cue_timing - First observed
gma3_set_cue_trigger - First observed
gma3_set_fader - First observed
gma3_set_position - First observed
gma3_set_property - First observed
gma3_set_variable - First observed
gma3_show_files - First observed
gma3_speed_master_action - First observed
gma3_speed_masters - First observed
gma3_start_bridge - First observed
gma3_status - First observed
gma3_store_cue - First observed
gma3_store_cue_part - First observed
gma3_store_cues - First observed
gma3_store_group - First observed
gma3_store_layout - First observed
gma3_store_macro - First observed
gma3_store_preset - First observed
gma3_store_recipe_cues - First observed
gma3_store_tag - First observed
gma3_tags - First observed
gma3_tempo_sync_status - First observed
gma3_test_osc_input - First observed
gma3_timecode_transport - First observed
gma3_timecodes - First observed
gma3_type - First observed
gma3_variables
TDQS
Scored across 117 tools
Most tools have a distinct purpose and the descriptions aggressively cross-reference each other (e.g. "use gma3_pool_usage instead of gma3_objects 'Macro Thru'", fallbacks labelled as fallbacks), which rescues a lot. But there are four or five parallel read paths for the same show data (gma3_get_object, gma3_objects, gma3_list_children, gma3_dump, gma3_pool, plus typed readers like gma3_sequences/gma3_cues/gma3_macros) and several overlapping writer families (gma3_set_attribute/set_attributes/set_color/set_position, gma3_store_cue/store_cues/store_cue_part), so an agent must read carefully to avoid misselection.
Everything is snake_case under one gma3_ prefix, with a readable convention: noun names for read-only listings (gma3_sequences, gma3_fixtures, gma3_macros, gma3_tags) and verb_noun for mutations (gma3_store_preset, gma3_configure_executor, gma3_delete_tag). Minor deviations exist (gma3_get_object vs gma3_objects vs gma3_dump, gma3_preset singular for a read tool), but the pattern is predictable.
117 tools is far past any practical ceiling for an agent's tool selection, even granted that grandMA3 is a genuinely huge domain (patching, cues, phasers, macros, timecode, DMX output, OSC, layouts, tags). Several earn their place, but there is real duplication (dump vs get_object, command/lua fallbacks duplicating structured tools, multiple store_cue variants) that could be consolidated. The surface should be split into sub-servers or grouped namespaces.
Coverage is unusually deep: full lifecycle for cues, presets, macros, tags, timecode, layouts, patch, fixtures/positions, DMX/OSC configuration and show files, with read-back and rollback semantics. Gaps are minor but present: no dedicated delete/rename for sequences, groups or presets (only via the raw gma3_command fallback or gma3_set_property), and no layout or layout-element deletion.
Maintenance
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Remote MCP server for Web3TV creators — manage your account over MCP.
Connect any MCP client to MetaTrader 4/5 to read prices, manage positions, and place trades.
Secure and manage MCP servers through the Speakeasy AI Control Plane from your agent.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that lets AI assistants control grandMA2 lighting consoles via Telnet, exposing 41 high-level tools for cue management, fixture control, preset management, executor control, macro editing, appearance assignment, bulk operations, console state queries, show file management, read-back verification, and music show workflows.10017Apache 2.0
- AlicenseNot gradedqualityDmaintenanceConnects MCP-compatible clients to a live Blender scene for AI-assisted 3D workflows, enabling inspection and controlled operations on objects, materials, cameras, lights, render settings, animation, UVs, Geometry Nodes, imports, exports, and Python execution.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables users to control grandMA3 consoles through official OSC /cmd commands, with an admin UI for IP scanning, object/action permissions, chat integration, and MCP stdio access.MIT
- AlicenseAqualityBmaintenanceEnables MCP clients such as Claude Code or Claude Desktop to control grandMA3 onPC by executing command-line commands, running Lua, reading show data like sequences, cues, executors, patch and pools, driving playback and faders, and looking things up in the manual. It works through a Lua bridge plugin inside onPC, falling back to OSC for write-only commands when the bridge is unavailable.753MIT