Skip to main content
Glama

set_parameter_display

Idempotent

Set a device parameter by the reading it should show, not raw value. Probes the parameter's response curve, then writes the exact value that yields your target display, without altering sound during search.

Instructions

Set a device parameter by the reading it should show, not by its raw value.

Returns:
    Dictionary reporting the value written, the display it produced, the residual
    error against the target, the unit, and how many probes and round trips it
    took. On refusal, why - including the case where the device reports no units.

Note:
    This is the inverse of ``set_parameter``, and it exists because there is no
    formula to invert. The curve from the raw range onto the displayed unit
    differs per parameter and is rarely linear: on one measured third-party
    compressor Attack is ``v^4 * 1000 ms``, Ratio is ``20^v`` and Threshold about
    ``40 * log10(v)``. Writing "10" at a parameter that displays milliseconds
    lands at 316 ms there, a factor of 30, and reports success.

    So the taper is sampled rather than computed: one batch of probes asks the
    device what each raw value *would* read as, the answers are bracketed around
    the target, a second batch refines inside that bracket, and only then is a
    single value written and read back. Two round trips, and nothing in the set
    moves until the last step.

    That last point is the reason not to bisect with real writes instead. A
    probing bisection that does not restore what it touched has been measured
    leaving Delay Feedback at 100 % - self-oscillation - and Saturator Drive at
    100 % across 20 parameters (catalog row return_device.str_for_value). The
    probes here write nothing at all.

    The probes stay strictly inside the range and never ask at ``min`` or
    ``max``: an endpoint has crashed Live inside a plugin's own formatting code,
    which is native code no try/except reaches (docs/limits.md, 'Asking for a
    display string at an endpoint (Live)').

    Where the device reports no unit this refuses instead of aiming. Every VST2
    reports a bare number (0 of 36 measured), which is formally a number and
    physically meaningless, so a display-driven search there would walk the
    control to its end stop and call it a result. For those, use ``set_parameter``
    with a normalised value and calibrate by ear once.

    The result is the stored value and its display, which is not audibility: a
    parameter on a device that is switched off reads back exactly the same.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindNoWhich collection the track index counts in: 'track' for song.tracks, 'return' for song.return_tracks, 'master' for the master track, where the track index is ignored.track
unitNoWhich unit the target is in: 'dB', 'Hz', 'ms', '%', 'ratio', 'st', 'cents' or 'x'. Give kHz as Hz and seconds as ms. Optional: when omitted the unit the device reports is used, and a device reporting a different unit than you expected is a refusal, not a guess.
trackYesTrack index in song.tracks, counted from 0.
deviceYesDevice index in that track chain, counted from 0. get_devices lists the chain with its indices.
targetYesThe reading you want, as a bare number in the base unit: -26 for -26 dB, 8000 for 8 kHz, 150 for 150 ms, 4 for a 4:1 ratio. Not the normalised value - that is set_parameter.
parameterYesWhich parameter, either its index as a string ('1') or its name, which may be a glob ('Attack*'). A name that matches more than one parameter is refused rather than guessed at.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Addedv0.1.4

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations: it discloses that probes write nothing, only a single final value is written, two round trips occur, endpoints are never probed because they can crash Live, and the returned value is not audibility. This is rich behavioral context and is consistent with readOnlyHint=false, destructiveHint=false, and idempotentHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Although long, the description is front-loaded with the essential purpose and return shape, then uses structured paragraphs to explain rationale, safety, edge cases, and alternatives. Every paragraph earns its place and the text is dense with useful information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, inverse-search tool with an output schema and 100% parameter documentation, the description covers the critical extra context: why sampling is used, why real-write bisection is dangerous, endpoint crash risk, no-unit refusal, and sibling tool routing. Nothing needed for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description adds meaningful semantic context on top: target is a display reading, not a normalised value, and unit handling clarifies refusal on mismatched units. It also explains why probes avoid min/max, which informs the parameter boundaries implied by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Set a device parameter by the reading it should show, not by its raw value.' It immediately differentiates the tool from set_parameter by naming it as the inverse, so an agent can recognize which tool to use without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool versus set_parameter: it exists because there is no invertible formula, and for devices that report no unit it says 'use set_parameter with a normalised value and calibrate by ear once.' It also provides a concrete failure mode of write-based bisection, giving strong situational guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Latest Blog Posts

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/romanstark/live-maestro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server