Analysis

Inspect the open set against best-practice rulesets and surface findings by domain.

Tools on this page
  1. analyze_set
  2. check_clipping
  3. detect_key

analyze_set

analyze_set(focus: str = 'all', measure: bool = False, measure_window_s: float = 15.0)

Analyze the open Live set against curated best-practice rulesets.

focus: one of “all” (default), “mixing”, “mastering”, “sound_design”, “health” - selects which rule domains run.

measure: when True AND per-track MCP Tap devices are connected, run a brief measure pass (plays the set for measure_window_s seconds, then stops/restores) to capture audio and add a signal-backed “mix_signal” section (see below). Default False keeps analyze_set read-only - the signal-backed mixing rules stay deferred. measure_window_s: capture length when measure=True (default 15).

Reads the whole set in one round-trip, runs the deterministic (“auto”) rules, and returns JSON {ok, data} where data = {snapshot, findings, manual_rules, deferred_rules, summary, [mix_signal]}:

  • snapshot: normalized per-track/return/master state (mixer, devices, clips, routing); master.signal carries audio-tap metering (LUFS/dBTP) when the MCP Audio Tap device is loaded, else null.
  • findings: auto-rule results {id, domain, status (pass|fail|warn|info), severity, evidence, remediation, [entity]}.
  • manual_rules: rules needing human/Claude judgment (id, domain, title, rationale).
  • deferred_rules: signal-required rules still needing metering (no audio tap connected / measure not run); the four mixing.* signal rules promote out of here into mix_signal when a measure pass runs.
  • summary: counts by status + manual/deferred.
  • mix_signal (only when measure=True with taps): {window_s, tracks:[{name, index,kind,signal}], findings:[{id,domain,status,severity,items,evidence, remediation}]} - cross-track spectral masking / loudness balance / per-track headroom / stereo correlation computed from the simultaneous per-track taps.

With measure=False this is read-only; it never mutates the set. The /ableton:analyze skill layers the report and per-track judgment on top.

check_clipping

check_clipping(
    window_s: float = 8.0,
    ceiling_db: float = 0.0,
    include_returns: bool = True,
)

Play the set briefly and flag any track/return/master peaking past 0 dBFS.

Peak-holds Live’s post-fader output meters over a window_s playback pass (no audio tap / Max needed), converts the held linear peak to dBFS, and flags entities whose peak meets/exceeds ceiling_db (default 0.0 = full scale).

Returns JSON {ok, data:{window_s, ceiling_db, played, entities, clipping, any_clipping}}:

  • entities: every track/return/master {name, index, track_type, peak_dbfs, is_clipping, overshoot_db}.
  • clipping: just the offenders, worst (highest peak) first.
  • any_clipping: bool; played: False if the transport did not advance.

Honest scope: the LOM output meter is a post-fader peak sampled ~10x/sec, so this catches obvious overs but not sub-sample inter-sample peaks - for true peak (dBTP) load the MCP Audio Tap and use measure_mix / read_track_meter.

detect_key

detect_key(source: str = 'auto', audio_weight: float = 0.5, top_n: int = 5)

Detect the most likely musical key from the open set’s combined content (MIDI notes + offline audio files), independent of Live’s configured scale.

Parameters:

  • source: “auto” (MIDI + audio files; default), “midi”, or “audio”. (“tap” is not yet supported.)
  • audio_weight: 0..1 blend of the audio histogram vs MIDI (default 0.5).
  • top_n: number of ranked candidates to return (default 5).

Returns {ok, data} where data has detected_key, confidence, candidates, relative_key, pitch_class_histogram, sources, live_scale, matches_live.


ableton-mcp-max - free for noncommercial use; commercial licensing available. Built by Ryan Robson / Robworks Software LLC. Not affiliated with or endorsed by Ableton AG.

This site uses Just the Docs, a documentation theme for Jekyll.