Skip to main content
Glama

edit_notes

Destructive

Edit existing MIDI clip notes: modify, remove, replace, duplicate, or select them. Use note IDs from get_notes to change pitches, timing, and velocity.

Instructions

Change notes that already exist in a MIDI clip. action: modify (changes: [{id, }] or ids + set: {field: value}; keeps note ids and per-note events), remove (exactly one of ids, a range from_time/time_span/from_pitch/pitch_span, or all: true), replace (swap the notes in a range, or all notes, for notes in one step; if Live refuses the new notes the old ones are restored; omit notes to clear the range), duplicate (ids, optional destination_time and transposition semitones), duplicate_region (start, length, destination_time, optional pitch and transposition) and select (ids, all: true or none: true, for the editor's selection). Get ids from get_notes; unknown ids are refused (NOT_FOUND) with nothing changed. expect ({name}) guards against the wrong clip. One undo step; DESTRUCTIVE (remove, replace).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
allNoremove or select every note
idsNoNote ids (modify with set, remove, duplicate, select)
setNomodify with ids: fields to set on all of them
noneNoselect: clear the selection
notesNoreplace: the new notes (same fields as write_notes)
pitchNoduplicate_region: only this pitch (-1 = all)
startNoduplicate_region: source start in beats
actionYesWhat to do
expectNoGuard: {"name": "..."} must match the clip
lengthNoduplicate_region: source length in beats
addressYesA MIDI clip
changesNomodify: [{id, pitch?, start_time?, duration?, velocity?, mute?, probability?, velocity_deviation?, release_velocity?}]
from_timeNoRange start (remove, replace)
time_spanNoRange length (remove, replace)
from_pitchNoLowest pitch (remove, replace)
pitch_spanNoPitch count (remove, replace)
transpositionNoduplicate, duplicate_region: semitones
destination_timeNoduplicate, duplicate_region: where the copies start

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv2.0.3

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: one undo step, DESTRUCTIVE for remove and replace, replace restores old notes if Live refuses the new notes, unknown ids refused with NOT_FOUND and nothing changed. The `expect` guard against the wrong clip and the note about modify keeping note ids and per-note events are real behavioral disclosures. No contradiction with destructiveHint=true.

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

Conciseness4/5

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

Dense but front-loaded: first sentence states the core purpose, then per-action clauses. Every clause carries operational meaning. It is long, but for six distinct actions with conditional parameters that length is earned; minor friction from comma-spliced clauses.

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

Completeness4/5

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

Given 18 params, no output schema, and annotations covering safety, the description does the essential work: tells the agent how each action consumes parameters, the failure modes (NOT_FOUND, restore-on-refusal), and the undo/expect guards. It does not describe the return payload, but with no output schema that is a minor gap; it is otherwise complete enough to invoke correctly.

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 baseline is 3. The description goes further by mapping parameters to actions (e.g. `ids` + `set` for modify, `notes` cleared range, `transposition` semitones, `destination_time`), clarifying which fields apply to which action – value beyond the flat schema descriptions.

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?

States a specific verb (change existing notes) and resource (notes in a MIDI clip), and enumerates the six action variants with their semantics. Distinguishes clearly from get_notes, write_notes, and transform_notes by being the edit-existing-notes operation.

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

Usage Guidelines4/5

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

Explicitly says to get ids from get_notes, and notes that unknown ids are refused with NOT_FOUND with nothing changed. Per-action prerequisites (e.g. remove needs exactly one of ids/range/all, replace needs notes) are given. No explicit sibling routing like 'use transform_notes for generative edits', but usage context is strong.

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