Skip to content

Commit 7e1d870

Browse files
committed
Add 34 new LiveAPI tools (125 → 159 total)
MAJOR EXPANSION: Added comprehensive coverage of LiveAPI New Tool Categories (34 tools): 1. Master Track Control (4 tools): - get_master_track_info: Get master track volume, pan, devices - set_master_volume: Control master output level - set_master_pan: Control master pan - get_master_devices: List effects on master track 2. Return Track Operations (3 tools): - get_return_track_count: Count return tracks - get_return_track_info: Get return track details - set_return_track_volume: Control return levels 3. Audio Clip Operations (5 tools): - get_clip_warp_mode: Get warp algorithm (Beats, Tones, Complex, etc.) - set_clip_warp_mode: Change warp algorithm - get_clip_file_path: Get source audio file path - set_clip_warping: Enable/disable warping - get_warp_markers: Get warp marker positions 4. Follow Actions (3 tools): - get_clip_follow_action: Get follow action settings - set_clip_follow_action: Set next clip behavior for live performance - set_follow_action_time: Set follow action timing 5. Crossfader (3 tools): - get_crossfader_assignment: Get track A/B assignment - set_crossfader_assignment: Assign track to crossfader A or B - get_crossfader_position: Get crossfader position 6. Track Groups (4 tools): - create_group_track: Create group for organization - group_tracks: Group multiple tracks - get_track_is_grouped: Check if track is in a group - ungroup_track: Ungroup tracks 7. View/Navigation (4 tools): - show_clip_view: Show session view - show_arrangement_view: Show arrangement view - focus_track: Focus/select specific track - scroll_view_to_time: Scroll timeline to time 8. Color Utilities (2 tools): - get_clip_color: Read clip color - get_track_color: Read track color 9. Groove Pool (2 tools): - get_groove_pool_grooves: List available grooves - set_clip_groove: Apply groove to clip 10. Rack/Chain Operations (4 tools): - get_device_chains: Get chains from instrument/effect racks - get_chain_devices: Get devices in a chain - set_chain_mute: Mute/unmute rack chains - set_chain_solo: Solo/unsolo rack chains Implementation: - Added 34 new tool methods to liveapi_tools.py - Added 34 new action routes in __init__.py - Updated get_available_tools() list - Full error handling and validation for all tools Documentation: - Updated all references from 125 to 159 tools - Updated README.md with new tool categories table - Updated docs/ARCHITECTURE.md with expanded mermaid diagram - Updated all example scripts and documentation Total tools: 125 → 159 (+34 new tools) This brings near-complete coverage of the LiveAPI for professional workflows.
1 parent 1470ebb commit 7e1d870

7 files changed

Lines changed: 1052 additions & 40 deletions

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ ln -s "$(pwd)/ClaudeMCP_Remote" "$HOME/.ableton/User Library/Remote Scripts/Clau
119119
```
120120
ClaudeMCP_Remote/
121121
├── __init__.py # Main Remote Script entry point
122-
└── liveapi_tools.py # 125 LiveAPI tools implementation
122+
└── liveapi_tools.py # 159 LiveAPI tools implementation
123123
124124
docs/
125125
├── ARCHITECTURE.md # System architecture

ClaudeMCP_Remote/__init__.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,94 @@ def _process_command(self, command):
528528
elif action == 'get_cv_tools_devices':
529529
return self.tools.get_cv_tools_devices(command.get('track_index', 0))
530530

531+
# Master Track Control
532+
elif action == 'get_master_track_info':
533+
return self.tools.get_master_track_info()
534+
elif action == 'set_master_volume':
535+
return self.tools.set_master_volume(command.get('volume', 0.85))
536+
elif action == 'set_master_pan':
537+
return self.tools.set_master_pan(command.get('pan', 0.0))
538+
elif action == 'get_master_devices':
539+
return self.tools.get_master_devices()
540+
541+
# Return Track Operations
542+
elif action == 'get_return_track_count':
543+
return self.tools.get_return_track_count()
544+
elif action == 'get_return_track_info':
545+
return self.tools.get_return_track_info(command.get('return_index', 0))
546+
elif action == 'set_return_track_volume':
547+
return self.tools.set_return_track_volume(command.get('return_index', 0), command.get('volume', 0.85))
548+
549+
# Audio Clip Operations
550+
elif action == 'get_clip_warp_mode':
551+
return self.tools.get_clip_warp_mode(command.get('track_index', 0), command.get('clip_index', 0))
552+
elif action == 'set_clip_warp_mode':
553+
return self.tools.set_clip_warp_mode(command.get('track_index', 0), command.get('clip_index', 0), command.get('warp_mode', 0))
554+
elif action == 'get_clip_file_path':
555+
return self.tools.get_clip_file_path(command.get('track_index', 0), command.get('clip_index', 0))
556+
elif action == 'set_clip_warping':
557+
return self.tools.set_clip_warping(command.get('track_index', 0), command.get('clip_index', 0), command.get('warping', True))
558+
elif action == 'get_warp_markers':
559+
return self.tools.get_warp_markers(command.get('track_index', 0), command.get('clip_index', 0))
560+
561+
# Follow Actions
562+
elif action == 'get_clip_follow_action':
563+
return self.tools.get_clip_follow_action(command.get('track_index', 0), command.get('clip_index', 0))
564+
elif action == 'set_clip_follow_action':
565+
return self.tools.set_clip_follow_action(command.get('track_index', 0), command.get('clip_index', 0), command.get('action_A', 0), command.get('action_B', 0), command.get('chance_A', 1.0))
566+
elif action == 'set_follow_action_time':
567+
return self.tools.set_follow_action_time(command.get('track_index', 0), command.get('clip_index', 0), command.get('time_in_bars', 1.0))
568+
569+
# Crossfader
570+
elif action == 'get_crossfader_assignment':
571+
return self.tools.get_crossfader_assignment(command.get('track_index', 0))
572+
elif action == 'set_crossfader_assignment':
573+
return self.tools.set_crossfader_assignment(command.get('track_index', 0), command.get('assignment', 0))
574+
elif action == 'get_crossfader_position':
575+
return self.tools.get_crossfader_position()
576+
577+
# Track Groups
578+
elif action == 'create_group_track':
579+
return self.tools.create_group_track(command.get('name'))
580+
elif action == 'group_tracks':
581+
return self.tools.group_tracks(command.get('start_index', 0), command.get('end_index', 0))
582+
elif action == 'get_track_is_grouped':
583+
return self.tools.get_track_is_grouped(command.get('track_index', 0))
584+
elif action == 'ungroup_track':
585+
return self.tools.ungroup_track(command.get('group_track_index', 0))
586+
587+
# View/Navigation
588+
elif action == 'show_clip_view':
589+
return self.tools.show_clip_view()
590+
elif action == 'show_arrangement_view':
591+
return self.tools.show_arrangement_view()
592+
elif action == 'focus_track':
593+
return self.tools.focus_track(command.get('track_index', 0))
594+
elif action == 'scroll_view_to_time':
595+
return self.tools.scroll_view_to_time(command.get('time_in_beats', 0.0))
596+
597+
# Color Utilities
598+
elif action == 'get_clip_color':
599+
return self.tools.get_clip_color(command.get('track_index', 0), command.get('clip_index', 0))
600+
elif action == 'get_track_color':
601+
return self.tools.get_track_color(command.get('track_index', 0))
602+
603+
# Groove Pool
604+
elif action == 'get_groove_pool_grooves':
605+
return self.tools.get_groove_pool_grooves()
606+
elif action == 'set_clip_groove':
607+
return self.tools.set_clip_groove(command.get('track_index', 0), command.get('clip_index', 0), command.get('groove_index', 0))
608+
609+
# Rack/Chain Operations
610+
elif action == 'get_device_chains':
611+
return self.tools.get_device_chains(command.get('track_index', 0), command.get('device_index', 0))
612+
elif action == 'get_chain_devices':
613+
return self.tools.get_chain_devices(command.get('track_index', 0), command.get('device_index', 0), command.get('chain_index', 0))
614+
elif action == 'set_chain_mute':
615+
return self.tools.set_chain_mute(command.get('track_index', 0), command.get('device_index', 0), command.get('chain_index', 0), command.get('mute', True))
616+
elif action == 'set_chain_solo':
617+
return self.tools.set_chain_solo(command.get('track_index', 0), command.get('device_index', 0), command.get('chain_index', 0), command.get('solo', True))
618+
531619
# Unknown action
532620
else:
533621
return {

0 commit comments

Comments
 (0)