add_notes_to_clip
Add musical notes to clips in Ableton Live tracks to create melodies, chords, or rhythms for music production.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| track_index | Yes | ||
| clip_index | Yes | ||
| notes | Yes |
Implementation Reference
- MCP_Server/server.py:307-324 (handler)MCP tool handler for 'add_notes_to_clip'. Proxies parameters to the Ableton remote script via socket command.@mcp.tool() def add_notes_to_clip( ctx: Context, track_index: int, clip_index: int, notes: List[Dict[str, Union[int, float, bool]]] ) -> str: try: ableton = get_ableton_connection() result = ableton.send_command("add_notes_to_clip", { "track_index": track_index, "clip_index": clip_index, "notes": notes }) return f"Added {len(notes)} notes to clip at track {track_index}, slot {clip_index}" except Exception as e: logger.error(f"Error adding notes to clip: {str(e)}") return f"Error adding notes to clip: {str(e)}"
- MCP_Server/server.py:308-313 (schema)Input schema defined by function parameters: track_index (int), clip_index (int), notes (List[Dict[str, Union[int, float, bool]]]) expecting note dicts with keys like pitch, start_time, duration, velocity, mute.def add_notes_to_clip( ctx: Context, track_index: int, clip_index: int, notes: List[Dict[str, Union[int, float, bool]]] ) -> str:
- Core Ableton Live API implementation of add_notes_to_clip. Converts note dicts to tuple format and calls clip.set_notes() to add MIDI notes.def _add_notes_to_clip(self, track_index, clip_index, notes): """Add MIDI notes to a clip""" try: if track_index < 0 or track_index >= len(self._song.tracks): raise IndexError("Track index out of range") track = self._song.tracks[track_index] if clip_index < 0 or clip_index >= len(track.clip_slots): raise IndexError("Clip index out of range") clip_slot = track.clip_slots[clip_index] if not clip_slot.has_clip: raise Exception("No clip in slot") clip = clip_slot.clip # Convert note data to Live's format live_notes = [] for note in notes: pitch = note.get("pitch", 60) start_time = note.get("start_time", 0.0) duration = note.get("duration", 0.25) velocity = note.get("velocity", 100) mute = note.get("mute", False) live_notes.append((pitch, start_time, duration, velocity, mute)) # Add the notes clip.set_notes(tuple(live_notes)) result = { "note_count": len(notes) } return result except Exception as e: self.log_message("Error adding notes to clip: " + str(e)) raise
- AbletonMCP_Remote_Script/__init__.py:256-260 (registration)Command dispatching/registration in remote script's _process_command method that routes 'add_notes_to_clip' to the handler function.elif command_type == "add_notes_to_clip": track_index = params.get("track_index", 0) clip_index = params.get("clip_index", 0) notes = params.get("notes", []) result = self._add_notes_to_clip(track_index, clip_index, notes)