uad-console-mcp
Click on "Install 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., "@uad-console-mcpwhat's the current monitor level?"
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.
Unofficial project. Not affiliated with, endorsed by, or supported by Universal Audio, Inc. UAD, Apollo, Unison, and Console are trademarks of Universal Audio, Inc. This software is an independent implementation built against the local API that the UA Mixer Engine already exposes on this machine.
uad-console-mcp
An MCP server that lets Claude (or any MCP client) read and control a Universal Audio Apollo
interface: channel names and faders, preamp gain, cue and aux sends, the control-room monitor,
talkback, clock and sample rate, UAD plugin inserts, meters, and whole-rig snapshots. It talks to
the UA Mixer Engine over its local TCP API on 127.0.0.1:4710, the same API the Console app
uses.
The Console app does not need to be open. The engine does need to be running: it starts with UAD Console and keeps running after you quit the app. Nothing leaves your machine.
Does this work for me?
Setup | Status |
Apollo x8 Gen 2, Thunderbolt | Live-tested against real hardware (UA Mixer Engine, UAD 11.7.1) |
Other Thunderbolt / USB Apollos (Twin, x4, x6, x8p, x16, Solo, Duo, Quad) | Expected to work. Same engine, same protocol, and discovery is fully dynamic: no channel index, monitor output, or slot count is hardcoded. Unverified, so please report back |
Multi-unit cascades (two or more Apollos) | Mock-tested against a derived two-device fixture. The code enumerates every |
macOS | Verified |
Windows | Protocol-compatible, unverified. The server is pure Python over plain TCP with nothing platform-specific in it, so it should work wherever the engine listens on |
Discovery is why "expected to work" is a real expectation and not a hope: the server walks the
engine's own tree, finds the monitor output by the presence of its CRMonitorLevel property,
reads each strip's IOType, and asks the engine which send buses and insert slots exist. A model
with a different channel count is a different tree, not a different code path.
Related MCP server: presonus-studiolive-mcp
Safety: read this before you install
This server can make your speakers loud and can put 48 volts down a microphone cable. An LLM driving it will occasionally be confidently wrong. The safety layer exists because of that, and because of one measured fact about the engine:
The UA Mixer Engine does not enforce its own read-only flags. A
seton a property the engine itself reported asreadonly: truewas accepted and applied on real hardware. The engine will not stop a bad write. The gate insafety.pyis the only real barrier.
Three modes
| What it allows |
| Nothing is written, ever. Every write is refused before it reaches the socket. Good for a first look, and for letting an LLM inspect a live session during a take |
| Writes allowed only to an allowlist of 35 property names: names, faders, pans, mutes, solos, preamp controls, sends, plugin slots and parameters, monitor, talkback, clock, rate, and per-input sample-rate conversion ( |
| The allowlist is bypassed and |
In every mode a permanent denylist refuses device identity and engine internals (DeviceHwID,
MultiUnitOrder, AppCommand, MixerState, DeviceTypeID, anything under /pluginscenes, and
anything that looks like firmware, a bootloader, or a serial number).
Hearing and speaker rails
Monitor level is not treated as a normal property. It is railed three ways at once, and unmuting or un-dimming counts as a level event: releasing a mute on a stored level of 0 dB is exactly as loud as setting 0 dB.
Variable | Default | What it does |
|
|
|
|
| Hard ceiling on monitor level in dB. Requests above it are refused, not silently clamped. Unmuting onto an above-ceiling stored level is refused too |
|
| Largest increase allowed in one call, for requests at or below the ceiling. Bigger jumps are clamped down to this |
|
| Total increase allowed inside the rolling window |
|
| Length of that rolling window, in seconds |
|
| Global write rate limit (token bucket), so a confused agent cannot machine-gun the engine |
|
| Burst size for that rate limit |
|
| Off by default: writes to properties the engine marks read-only are refused. Only set this if you know exactly which property you mean |
|
| Where |
The ceiling and the step limit are not the same rail, and the order matters. The ceiling is checked first: a request above it is refused outright and nothing is written, not even a partial +6 dB move. The per-call step clamp only applies to requests that are already at or below the ceiling, where a too-large jump is trimmed to +6 dB and applied.
One consequence worth saying out loud: climbing back out of a very low monitor level through this server is deliberately slow (+6 dB per call, +10 dB per 30 s). For a big jump, use the physical monitor knob instead of waiting out the budget.
Every refusal names the variable or confirm flag that would unblock it, so an agent can tell you the remedy instead of retrying blindly:
Refused monitor level -3.0 dB: above the -6.0 dB ceiling. Ask for -6.0 dB or less,
or raise UAD_MCP_MAX_MONITOR_DB (hearing and speaker damage risk).48V phantom power and ribbon microphones
uad_set_preamp(phantom_48v=true) is refused unless the same call carries
confirm_condenser_mic=true. Phantom power can permanently destroy a ribbon microphone, and
some vintage dynamics. A model that has not been told what microphone is plugged in cannot
satisfy that flag honestly, which is the point:
Refused to switch 48V phantom power on at /devices/0/inputs/0/preamps/0/48V: it can
permanently damage ribbon microphones and some vintage dynamics. Confirm the connected
microphone is a condenser and pass confirm_condenser_mic=True.No warranty
This is MIT-licensed software with no warranty of any kind. It writes to real audio hardware
in real time. You are responsible for your ears, your monitors, your microphones, and your
session. Sudden or sustained loud audio causes permanent hearing damage. The rails here reduce
the chance of an accident; they are not hearing protection and they are not a substitute for your
own hand on the monitor knob. Do not run this during a take you cannot afford to lose, and start
in readonly mode.
Install
Requires Python 3.11 or newer, and the UAD software installed with the engine running. Not on PyPI yet, so run it straight from git with uv:
uvx --from git+https://github.com/fomoPhil/uad-console-mcp uad-console-mcpClaude Code:
claude mcp add uad-console -- uvx --from git+https://github.com/fomoPhil/uad-console-mcp uad-console-mcpClaude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"uad-console": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/fomoPhil/uad-console-mcp",
"uad-console-mcp"
],
"env": {
"UAD_MCP_MODE": "safe",
"UAD_MCP_MAX_MONITOR_DB": "-12"
}
}
}
}Verify it before you wire it up
--check is a doctor. It reads and never writes, so it is safe to run at any time:
$ uvx --from git+https://github.com/fomoPhil/uad-console-mcp uad-console-mcp --check
uad-console-mcp 0.1.0
engine: reachable at 127.0.0.1:4710
UAD version 11.7.1, protocol 1.0.0
clock: Internal, locked=True
sample rate: 48000 Hz
dsp load: 11.4% dsp, 8.0% program
device 0: Apollo x8 Gen 2 (Apollo x8 Gen 2) online: 28 inputs, 2 auxs, 26 outputs
monitor out: MONITOR at /devices/0/outputs/22
plugins: 215 installed
safety mode: safe (from UAD_MCP_MODE)
monitor rail: ceiling -6.0 dB, max +6.0 dB per call, +10.0 dB per 30 s
write limit: 10/s, burst 20
raw set tool: not registeredIt exits non-zero if the engine is unreachable, no device is found, or a device is offline.
Other flags: --dump-tree [FILE] (walk the whole tree into the test-fixture format, home
directory scrubbed out, - for stdout), --host / --port (defaults 127.0.0.1 and 4710),
--log-level (DEBUG, INFO, WARNING, ERROR, CRITICAL, default INFO, always on stderr),
and --version.
What a session looks like
Labelling an 8-channel ADAT expander and building the drummer's cue mix. Condensed, but these are the real calls and the real result shapes.
You: "My ADAT expander has kick, snare top, snare bottom and two overheads on the first five channels. Name them properly and give the drummer a headphone mix."
uad_get_status()
-> clock: {source: "Internal", locked: true, sample_rate: 48000}
devices: [{device: 0, name: "Apollo x8 Gen 2", online: true, cue_buses: 2,
channels: {input: 28, aux: 2, output: 26}}]
safety: {mode: "safe", max_monitor_db: -6.0}
uad_list_channels(kind="input")
-> ... {index: 8, name: "UG 1", io_type: "ADAT", fader_db: 0.0, mute: false, has_preamp: false}
{index: 9, name: "UG 2", io_type: "ADAT", ...}
{index: 10, name: "UG 3", io_type: "ADAT", ...} (8 ADAT strips, indices 8 to 15)The eight UG n strips are the expander. Renaming and unhiding them in one batch:
uad_set_channels(items=[
{target: "UG 1", name: "KICK IN", fader_db: 0, mute: false, hidden: false},
{target: "UG 2", name: "SNARE TOP", fader_db: 0, mute: false, hidden: false},
{target: "UG 3", name: "SNARE BTM", fader_db: 0, mute: false, hidden: false},
{target: "UG 4", name: "OH L", fader_db: 0, mute: false, hidden: false, pan: -1.0},
{target: "UG 5", name: "OH R", fader_db: 0, mute: false, hidden: false, pan: 1.0},
])
-> results[0]: {resolved: {device: 0, index: 8, name: "UG 1"}, ok: true,
writes: [{path: "/devices/0/inputs/8/Name", property: "Name",
verified: true, before: "UG 1", after: "KICK IN", warnings: []}, ...]}verified: true is a real read-back, not an assumption: the server sets the value, gets it again,
and compares.
uad_set_sends(items=[
{target: "KICK IN", send: "cue1", level_db: -6},
{target: "SNARE TOP", send: "cue1", level_db: -8},
{target: "SNARE BTM", send: "cue1", level_db: -12},
{target: "OH L", send: "cue1", level_db: -10, pan: -1.0},
{target: "OH R", send: "cue1", level_db: -10, pan: 1.0},
])
-> results[0]: {send: "cue1", resolved: {index: 8, name: "KICK IN"}, ok: true,
writes: [{path: "/devices/0/inputs/8/sends/2/Gain",
verified: true, before: -144.0, after: -6.0}]}The new names work immediately: a verified rename updates the cached topology in place, so the
resolver does not have to wait out its 30 second TTL. Send IDs are resolved from the engine too,
which is why cue1 landed on sends/2 here rather than on a guessed index.
uad_watch_meters(targets=["KICK IN","SNARE TOP","OH L","OH R"], duration_s=10, threshold_db=-40)
-> {triggered: true, triggered_channels: ["KICK IN"],
peaks_db: {"KICK IN": -8.4, "SNARE TOP": -11.2, "OH L": -19.0, "OH R": -18.6}, polls: 7}Claude: "Named and metered, kick peaking at -8 dBFS. The drummer's cue is built on cue1, and HP 1 is already fed from cue1. The headphone volume itself has to come off the front-panel knob: the protocol exposes no level property for the HP outputs."
Tool reference
21 tools in readonly and safe mode, 22 in full mode. Every write result carries
{verified, before, after, warnings} plus the resolved {device, index, name}, and every tool
returns an actionable sentence instead of a traceback when something fails.
Tool | One line |
| Engine (including |
| Every input, aux or output strip across every unit, grouped by device, with live fader, mute, solo, solo_safe, pan, hidden and stereo state, plus |
| Batch: |
| One mic/line input's |
| Batch: a channel's |
| Control room: |
| Talkback on/off and level, with an auto-off timer (default 30 s) so an open talkback mic cannot be forgotten |
| Panic button, no arguments: mute every monitor output and turn talkback off |
| Change clock source ( |
| Change the system sample rate. Needs |
| The installed UAD catalog: name, categories, Unison capability, authorization. Filterable |
| What is loaded where: every insert slot plus the Unison slot, with plugin, power state and preset |
| Load a plugin into an insert slot or |
| Clear an insert or Unison slot, reporting what was removed |
| A loaded plugin's parameters: names, normalized 0-1 values, and the engine's own display text |
| Batch-set a loaded plugin's parameters by name, using normalized 0-1 values |
| Recall a preset by name, validated against that plugin's preset browser when the engine lists it |
| One-shot meter read (level, peak, clip) with at-floor channels called out |
| Poll meters for up to |
|
|
| Read any node or property in the engine tree verbatim, with its metadata. One argument, |
|
|
Reading state that no tool returns directly
Four things are readable but easy to miss, because the obvious tool does not return them.
A send's current level. There is no send-read tool. Read the send nodes with uad_raw_get
before you write, so you know what you are changing:
uad_raw_get(path="/devices/0/inputs/0/sends")
-> {kind: "node", children: ["0","1","2","3","4","5"]} one node per send
uad_raw_get(path="/devices/0/inputs/0/sends/2")
-> {properties: {ID: {value: "cue1"}, Gain: {value: -144.0, min: -144.0, max: 12.0},
Pan: {value: 0.0}, Bypass: {value: false}}}The node's ID is what uad_set_sends calls send: aux1, aux2, cue1 through cue4. Gain
is the level in dB, from -144 to +12, and -144.0 means the send is off, which is the default on
a fresh strip. All four cueN nodes exist in the tree even on a device that reports cue_buses: 2,
so a write to cue3 there verifies happily while reaching no real output: uad_set_sends adds a
warning saying exactly that, and an agent should relay it rather than reporting success.
The monitor level. uad_get_status does not carry it. Read it from
uad_list_channels(kind="output"): the strip with is_monitor: true has monitor_level_db
(the engine's CRMonitorLevel). Write it with uad_set_monitor(level_db=...), through the rails.
active is not a fault light. Every strip reports a read-only active flag, which is engine
state, not user state. active: false is normal on the right leg of every stereo pair, on
unused strips, and on some outputs: on the captured x8 Gen 2 tree, S/PDIF R and the working
MONITOR output both report active: false. It is not writable and there is nothing to fix. The
writable switch is enabled (EnabledByUser), set with
uad_set_channels(items=[{"target": N, "enabled": true}]).
SRConvert, per-input sample-rate conversion. Each digital input strip (S/PDIF on the x8 Gen 2)
carries a boolean SRConvert, which lets that input arrive at a different sample rate from the
Apollo's. Read it with uad_raw_get(path="/devices/0/inputs/16/SRConvert"). No dedicated tool
writes it: it is on the safe-mode allowlist, which is what lets uad_snapshot capture and restore
it, but changing it live needs uad_raw_set in full mode, or Console.
And for any "no sound" question, check engine.audio_streaming in uad_get_status first. If it
is false, the engine is passing no audio at all and no meter anywhere will move, so hunting through
channels, sends and the monitor path is wasted effort.
Resources
URI | Contents |
| Live |
| Live |
| The cannot-do list, with a workaround for each item (Markdown) |
Prompts
setup_vocal_tracking, onboard_adat_expander, troubleshoot_clock, panic_reset. Prose
versions of all four, plus a gain-staging guide, live in docs/RECIPES.md.
Not supported
These are hard limits of the API this server talks to, not a to-do list. The uad://limitations
resource says the same thing to the model at runtime.
Not supported | Why, and what to do instead |
Headphone output level | The HP outputs expose no level property at all. On the captured x8 Gen 2 tree, |
Saving a Console session file | There is no session save or recall in this API, and writes under |
Re-patching the I/O matrix |
|
Dante | No Dante tools, and no Dante routing nodes in the tree this server walks. The x8 Gen 2 reports a read-only |
Other UA local ports | Only TCP 4710 is implemented. Whatever the UAD software may offer on other local ports (community projects mention a helper on 4720) is out of scope: not reverse-engineered, not used, not tested |
Remote or networked engines |
|
Creating or deleting channels | The strip list is fixed by the hardware model |
Audio itself | No capture, no playback, no analysis. Meters are polled at about 3 Hz, |
Per-plugin DSP cost | Only the totals are exposed ( |
Monitor level above the ceiling | By design: |
Writing | The property is allowlisted so snapshots can restore it, but no tool exposes it. Read it with |
Companion skills
Two Claude skills ship in skills/. They are optional. The server works without them,
but they carry the studio judgement that does not belong in a tool description.
Skill | What it is for |
| Planning and configuring a rig from scratch: the interview questions to ask, which physical input suits which source, the clock master decision for ADAT expanders and other digital gear, ADAT sample-rate and S/MUX channel limits, multi-Apollo cascades, then channel naming, hiding and a baseline snapshot |
| Day-to-day operation: tracking setup with a Unison preamp and honest gain staging, insert chains, cue and headphone mixes for one or several performers, podcast and streaming layouts, troubleshooting decision trees ("no sound from channel 3", clicks and pops, a strip that vanished), and snapshot-before-you-experiment habits |
Each skill is a self-contained directory: a SKILL.md plus a references/ folder it points at
when a step needs the detail. Install by copying both into your personal skills folder:
mkdir -p ~/.claude/skills
cp -R skills/apollo-onboarding skills/apollo-studio-tasks ~/.claude/skills/See skills/README.md for details.
For agent-facing rules (hard prohibitions, canonical tool sequences, an error table and a studio glossary), see AGENTS.md.
Contributing
The most useful contribution is a tree dump from an Apollo model nobody has tested yet. That is exactly how a model moves from "expected to work" to "verified".
uad-console-mcp --dump-tree ~/Desktop/my-apollo-tree.jsonIt only reads. The walk takes about 11 seconds for roughly 1,900 nodes, and your home directory is scrubbed out of every string before the file is written (preset browser paths otherwise leak your login name). Open an issue titled with your model, attach the JSON, and say which OS and UAD version you are on. From that fixture the test suite can prove the code handles your channel count, your monitor output index and your send layout without ever touching your hardware.
Bug reports are far more useful with the --check output plus the exact tool call and result.
Dev setup
git clone https://github.com/fomoPhil/uad-console-mcp
cd uad-console-mcp
uv sync
uv run pytest # 500 tests, all against a mock engine, no hardware needed
uv run ruff check .A further 7 tests in tests/live/ are marked live: they need a real engine and a real Apollo,
and are excluded by default (addopts = -m 'not live'). Run them deliberately, never in CI:
UAD_MCP_LIVE=1 uv run pytest -m liveTwo rules in this codebase are not negotiable:
Never probe by writing against real hardware. The engine accepts writes to its own read-only properties. All write-behaviour tests run against
tests/mock_engine.py.Never hardcode a channel index, a monitor output index, or a slot count. Discovery reads them from the tree. The derived
twinfixture exists specifically to catch this.
The wire protocol is documented in docs/PROTOCOL.md, and the module contracts in docs/SPEC.md.
Acknowledgements and attribution
This is an independent implementation, informed by published community descriptions of the engine's local API. Credit where it is due:
raduvarga/UA-Midi-Control for the original public write-up of how the UA Mixer Engine's TCP API works. That write-up is the reason this project was possible at all.
Kalskiid/ua-commander (MIT) for the keepalive and monitor-discovery patterns.
uaaccess and open-apollo were referenced for orientation. Both are GPL-licensed, and no code or data from either was copied into this project.
The test fixture (
tests/fixtures/apollo_x8_gen2_tree.json) is our own read-only capture from our own Apollo x8 Gen 2.
Universal Audio has not been involved in this project. Please do not send them support requests about it.
License
MIT. See LICENSE.
Available Tools
21 toolsuad_get_insertsA
Show what is loaded where: every insert slot plus the Unison slot, with plugin name, power state and preset, across one channel or all of them. Use when: auditing a channel's processing chain or finding a free slot. Not for: parameter values inside a plugin - use uad_get_plugin_params.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | input | |
| device | No | ||
| target | No | ||
| loaded_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation but does not disclose key behavioral traits such as the effect of the 'loaded_only' parameter (which defaults to true and likely filters to only loaded slots, contradicting the claim of showing 'every insert slot'). It also omits information about permissions, side effects, or output formatting, and no annotations are provided to compensate.
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 concise and well-structured: two sentences that front-load the purpose and then provide usage guidelines with clear 'Use when' and 'Not for' sections. It is easy to parse and free of unnecessary words, though slightly more detail on parameters would improve 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?
Given the tool has 4 parameters, no schema descriptions, and no annotations, the description should provide substantial guidance. While it gives a general sense of the tool's purpose and usage, it omits crucial details about parameter behavior and output interpretation, making it incomplete for reliable 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 descriptions are completely absent (0% coverage), and the description adds only a vague hint about selecting 'one channel or all of them'. It does not explain the individual parameters (kind, device, target, loaded_only), leaving the agent without sufficient information to correctly populate them.
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 clearly states the tool's function with a specific verb ('Show') and resource ('insert slots' plus 'Unison slot'), and details the output content (plugin name, power state, preset). It explicitly distinguishes itself from the sibling tool uad_get_plugin_params by stating it is 'Not for parameter values inside a plugin'.
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 provides explicit use cases ('Use when: auditing a channel's processing chain or finding a free slot') and a clear exclusion with an alternative tool ('Not for: parameter values inside a plugin - use uad_get_plugin_params'). This gives the agent strong guidance on when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_get_plugin_paramsA
List a loaded plugin's parameters with their names, normalized 0-1 values and the engine's own display text. Use when: you need the exact parameter names before setting them, or to read back what a preset did. Not for: an empty slot - parameter nodes only exist once a plugin is loaded.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | ||
| device | No | ||
| target | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals a key constraint: the tool only works on loaded plugins and empty slots are invalid. It also clarifies that this is a read/list operation, implying no mutation, and describes the kind of output to expect.
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 concise sentences, front-loaded with the main purpose and followed by usage guidance. There is no fluff or repetition of schema details.
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?
While the purpose and usage are clear and an output schema exists, the tool has three parameters (all undocumented) and no annotations. The description does not sufficiently explain how to identify the target plugin, leaving a critical gap for successful 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?
The schema description coverage is 0%, so the description must compensate, but it provides no meaning for the parameters slot, device, or target. The required 'target' parameter is not explained at all, making it impossible for an agent to know what value to provide.
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 clearly states the action ('List') and the resource ('a loaded plugin's parameters'), and specifies what is returned (names, normalized 0-1 values, display text). This distinguishes it from sibling tools like uad_set_plugin_params or uad_get_status.
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 provides 'Use when' scenarios and a 'Not for' exclusion with a rationale (parameter nodes only exist once a plugin is loaded). This gives clear context for when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_get_statusA
Report engine, clock, sample rate, DSP load, every Apollo in the cascade and the effective safety limits. Use when: starting a session, before any write, or when something is not behaving and you need to know the clock, the sample rate or which safety mode is active. Not for: channel levels or meters - use uad_list_channels and uad_peek_meters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing safety and side effects. 'Report' implies a non-destructive read operation, and the 'before any write' usage hint reinforces this. However, it does not explicitly state that no state changes occur or describe any potential error conditions, so it falls slightly short of full transparency.
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 three sentences with a clear structure: what it does, when to use it, and when not to use it. Each sentence serves a distinct purpose, and the information is front-loaded. There is no redundancy or 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?
Given that there are no parameters and an output schema exists, the description need not explain return values. It covers the essential context: the tool's purpose, appropriate use cases, and exclusions. It is fully complete for a status-reporting 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 has zero parameters, so the schema coverage is trivially 100% and the description need not explain parameters. The baseline for zero-parameter tools is 4, and the description does not attempt to add parameter-related meaning, which 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 starts with 'Report' followed by a specific list of resources (engine, clock, sample rate, DSP load, Apollo cascade, safety limits), clearly stating the tool's function. It also distinguishes from siblings by explicitly noting what it is not for, such as channel levels or meters, and directs to uad_list_channels and uad_peek_meters.
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 'Use when' and 'Not for' sections provide clear guidance on when to invoke this tool and when to use alternatives, naming specific sibling tools. This exceeds basic context and directly addresses the decision boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_list_channelsA
List every strip across every unit, grouped by device, with name, I/O type, fader, mute, solo, pan, hidden and stereo link. Use when: you need to find a channel by name, or to see the current mix state before changing it. Not for: meter levels (uad_peek_meters) or plugin contents (uad_get_inserts).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | input | |
| device | No | ||
| include_hidden | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It uses the verb 'List' and mentions 'see the current mix state before changing it,' implying a read-only snapshot. It also discloses that results are grouped by device. However, it does not explicitly state 'read-only' or discuss any potential side effects, though the word 'list' and context make this safe.
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 three focused sentences: the first states the core action, the second gives usage intent, and the third lists exclusions. Every sentence adds value, and it is front-loaded with the most important 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 simple list tool with an output schema, the description covers purpose, use cases, and exclusions well. However, it completely omits parameter semantics, and the output schema is not described in the text. Given the 0% schema coverage and the need to understand kind and device filters, the description 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 description coverage is 0%, and the description does not explain any of the three parameters (kind, device, include_hidden). It mentions 'hidden' as a field in the output, but does not connect it to the include_hidden parameter. The defaults exist, but without parameter documentation the agent cannot make informed choices about values.
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 clearly states the tool's function: 'List every strip across every unit, grouped by device, with name, I/O type, fader, mute, solo, pan, hidden and stereo link.' This is a specific verb+resource+scope, and the 'Not for' clause explicitly distinguishes it from sibling tools like uad_peek_meters and uad_get_inserts.
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 provides explicit usage guidance: 'Use when: you need to find a channel by name, or to see the current mix state before changing it.' It also names alternatives with 'Not for: meter levels (uad_peek_meters) or plugin contents (uad_get_inserts),' making it clear when to prefer other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_list_pluginsA
List the installed UAD plugin catalog: name, categories, Unison capability, authorization status. Filterable and limited by default. Use when: choosing a plugin to load, or checking whether one is authorized. Not for: what is currently loaded on channels - that is uad_get_inserts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| search | No | ||
| category | No | ||
| unison_only | No | ||
| authorized_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. The verb 'List' implies a read-only operation, and it adds useful behavioral context: 'Filterable and limited by default.' It does not explicitly state non-modifying behavior or connection requirements, but for a catalog listing tool these are largely entailed.
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 extremely concise and well-structured: it opens with the action and purpose, then provides usage guidance and an explicit exclusion. Every sentence adds value with no redundancy.
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 covers the tool's purpose, output content, filtering behavior, and typical use cases, and it distinguishes the tool from its closest sibling. Because an output schema exists, detailed return values are not necessary. A minor gap is the lack of explanation about how filtering parameters interact, but overall this is adequate.
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%, and the description does not explain the five parameters (limit, search, category, unison_only, authorized_only) beyond the generic statement 'Filterable and limited by default.' The parameter names are somewhat intuitive, but the description does not compensate for the lack of 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 clearly states the tool lists the installed UAD plugin catalog with specific output fields (name, categories, Unison capability, authorization status). It also explicitly distinguishes itself from uad_get_inserts, which lists currently loaded plugins.
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 explicit use cases: 'Use when: choosing a plugin to load, or checking whether one is authorized.' It also names a specific exclusion: 'Not for: what is currently loaded on channels - that is uad_get_inserts.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_load_pluginA
Load a UAD plugin into an insert slot (slot=0,1,2,3...) or the Unison preamp slot (slot='unison'), then poll up to 5 s for its parameter nodes to materialize and report whether they did. Use when: adding processing to a channel. Optionally recall a preset in the same call. Not for: changing parameters (uad_set_plugin_params) or clearing a slot (uad_remove_plugin).
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | ||
| power | No | ||
| device | No | ||
| plugin | Yes | ||
| preset | No | ||
| target | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses key behavioral details: polling up to 5 seconds, waiting for parameter nodes to materialize, and reporting whether they did. It also reveals the optional preset recall. Some side effects like power management are not mentioned, but the core behavior is transparent enough.
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 three sentences, front-loaded with the primary action, and every sentence adds value. No redundant or vague 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?
The description provides solid purpose, usage, and behavioral context, and an output schema exists for return values. However, with no annotations and zero schema descriptions, the unexplained target/device/power parameters leave notable gaps 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?
The schema has no descriptions (0% coverage), so the description must compensate. It explains slot values and preset usage, but leaves target, device, and power undefined. These are significant gaps for a 6-parameter tool with only 2 inferred parameter meanings.
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 clearly states a specific action: loading a UAD plugin into an insert slot or the Unison preamp slot, followed by polling for parameter nodes. It also distinguishes itself from sibling tools by explicitly mentioning what it is not for.
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?
Provides explicit 'Use when' guidance and names sibling alternatives for excluded use cases (uad_set_plugin_params, uad_remove_plugin). This is model guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_peek_metersA
One-shot meter read (level, peak, clip) for all channels or a named subset, with at-floor channels called out. Use when: checking whether signal is arriving, or which channel is hot right now. Not for: waiting for signal to appear - use uad_watch_meters, which polls and exits early.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | input | |
| device | No | ||
| targets | No | ||
| above_db | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure. It reveals that this is a one-shot read (single sample, no polling) and that at-floor channels are explicitly flagged. While edge cases like invalid targets aren't covered, the key behavioral traits are clear for a read-only 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 description is extremely concise: two sentences, front-loaded with the core function, then usage guidance and exclusions. No redundant words.
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 an output schema present, return value details are unnecessary. The description covers purpose, usage context, alternatives, and basic scope. The only gap is explicit parameter semantics, but that is partially covered in parameter_semantics. Overall, sufficient for an agent to decide when to use 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 description coverage is 0%, so the description should compensate. It implicitly maps 'named subset' to the targets parameter and 'at-floor' to the above_db threshold, but does not explicitly explain the device or kind parameters. Partial compensation 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?
The description states a specific verb and resource: 'One-shot meter read (level, peak, clip) for all channels or a named subset'. It clearly distinguishes from sibling tools, especially by naming uad_watch_meters as the alternative for polling.
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 provides explicit 'Use when' conditions (checking signal arrival or hot channel) and a 'Not for' exclusion with a named alternative (uad_watch_meters), making selection and invocation guidance clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_plugin_presetA
Recall a preset by name into a loaded plugin slot, validated against that plugin's preset browser when the engine lists it. Use when: a named factory or user preset is a faster starting point than setting parameters. Not for: channel-strip or Console session presets, which this server does not manage - see uad://limitations.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | ||
| device | No | ||
| preset | Yes | ||
| target | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral details. It discloses mutation via 'Recall', requires a 'loaded plugin slot', notes conditional validation ('when the engine lists it'), and states a scope limitation ('does not manage' channel-strip/Console session presets). However, it does not explain whether the current parameter state is overwritten or reversible, 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?
The description is two focused sentences: the first states exactly what the tool does, the second gives clear when/not-for guidance. No wasted words and no repetition of schema details.
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 covers purpose, when to use, and explicit non-goals, which is strong for a preset-recall tool. It relies on the output schema for return details and on `uad://limitations` for broader constraints, but the under-specified parameter relationships (target/slot/device) keep it from 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?
Schema description coverage is 0%, so the description must compensate. It identifies 'preset by name' and 'loaded plugin slot', but does not explain the relationships among `target`, `slot`, and `device`, nor their accepted forms. Required parameters are not individually described, leaving ambiguity for a 4-param schema with defaults.
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 'Recall' with a clear resource: 'a preset by name into a loaded plugin slot'. It also adds a distinguishing detail about validation against the plugin's preset browser, separating it from parameter-setting or plugin-loading 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 'Use when' clause gives a clear trigger: 'a named factory or user preset is a faster starting point than setting parameters.' The 'Not for' clause excludes channel-strip/Console session presets and references a limitations doc, providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_raw_getA
Read any node or property in the engine tree verbatim, with its metadata. Use when: a tool does not cover something and you need to inspect the tree, or to confirm a property's type, range or enum values. Not for: writing - that is deliberately separate and only available in full mode.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It clearly states the tool is read-only, returns data verbatim, includes metadata, and that writing is separated. It lacks details on path syntax or error behavior, but the core read-only nature is transparent.
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 three short sentences with no filler. It front-loads the core purpose, then gives usage context, and ends with an important exclusion. 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 a simple 1-parameter tool with an output schema, the description covers purpose, use cases, and write separation. Minor gaps such as exact path format and what 'full mode' means are not fatal, but a bit more detail on path handling would make it 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 0% for the single 'path' parameter, but the description compensates by explaining that the path addresses a node or property in the engine tree and can be used to confirm type/range/enum values. It does not specify path format, but the semantic meaning is clearly conveyed.
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 clearly states the tool reads any node or property in the engine tree verbatim with metadata, which is a specific verb and resource. It also differentiates from writing tools by explicitly noting it is not for writing, though it does not name sibling tools 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?
The description provides explicit 'Use when' and 'Not for' guidance: use when no other tool covers a need or to confirm types/ranges/enums, and avoid for writing. It clearly indicates that writing is deliberately separate and only available in full mode, giving strong usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_remove_pluginA
Clear an insert or Unison slot by writing an empty EffectName, and report what was removed. Use when: freeing DSP or removing processing from a channel. Not for: bypassing a plugin while keeping it loaded - set its Power instead via uad_load_plugin(power=false) on the same slot.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | ||
| device | No | ||
| target | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 reveals the write operation, the empty EffectName mechanism, and the report behavior. It also clarifies what it does NOT do (bypass). Some side effects like DSP release specifics or Unison preamp behavior are not mentioned, but the core behavior is transparent.
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 three sentences, front-loaded with the action and mechanism, and wastes no words. Each sentence adds value: what it does, when to use it, and when not to use 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?
Purpose, usage, and behavioral transparency are strong, and an output schema exists for return values. However, parameter semantics are weak due to 0% schema coverage and no description of target/device. Overall, it is adequate but incomplete for a 3-parameter tool without annotations.
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%, and the description fails to define the required 'target' parameter or the optional 'device' parameter. It only implicitly references 'slot' as an insert/Unison slot. This is a significant gap for a tool with three parameters, especially since 'target' is required.
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 clearly states the action ('Clear an insert or Unison slot'), the mechanism ('by writing an empty EffectName'), and the result ('report what was removed'). This distinguishes it from sibling tools like uad_load_plugin, which loads rather than removes.
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 'Use when' and 'Not for' guidance is provided, including a concrete alternative: set Power via uad_load_plugin(power=false) when bypassing is intended. This leaves no ambiguity about when to select this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_safe_stateA
Panic button: mute every monitor output and turn talkback off. Takes no arguments and needs no confirmation. Use when: there is feedback, a runaway level, or anything unexpectedly loud. Call it first and diagnose afterwards. Not for: normal muting of a single channel - use uad_set_channels.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full weight. It discloses the key behavior (muting all monitor outputs, turning off talkback) and, importantly, that it 'takes no arguments and needs no confirmation,' which sets expectations about immediacy and irreversibility. It doesn't mention return values or side effects beyond the audio state, but the stated behavior is unambiguous for a panic action.
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: the first defines the action, the second gives usage context, the third names an alternative for a different use case. Every sentence is purposeful and information-dense. The 'Panic button' label front-loads the intent.
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 tool is simple (no parameters, no nested objects). The description covers purpose, usage, and exclusions. It also provides a fallback alternative. Given the low complexity and presence of an output schema, no further detail is required.
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?
There are zero parameters, so the description's assertion 'takes no arguments' adds value by confirming the schema's empty properties. Per the rubric, 0 params yields a baseline 4, and this description explicitly reinforces that.
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 'Panic button' and immediately defines the action: 'mute every monitor output and turn talkback off.' This is a specific verb-resource-scope statement that clearly differentiates it from siblings like uad_set_channels and uad_talkback.
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?
Provides explicit when-to-use ('there is feedback, a runaway level, or anything unexpectedly loud'), sequencing advice ('Call it first and diagnose afterwards'), and a clear when-not-to-use with an alternative tool ('normal muting of a single channel - use uad_set_channels').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_channelsA
Batch-set channel state. Each item: {target: name or index, device?, kind?, fader_db?, pan?, pan2?, mute?, solo?, solo_safe?, name?, hidden?, stereo?, enabled?}. Every item reports resolved {device,index,name} and per-property {verified, before, after, warnings}. Use when: changing faders, mutes, solos, pans, names or visibility on one or many channels at once. Not for: the control-room monitor (uad_set_monitor), preamp gain (uad_set_preamp) or send levels (uad_set_sends).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It goes beyond a simple mutation statement by revealing that every item reports resolved device/index/name and per-property verified/before/after/warnings, giving the agent insight into response format and verification behavior. However, it does not mention persistence, undo, or authorization requirements, leaving some gaps in transparency.
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 concise and well-structured: it leads with the purpose, then provides the item format in a compact notation, and ends with use/not-for guidance. Every sentence contributes valuable information without fluff or repetition of schema fields, achieving high information density.
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 (many optional properties, batch operation, and no annotations), the description covers input format, return reporting, usage scenarios, and exclusions thoroughly. An output schema is present for return values, so the description doesn't need to explain every field; it provides the contextual information the agent needs to decide and invoke 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?
The schema is minimal (just an 'items' array with additionalProperties true), so the description provides the essential parameter semantics. It enumerates all supported property keys with types and optionality markers (e.g., 'target: name or index', 'device?', 'fader_db?'), and explains the return structure. This is a substantial addition beyond the schema, making the tool usable.
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 clearly states the tool's function as 'Batch-set channel state' with a specific verb and resource, and enumerates the exact properties it can modify (faders, mutes, solos, pans, names, visibility). It also explicitly distinguishes itself from sibling tools by listing what it is NOT for (uad_set_monitor, uad_set_preamp, uad_set_sends), providing strong 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?
The description gives explicit 'Use when' guidance for changing multiple channel properties at once, and clear 'Not for' exclusions that name alternative tools and their targets. This tells the agent exactly when to select this tool versus alternatives, exceeding the minimum bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_clockA
Change the clock source (Internal, Word Clock, ADAT, S/PDIF), verify ClockLocked afterwards, and revert automatically if the new source does not lock. Use when: slaving to or from external digital gear, or recovering from an unlocked clock. Requires confirm=true and refuses while audio is flowing. Not for: changing the sample rate - that is uad_set_sample_rate.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite having no annotations, the description fully discloses critical behaviors: it verifies ClockLocked after changing, automatically reverts if the new source doesn't lock, requires confirm=true, and refuses while audio is flowing. This exceeds the typical level of behavioral detail and prepares the agent for side effects and safety 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?
The description is four concise sentences, front-loaded with the core action, then covering usage context, requirements, and exclusions. Every sentence adds meaningful information with no redundancy or 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?
Given the tool's moderate complexity (2 params, output schema present), the description covers the operation, prerequisites, failure recovery behavior, use cases, and alternatives. The presence of an output schema means return-value details aren't needed, and the description is complete for an agent to select and invoke this tool 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 has no description coverage and no enums on parameters, but the description compensates fully: it lists valid values for 'source' and explicitly states that 'confirm' must be true for the operation to proceed. This adds actionable semantics 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?
The description uses a specific verb ('Change') with a clear resource ('clock source'), and enumerates the exact selectable sources (Internal, Word Clock, ADAT, S/PDIF). It explicitly distinguishes itself from the sibling uad_set_sample_rate, making the tool's purpose 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?
The description provides explicit 'Use when' scenarios (slaving to/from external gear, recovering from unlocked clock) and a 'Not for' exclusion that names the correct alternative tool (uad_set_sample_rate). This gives clear guidance for when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_monitorA
Set the control-room monitor: level_db (hard-railed), dim, mute, mono fold, alt speaker selection, dim attenuation. Unmuting, un-dimming and LOWERING dim_attenuation_db are all treated as level events and can be refused; level_db is written first and the release is railed against the level the engine reports back. Use when: changing what the control room hears, or recovering after uad_safe_state. Not for: headphone level - the protocol cannot set it; see uad://limitations.
| Name | Required | Description | Default |
|---|---|---|---|
| dim | No | ||
| mono | No | ||
| mute | No | ||
| device | No | ||
| level_db | No | ||
| alt_speaker | No | ||
| dim_attenuation_db | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description transparently discloses important behavior: level_db is 'hard-railed', operations like unmuting/un-dimming/lowering dim_attenuation_db are treated as level events that can be refused, and level_db is written before the release is railed against the engine-reported level. This goes well beyond basic safety hints and helps the agent predict consequences.
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 packed into three scannable sentences, front-loading the primary action and parameters, followed by causal constraints and clear usage boundaries. Every sentence serves a distinct purpose 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?
The tool has 7 optional parameters and an output schema, yet no annotations. The description covers purpose, usage, and critical behavioral quirks, but it leaves the 'device' parameter unmentioned and does not describe output semantics beyond relying on the output schema. This is a minor gap in an otherwise rich description.
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 0% description coverage, so the description must compensate. It names most parameters and adds meaningful context (e.g., 'level_db (hard-railed)'), but it omits the 'device' parameter entirely and does not clarify value formats or ranges for alt_speaker or dim_attenuation_db. Thus the description is helpful but not fully compensatory.
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 'Set the control-room monitor' and enumerates the exact attributes (level_db, dim, mute, mono fold, alt speaker selection, dim attenuation), making the tool's purpose specific and distinct. The 'Not for: headphone level' clause further disambiguates it from monitoring-related sibling 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 provides explicit when-to-use guidance: 'Use when: changing what the control room hears, or recovering after uad_safe_state.' It also explicitly states when not to use it ('Not for: headphone level') and points to uad://limitations as an alternative reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_plugin_paramsA
Batch-set a loaded plugin's parameters by name using normalized 0-1 values: params=[{name: 'Peak Reduction', normalized: 0.4}, ...]. Use when: dialling in a plugin after loading it. Read uad_get_plugin_params first for exact names and current values. Not for: dB or Hz values - the protocol exposes normalized values only; the display text is read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | ||
| device | No | ||
| params | Yes | ||
| target | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses that values must be normalized 0-1, that the protocol exposes only normalized values, and that display text is read-only. It implies mutation (setting parameters) but does not elaborate on side effects, idempotency, or error behavior. Still, it adds meaningful behavioral context 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?
The description is three sentences, all relevant and useful. The purpose statement includes an example, the second sentence gives a clear when-to-use and prerequisite, and the third states an important limitation. No fluff, tight structure.
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 has four parameters, no schema descriptions, and no annotations, the description covers the core usage well: what it does, how to format params, and when to use it. It does not explain the 'target', 'slot', and 'device' parameters in detail, nor does it describe error handling, but the output schema covers return values and the recommendation to read uad_get_plugin_params fills potential gaps. Overall, fairly complete for the 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 0%, so the description must compensate. It fully explains the 'params' parameter with an inline example and clarifies normalized value semantics, but it leaves 'target', 'slot', and 'device' mostly unexplained. The titles give some hint, but the description does not specify what 'target' refers to (e.g., plugin name, instance ID) or the role of slot/device. Partial compensation.
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 clearly states a specific action: batch-setting a loaded plugin's parameters by name. It uses a concrete verb 'Batch-set' and a distinct resource ('loaded plugin's parameters'), and it differentiates itself from sibling tools like uad_get_plugin_params by focusing on mutation rather than reading.
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 provides explicit when-to-use guidance: 'Use when: dialling in a plugin after loading it.' It also recommends reading uad_get_plugin_params first for exact names and current values, and it states what the tool is not for (dB/Hz values), clarifying the normalized-only constraint. This is exemplary usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_preampA
Set preamp controls on one mic/line input: gain_db, pad, low_cut, phase, hi_z, source ('Mic' or 'Line'), and 48V phantom power. Use when: setting recording gain or input options on a channel whose has_preamp is true. 48V requires confirm_condenser_mic=true because phantom power destroys ribbon microphones. Not for: fader level (that is uad_set_channels fader_db) or digital inputs, which have no preamp at all.
| Name | Required | Description | Default |
|---|---|---|---|
| pad | No | ||
| hi_z | No | ||
| phase | No | ||
| device | No | ||
| source | No | ||
| target | Yes | ||
| gain_db | No | ||
| low_cut | No | ||
| phantom_48v | No | ||
| confirm_condenser_mic | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It warns that 48V phantom power can destroy ribbon microphones and requires confirm_condenser_mic=true, and notes digital inputs have no preamp. However, it does not mention that unset parameters are left unchanged or describe the immediate effect on the device.
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 compact and front-loaded: three sentences cover the function, usage conditions, safety warning, and exclusions with no repetition of schema fields or 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?
The output schema covers return values, so the description can focus on context. It includes the has_preamp prerequisite, the safety concern, and alternatives. It could add a note about null parameters meaning 'no change,' but overall it is adequate for the 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 coverage is 0%, so the description must compensate. It names most controls (gain_db, pad, low_cut, phase, hi_z, source, phantom_48v) and clarifies source values ('Mic'/'Line') plus the confirm_condenser_mic requirement. But it omits target/device semantics and gain_db units/range, leaving meaningful gaps.
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+resource ('Set preamp controls on one mic/line input') and enumerates the relevant fields, making it clear this is a preamp-focused tool. It also explicitly differentiates from uad_set_channels fader_db, distinguishing it from a sibling.
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 provides a direct 'Use when' condition (setting recording gain/input options when has_preamp is true) and a 'Not for' exclusion (fader level and digital inputs), explicitly naming the alternative sibling uad_set_channels for fader adjustments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_sample_rateA
Change the system sample rate (e.g. 44100, 48000, 96000). Requires confirm=true and refuses while audio is flowing, because every running stream will glitch. Use when: a session needs a different rate, or to match an external clock master. Not for: fixing a lock failure on its own - check the clock source first with uad_get_status.
| Name | Required | Description | Default |
|---|---|---|---|
| rate | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses that confirm=true is required, that the tool refuses while audio is flowing, and explains the consequence (streams glitch), which provides meaningful behavioral context beyond a basic 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?
Three short sentences with front-loaded purpose, clear use cases, and no fluff. Each sentence serves a distinct role.
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 setter with two parameters and an output schema, the description adequately covers purpose, usage, and critical behavior. It lacks only explicit details on return values and edge cases like invalid rates, which are minor for this 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 input schema has zero descriptions, but the description adds value by specifying confirm must be true and giving rate examples. However, it does not fully enumerate valid rate values or explain failure behavior if confirm is false, so it only partially compensates.
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 'Change the system sample rate,' a specific verb+resource statement. It includes examples and explicitly differentiates from clock source troubleshooting via 'Not for: fixing a lock failure...' making it distinct from uad_set_clock and uad_get_status.
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 'Use when' and 'Not for' lines provide explicit conditions for appropriate use, including a named alternative (uad_get_status) for a different scenario, meeting the highest bar for usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_set_sendsA
Batch-set send levels into aux and cue buses. Each item: {target, send: 'aux1' | 'cue1'... or index, device?, level_db?, pan?, bypass?}. Use when: building a performer's cue/headphone mix or feeding a reverb aux. Not for: the headphone output level itself, which this protocol cannot set - see uad://limitations.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the transparency burden. It discloses that this is a batch-set operation and notes a protocol limitation, but it does not explain side effects such as whether existing send levels are overwritten, how errors in a batch are handled, or whether changes are reversible.
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 only three sentences and front-loads the core action, then gives the item shape, then usage guidance. Every sentence adds value and there is no fluff.
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?
An output schema exists, so return-value documentation is not necessary. The description covers the input item shape, typical use cases, and an important limitation. It lacks details on target semantics and error scenarios, but is generally sufficient for selecting and invoking the 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%, so the description must compensate for the minimal input schema. It does so by outlining the item structure: {target, send: 'aux1' | 'cue1'... or index, device?, level_db?, pan?, bypass?}. This is helpful, though some nested fields like 'target' and 'device' remain underdefined.
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 'Batch-set send levels into aux and cue buses', which is a specific verb+resource statement. It clearly distinguishes this from sibling tools like uad_set_channels or uad_set_monitor by focusing on send buses.
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 'Use when:' and 'Not for:' sections provide clear context and a specific exclusion (headphone output level). However, it does not name a sibling alternative tool for that excluded case, instead pointing to 'uad://limitations'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_snapshotA
Whole-rig snapshots: action='save' captures every writable property, 'list' shows what is saved, 'diff' reports what changed since one (ignore accepts glob patterns), 'restore' writes one back in a safe order. Restore defaults to dry_run=true and returns the exact ordered write list. Use when: saving a session state before experimenting, seeing what drifted, or putting a known-good state back. A real restore captures a pre-restore snapshot first. Not for: Console sessions or plugin scenes, which this server cannot touch.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | No | list | |
| ignore | No | ||
| dry_run | No | ||
| include_clock | No | ||
| include_monitor | No | ||
| allow_cross_model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and excels: explains each action's effect, safe restore ordering, dry_run default and return behavior, automatic pre-restore snapshot capture, and scope limitations. This goes well beyond what the schema alone 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 description is compact and front-loaded, with the core mechanics in the first two sentences and usage guidance in the second paragraph. Every sentence conveys meaningful information with no redundancy.
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-action tool with no annotations and minimal schema guidance, the description is remarkably complete: action modes, scope, safety behavior, use cases, and exclusions are all covered. The output schema exists to handle return-value details, and the description appropriately focuses on 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 description coverage is 0%, so the description must compensate. It does explain action, ignore glob patterns, and dry_run semantics, but leaves name, include_clock, include_monitor, and allow_cross_model to be inferred from their names. This is a notable gap given seven 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?
The description clearly identifies a multi-action snapshot tool for whole-rig state, detailing save/list/diff/restore. It distinguishes itself from sibling tools that target individual settings by focusing on comprehensive snapshots.
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?
Provides explicit use cases ('saving a session state before experimenting, seeing what drifted, or putting a known-good state back') and clear exclusions ('Not for: Console sessions or plugin scenes'). It does not name alternative sibling tools, but the when/when-not guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_talkbackA
Turn talkback on or off and set its level, with an auto-off timer (default 30 s) so an open talkback mic cannot be forgotten. Calling it again replaces the timer. Use when: the engineer needs to speak to the live room. Not for: routing the talkback mic or choosing which mic it is - that is set in Console.
| Name | Required | Description | Default |
|---|---|---|---|
| on | No | ||
| level | No | ||
| auto_off_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the auto-off timer default of 30 seconds and that 'Calling it again replaces the timer.' This is useful behavioral context beyond simple on/off. However, it doesn't mention the return value or any other side effects, which would make it fully transparent.
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 concise and well-structured: an opening sentence with core behavior and timer safety, followed by clear 'Use when' and 'Not for' sections. Every sentence adds value without repetition or fluff.
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 tool is simple with three optional parameters and an output schema. The description covers purpose, usage, exclusions, and parameter semantics. It lacks edge-case details (e.g., what happens when 'on' is null, or level ranges), but these are not essential for a basic invocation, making it reasonably 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 0%, so the description compensates by explaining the semantic meaning of each parameter: 'on' maps to 'Turn talkback on or off', 'level' to 'set its level', and 'auto_off_s' to the auto-off timer. It doesn't specify units or valid ranges for level, but the functional purpose is clear enough for invocation.
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 clearly states the tool's function: 'Turn talkback on or off and set its level, with an auto-off timer.' It also distinguishes the tool from routing tasks by explicitly saying 'Not for: routing the talkback mic or choosing which mic it is - that is set in Console.' This sets it apart from sibling tools like uad_set_sends.
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?
Provides explicit guidance: 'Use when: the engineer needs to speak to the live room.' and 'Not for: routing the talkback mic or choosing which mic it is.' This clearly outlines when to use and when not to use, with an alternative context ('set in Console').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uad_watch_metersA
Poll meters for up to duration_s (capped at 30 s) and return as soon as any watched channel exceeds threshold_db, reporting per-channel peaks. Use when: verifying that a source is live, setting gain against a performance, or hunting an intermittent signal. Not for: long-term monitoring - it is capped at 30 s per call by design.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | input | |
| device | No | ||
| targets | No | ||
| duration_s | No | ||
| interval_s | No | ||
| threshold_db | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral details: the polling is capped at 30 seconds, it returns as soon as any watched channel exceeds the threshold (early exit behavior), and it reports per-channel peaks. It also states the design intent behind the cap. It doesn't mention side effects, but since this is a read-only meter poll, that's acceptable.
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 only three sentences, with the core action front-loaded. Every sentence adds value: the first defines what it does, the second gives usage cases, the third states the key limitation. 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?
The tool has an output schema (so return values are covered there) and six optional parameters. The description fully covers the tool's purpose, usage, and design constraint (30s cap). It could have mentioned that it's a blocking call or how it handles no threshold breach, but the overall context is strong enough for an agent to understand when and how to invoke 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 description coverage is 0%, so the description must compensate. It explicitly names duration_s, threshold_db, and implies 'targets' via 'watched channel'. However, it does not explain device, kind, or interval_s. Given all parameters are optional with defaults, the partial compensation is moderate, but still leaves room for ambiguity on the unmentioned 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?
The description clearly states the specific verb ('poll'), the resource ('meters'), and the exact behavior (poll for up to duration_s, return when any watched channel exceeds threshold_db, report per-channel peaks). It distinguishes itself from sibling tools like uad_peek_meters by emphasizing the 'watch' behavior and the 30-second cap, which is not mentioned for other meter-related 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 provides explicit 'Use when' and 'Not for' sections, listing concrete scenarios (verifying a live source, setting gain, hunting intermittent signals) and explicitly excluding long-term monitoring. However, it does not name an alternative sibling tool (e.g., uad_peek_meters) for the excluded case, so it's not a full 5.
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. Dates show when Glama detected each change.
21 tool updates
v0.1.0- First observed
uad_get_inserts - First observed
uad_get_plugin_params - First observed
uad_get_status - First observed
uad_list_channels - First observed
uad_list_plugins - First observed
uad_load_plugin - First observed
uad_peek_meters - First observed
uad_plugin_preset - First observed
uad_raw_get - First observed
uad_remove_plugin - First observed
uad_safe_state - First observed
uad_set_channels - First observed
uad_set_clock - First observed
uad_set_monitor - First observed
uad_set_plugin_params - First observed
uad_set_preamp - First observed
uad_set_sample_rate - First observed
uad_set_sends - First observed
uad_snapshot - First observed
uad_talkback - First observed
uad_watch_meters
TDQS
Every tool targets a distinct resource and action, and the 'Not for' sections explicitly disambiguate overlapping areas (e.g., uad_peek_meters vs uad_watch_meters, uad_get_plugin_params vs uad_set_plugin_params). No two tools appear to do the same thing; even closely related tools like uad_load_plugin and uad_plugin_preset have clear separation (loading vs preset recall).
All tools share the uad_ prefix and most follow a verb_noun pattern (uad_list_channels, uad_set_preamp, uad_load_plugin). However, a few deviate: uad_raw_get is noun_verb instead of verb_noun, and uad_talkback, uad_safe_state, uad_plugin_preset, and uad_snapshot are single nouns or adjective_noun without an explicit verb. The deviations are minor and do not significantly hurt readability.
With 21 tools, the server sits at the upper edge of the well-scoped range but is justified by the complexity of controlling a professional audio console. Each tool covers a meaningful aspect (status, channels, preamps, sends, monitor, safety, clock, plugins, meters, snapshots), and there is no redundancy. It feels slightly heavy but not overwhelming for the domain.
The tool surface covers core console operations comprehensively: channel control, preamp, sends, monitor, talkback, safety, clock, sample rate, plugin management, parameter adjustment, and metering. Obvious gaps like headphone output level and console session management are explicitly acknowledged as limitations, and the snapshot system compensates for state management. Minor missing operations (e.g., explicit routing beyond sends) are workarounds.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Walter Remote MCP Server — AI humanization and detection tools
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Drive WhatsApp from any MCP client: pair devices, send text and media, manage contacts and groups.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables control of Behringer X32/M32 digital mixing consoles via OSC protocol for remote mixing, automated setup, and live adjustments through an AI assistant.2428MIT
- AlicenseNot gradedqualityBmaintenanceConnects AI coding agents to PreSonus StudioLive III mixers over the local network, exposing live mixer context such as channel names, mute/solo/fader state, Fat Channel compressor/EQ models, and meter activity as MCP resources and tools for reading and reasoning about live sound engineering.1MIT
- AlicenseAqualityCmaintenanceEnables controlling Behringer WING digital mixers via OSC, supporting fader, mute, pan, and name operations on strips, with raw OSC access for unsupported parameters.116MIT
- AlicenseBqualityBmaintenanceAn MCP server for controlling Voicemeeter (Basic, Banana, or Potato) on Windows: strip and bus gains, mutes, output routing, live levels, macro buttons, presets, and audio-engine restarts.17MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fomoPhil/uad-console-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server