Skip to main content
Glama
newsbubbles

ismail: agent DAW (MCP server)

Feel From Ref

feel_from_ref

Applies a reference recording's timing and level to track notes, aligning each note to nearby onsets so a mechanical or quantized draft follows the record's feel.

Instructions

Write a reference's per-note timing and level into a track's notes. It follows the record's beats over bars [a, b] from the project grid and its bar 1 (each beat snaps to the strongest nearby onset, so a drifting or rubato take stays locked, and it says where it lost the beat), then for every note of track on a slot (a beat, or the 8ths (per_beat=2) or 16ths (per_beat=4) spread evenly between the followed beats) it reads the record's onset within window_ms of the slot in band ([lo, hi] Hz, default [600, 4000]: the band the part sounds in), and the slot's peak level there over its first 60 % against the mean of its bar (the bar's own loudness stays with the score and the faders), clipped to +-6 dB. Each note moves to its slot plus time x the record's offset against its own beat (time=1.0: the record's place; written as the note's @offset nudge, so it stays on its beat in notes_read) and its velocity scales by 10**(level x dB / 20). The project plays one tempo: the record's drift is not written, only each note's place against its beat. Notes on slots with no clear onset, off the slots, or on beats it could not follow are left alone. dry_run=True prints what it would change. undo() takes it back; run it once per draft (velocities scale again on a second run). Reach for it when a draft sounds MIDI, mechanical or quantized against a reference: analyze_feel(source='render', against='ref') first, then this.

Input Schema

NameRequiredDescriptionDefault
bandNo
barsYes
timeNo
levelNo
trackYes
sourceNoref
dry_runNo
projectYes
per_beatNo
window_msNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.4.3

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so in detail. It explains the beat-following logic, onset/level extraction, note movement, velocity scaling, clipped level range, untouched notes, dry-run behavior, undo support, and the non-idempotent warning that velocities scale again on a second run.

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

Conciseness3/5

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

The purpose is front-loaded and most clauses carry useful technical detail, but the bulk of the description is a single dense paragraph with long run-on sentences. The complexity justifies length, yet the structure makes the algorithm and parameter meanings harder to scan than they need to be.

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?

Given a complex mutation tool with ten parameters, no annotations, and an available output schema, the description is highly complete. It explains the transformation algorithm, workflow prerequisites, dry-run and undo safety, idempotency limits, and what happens to notes that cannot be matched.

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 description coverage is 0%, so the description must compensate, and it defines most parameters inline: bars, per_beat, window_ms, band, time, level, and dry_run all have clear operational meaning. The source parameter and the exact role of project are less fully explained, keeping this below a 5.

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

Purpose4/5

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

The first sentence states a specific verb and resource: writing a reference's per-note timing and level into a track's notes. It also names the related workflow with analyze_feel and the undo sibling, though it does not explicitly distinguish itself from similarly named reference-based tools such as levels_from_ref.

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 gives an explicit triggering condition: use it when a draft sounds MIDI, mechanical, or quantized against a reference. It also specifies the prerequisite workflow, analyze_feel(source='render', against='ref') first, and adds safety guidance such as dry_run and running it once per draft.

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

Deploy Server

Other Tools