Skip to content

Architecture

Daisuke Tsukada edited this page Sep 5, 2026 · 2 revisions

構成と設計方針

全体像

Claude Code ←(HTTP: localhost:3360/mcp)→ LiveMCP.amxd(Live のトラック上)
                                           ├ node.script … MCP サーバー本体(server/src、esbuild でバンドル)
                                           └ js …………… LiveAPI ブリッジ(device/code/live-bridge.js、ES5)

Claude Code ←(会話)→ MCP ツール live.set.* ─→ scripts/als*.js ─→ .als ファイル(Live を介さない)

scripts/remote-probe.js ←(TCP 3361)→ Remote Script LiveMCP_Probe(Live の Python、検証用)

3 つの経路の住み分け

やりたいこと 経路 理由
動いているセットの操作(クリップ配置・デバイス挿入・パラメータ) M4L(node.script + js) LOM で足りる。Live 内で完結
セットの組み立て・Group 化・参照修復・パックからの一括生成 .als 直書き(scripts/als*.js LOM に group_trackssave も無い。ファイルなら数秒で完成品が出る
ステータスバー通知・ブラウザからの読み込み(将来) Remote Script M4L の LiveAPI ホワイトリストの外側
セットの保存 人間の操作 どの経路にも API が無い。保存の判断は Live の画面で人がする

Remote Script 版への全面移行は Issue #4 で計画中です。判断の経緯は 記録 の「M4L ホワイトリストの壁」にあります。

M4L 側の制約(変えられないもの)

  • v8 は使わない。 v8.mxo は Max アプリ起動時にしか読み込まれず、Live 組み込みのランタイムでは生成されない。js(ES5)で書く
  • LiveAPI は low-priority thread でしか生成できない。 node.script → js の経路に deferlow が必須
  • node.script から LiveAPI は触れない。 必ず js ブリッジ経由(server/src/bridge.js の JSON プロトコル)
  • Live ブラウザは M4L から触れない。 サンプル探索は fs ベース(sample-search.js
  • Max はファイルパス単位でキャッシュする。 デバイス更新の反映には Live の再起動が要る
  • ブリッジ 1 往復のタイムアウトは 15 秒。重い処理(Drum Rack のパッド生成)はツール側で分割して投げる

MCP サーバー

  • @modelcontextprotocol/sdk の Streamable HTTP、stateless(リクエストごとにツールを登録しても副作用が無いよう、状態は bridge / config 側に持つ)
  • CommonJS のみ(Node for Max 互換のため ESM 不可)
  • ポート 3360、パス /mcpLIVEMCP_PORT で変更

.als を直接書く方針

.als は gzip された XML です。スキーマは非公開なので DOM に載せて書き戻しません。触る箇所だけをテキストとして差し替え、それ以外は 1 バイトも変えません。

  • テンプレート(templates/*.xml)は推測で書かず、Live 12.4.5 が実際に書いたセットから起こす(scripts/extract-templates.js
  • ポインタ id は NextPointeeId から文書順に連番で振る
  • 検証は「生成 → Live で開く → Live が保存した結果とタグ出現数で比較」
  • 書き換えは Live 純正の Backup/ と同じ命名で退避してから。削除はしない
  • Live で開いているセットは書かない(書いても画面に反映されず、保存で消える)

実物から読み取った規則の一覧は .als スクリプト にあります。

UI は会話である

音楽家は CLI を打ちません。.als の操作も MCP ツールとして露出し、判断が要る場面(Live で開いている等)はツールがエラー文言で状況と選択肢を返し、Claude が言葉で確認します。UX 検証の記録は 記録 を参照。

ディレクトリ

パス 内容
server/src/ MCP サーバー本体(CommonJS)
server/test/ node:test。Live 不要で実行できる
device/code/live-bridge.js js 側 LiveAPI ブリッジ(ES5)
device/LiveMCP.maxpat パッチソース。.amxd はここから生成
scripts/ .als 生成・修復、Loopcloud 整理、ビルド、Remote Script 導入
templates/ Live 12.4.5 から起こした .als の部品
data/ Loopcloud の分類表(JSON が正)と人の判断(overrides)
docs/ 設計記録(reports/)、レビュー用の表、Live のファイル構成メモ
remote-script/ 検証用 Remote Script(Python)
wiki/ この Wiki の clone(git 管理外)

Clone this wiki locally