Skip to content

MCP (AI agent integration)

MCP (Model Context Protocol) lets compatible AI agents inspect and edit the project currently open in skulpton. For example, you can ask an agent to set the BPM to 120 or quantize a clip to a 1/16 grid.

  1. Open Preferences → AI Agent in skulpton.
  2. Turn on Enable MCP bridge.
  3. To allow operations that change the project, turn on Allow write operations. It is off by default.
  4. Register skulpton-mcp as a stdio server in your MCP client.

The bridge listens on localhost only. Its connection details and temporary token are stored in a descriptor file only while it is enabled. Your MCP client reaches the bridge through skulpton-mcp.

Write operations require confirm: true. Use the same operation with dryRun: true to inspect the proposed result before applying it. A dry run still validates arguments and target ids, and returns a change plan listing the affected entities, counts, runtime impact, and any files that would be overwritten — without modifying the project or any file. Read operations need neither write permission nor confirmation.

“Read” operations do not change the project. “Write” operations require Allow write operations and confirm: true.

AreaMCP toolTypeOperation
Projectproject.get_currentReadGet a composition-focused project, selection, and transport summary
Projectproject.get_rawReadGet the complete current project state
Historyhistory.get_statusReadGet undo/redo availability and bounded history depths
Historyhistory.undoWriteUndo the latest project edit
Historyhistory.redoWriteRedo the latest undone project edit
Timelineproject.get_timelineReadGet bounded tempo, meter, track-order, and clip-range summaries
Mixermixer.get_stateReadGet persisted mixer and routing state
Mixermixer.master.updateWriteUpdate master gain, pan, mute, or name
Mixermixer.return.addWriteAdd a return bus
Mixermixer.return.updateWriteUpdate return gain, pan, mute, or name
Mixermixer.return.removeWriteRemove a return and clean dependent sends and routing
Mixermixer.track.set_sendWriteSet or clear a track send target, gain, and pre/post-fader mode
Mixermixer.bus.set_sendWriteRoute a return with cycle validation or restore its master output
Automationautomation.get_stateReadGet automation lanes and points for an arrangement
Pluginplugin.get_chainsReadGet plugin chains for tracks and buses
MIDI portsmidi.get_portsReadList connected MIDI input and output ports
Projectproject.save_currentWriteSave to the current or specified path
Projectproject.set_nameWriteChange the project name
Projectproject.set_bpmWriteChange the BPM
Projectproject.set_tempo_mapWriteReplace the tempo map
Projectproject.set_time_signature_mapWriteReplace the time-signature map
Projectproject.set_quantize_settingsWriteReplace project quantize settings
Projectproject.set_length_barsWriteChange the project length in bars
Projectproject.set_scaleWriteSet or clear the project scale
Projectproject.set_notesWriteUpdate or clear project notes
MIDI exportmidi.export_clipWriteExport one clip as a Standard MIDI File
MIDI exportmidi.export_projectWriteExport the current arrangement as a Standard MIDI File
Pluginplugin.list_availableReadList cached available plugins
Plugintrack.assign_instrumentWriteAssign an instrument plugin to an Instrument Track
Arrangementarrangement.createWriteCreate an arrangement
Arrangementarrangement.duplicateWriteDuplicate an arrangement
Arrangementarrangement.set_activeWriteSwitch the active arrangement
Arrangementarrangement.renameWriteRename an arrangement
Arrangementarrangement.removeWriteRemove a Scratch Pad
Arrangementarrangement.copy_clipsWriteCopy active-arrangement clips to another arrangement
Tracktrack.addWriteAdd a MIDI, Audio, or Instrument Track
Tracktrack.updateWriteUpdate metadata and MIDI routing fields
Tracktrack.removeWriteRemove a track and dependent clips and routing
Tracktrack.reorderWriteChange track order
Tracktrack.set_initial_programWriteSet the MIDI Program Change sent when playback starts
Tracktrack.set_output_busWriteRoute the main output to a master or folder bus
Tracktrack.set_mixer_inputWriteSet audio or instrument track input routing
MIDI clipmidi_clip.addWriteAdd a MIDI clip to the active arrangement
Automation laneautomation_lane.addWriteAdd a gain, pan, MIDI CC, or plugin parameter lane to a track
Automation laneautomation_lane.updateWriteUpdate the lane name or authoritative target and sync owned clips
Automation laneautomation_lane.removeWriteRemove the lane and its clips across all arrangements
Automation clipautomation_clip.addWriteAdd a validated envelope clip to an existing lane
Automation clipautomation_clip.updateWriteAtomically update clip name, range, or point envelope
Automation clipautomation_clip.removeWriteRemove a clip from the active arrangement
Automation clipautomation_clip.moveWriteMove multiple clips to absolute beats in one transaction
Automation clipautomation_clip.duplicateWriteDuplicate a clip immediately after its stable source ID
Automation clipautomation_clip.sliceWriteSplit at an absolute beat with an interpolated continuous boundary
Automation clipautomation_clip.mergeWriteMerge clips sharing one track, lane, and target
Automation pointautomation_point.add_manyWriteAdd validated clip-local beat, normalized value, and curve points
Automation pointautomation_point.update_manyWriteAtomically validate and update points by current index
Automation pointautomation_point.delete_manyWriteAtomically validate and delete points by current index
Automation pointautomation_point.replace_allWriteReplace the complete point envelope with validated points
Automation pointautomation_point.simplifyWriteDeterministically simplify all points or an index subset
MIDI clipmidi_clip.updateWriteUpdate start, length, or name
AudioClipaudio_clip.addWriteAdd an AudioClip with an AudioFileRef
AudioClipaudio_clip.updateWriteUpdate placement, length, or persistent media reference
AudioClipaudio_clip.update_editWriteUpdate source-native-frame trim, gain, fades, and gain envelope
AudioClipaudio_clip.set_warpWriteSet warp mapping in source-native frames and clip-local beats
AudioClipaudio_clip.removeWriteRemove an AudioClip
AudioClipaudio_clip.moveWriteMove an AudioClip between audio tracks
AudioClipaudio_clip.duplicateWriteDuplicate an AudioClip by stable ID
AudioClipaudio_clip.slice_manyWriteSplit at multiple beats in one transaction after atomic validation
AudioClipaudio_clip.mergeWriteRejoin contiguous slices of the same source in one transaction
AudioClipaudio_clip.toggle_crossfadeWriteToggle the equal-power crossfade for two overlapping clips
AudioClipaudio_clip.consolidateWriteReplace clips only after a successful bounded offline render
AudioClipaudio_clip.bounce_instrumentWriteOffline-render instrument clips into a new AudioTrack
MIDI clipmidi_clip.moveWriteMove to another track or start beat
MIDI clipmidi_clip.duplicateWriteDuplicate one or more clips as a block
MIDI clipmidi_clip.sliceWriteSplit at an absolute beat
MIDI clipmidi_clip.mergeWriteMerge clips on one track
MIDI clipmidi_clip.bounceWriteFreeze rendered notes into MIDI clips
coding notecoding_note.set_codeWriteUpdate a clip’s coding note source
coding notecoding_note.renderWriteRun code and generate notes and CC lanes
coding notecoding_note.clear_renderWriteClear stored render output
coding notecoding_note.set_loaded_libsWriteSet the clip’s loaded libs/codes files
coding notecoding_note.set_disabled_factory_libsWriteSet disabled factory libraries for the clip
coding notecoding_note.bounce_renderWriteFreeze render output into editable source notes
Notenote.add_manyWriteAdd source notes
Notenote.update_manyWriteUpdate source notes
Notenote.delete_manyWriteDelete source notes
Notenote.replace_allWriteReplace all source notes in a clip
Notenote.quantizeWriteQuantize selected notes to a beat grid
Notenote.nudgeWriteMove selected notes by beat or pitch deltas
Notenote.copy_barWriteCopy notes from one bar to another
Channel lanechannel_lane.addWriteAdd a CC, pitch bend, or channel aftertouch lane
Channel lanechannel_lane.updateWriteUpdate a channel lane
Channel lanechannel_lane.deleteWriteDelete a channel lane
Channel eventchannel_event.addWriteAdd a CC, pitch bend, or channel aftertouch event
Channel eventchannel_event.updateWriteUpdate a channel event
Channel eventchannel_event.deleteWriteDelete a channel event
Transporttransport.playWritePlay from the insertion marker
Transporttransport.pauseWritePause at the current position
Transporttransport.stopWriteStop playback
Transporttransport.seekWriteSeek to an absolute beat
Transporttransport.set_loopWriteSet, update, or clear the loop range

MCP v1 does not support plugin scanning and management, plugin window control, or device operations. Mixer support covers persistent master, return-bus, and send edits; runtime views such as meters remain out of scope. plugin.list_available only returns plugin information already cached by skulpton.

  • Make sure skulpton is running.
  • Make sure Enable MCP bridge is on.
  • Check that Preferences shows the status as Listening.
  • Restart the MCP client so it reads the descriptor again.
  • If only edits fail, check Allow write operations and the confirmation parameter.