From maxmcp
Provides guidelines for creating organized Max/MSP patches with MaxMCP: object addition, connections, signal flow, grid layout, section organization, and presentation UI design.
How this skill is triggered — by the user, by Claude, or both
Slash command
/maxmcp:patch-guidelinesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill provides comprehensive guidelines for creating well-organized, maintainable Max/MSP patches using MaxMCP's MCP tools.
This skill provides comprehensive guidelines for creating well-organized, maintainable Max/MSP patches using MaxMCP's MCP tools.
Before creating a patch, verify:
get_frontmost_patch or list_active_patches to identify the targetget_objects_in_patch to understand current stateAlways follow the top-to-bottom, left-to-right signal flow convention:
[Input Sources] ← Top of patch
↓
[Processing] ← Middle
↓
[Output/Display] ← Bottom of patch
Use get_avoid_rect_position to find safe positions that don't overlap existing objects:
// Before adding an object, find a safe position
const position = await mcp.get_avoid_rect_position({
patch_id: "...",
near_x: 100,
near_y: 200,
width: 80,
height: 20
});
Align objects to a consistent grid:
Group related objects into functional sections:
パッチはセクション単位で段階的に構築する。全体を一度に作らず、5フェーズで進める。
実装を開始する前に、スキルのルールをプランの設計制約として組み込む。
⚠ Phase 0 を飛ばした場合: 設計段階でルールを適用しないと、実装後に trigger の outlet 順序の間違い、UI オブジェクトの配置ミス(patching_rect で UI 優先配置 → 長距離・上向き接続の大量発生)、_parameter_order の依存チェーン不整合などが発覚し、パッチ全体の再構築が必要になる。
信号フロー設計: 全セクションの依存関係を描き、上→下フローを確保
接続設計: trigger の outlet 順序と下流の hot/cold inlet の整合性を設計
pack / pak に接続する trigger は、cold inlet → 右 outlet、hot inlet → 左 outletパラメータ復元順序設計: _parameter_order を復元依存チェーン全体で設計
_parameter_range を設定するチェーン → 範囲内で値を復元するパラメータより先アトリビュート計画: 各オブジェクトに必要なアトリビュートを MCP Notes のテンプレートで事前に列挙
関連スキルの参照: 作業内容に応じて以下のスキルをロードし、設計制約として適用する
| スキル | 条件 | 参照すべきルール |
|---|---|---|
m4l-techniques | M4L デバイス開発時(常時) | live.observer パターン、pattr 永続化、namespace ルール、_parameter_order 設計 |
max-techniques | poly~, pattr, signal 処理等 | pattr range 制限、cascading init |
max-resources | オブジェクトの outlet/inlet 構造が不明な時 | リファレンスページで確認してから設計 |
Why Phase 0 が必要: プランが承認された後にルールを適用しても、設計自体が間違っていれば大量の手戻りが発生する。
前提条件: Phase 0 の設計が完了していること(信号フロー設計、接続設計、_parameter_order 設計、アトリビュート計画)。
各セクションを独立して完成させる。セクション間の接続はこのフェーズでは行わない。
⚠ セクション単位を飛ばして全体を一括構築した場合: Phase 8 検証(重複・交差・上向き検出)で全オブジェクト・全パッチコードを対象に確認が必要になる。セクション単位であれば検証対象はセクション内のオブジェクトのみで済むが、一括構築では変更のたびにパッチ全体の大量のオブジェクトを再確認することになり、トークン消費と作業量が爆発する。
organize-patch(セクション内モード)でレイアウト整理このフェーズ完了時点で、各セクションは内部レイアウトが完成し、サイズが固定される。
前提条件:
⚠ Phase 1 未完了で Phase 2 に進んだ場合: セクション単位でまとめておけばグループとして移動するだけで済むが、セクションが未確定だと個々のオブジェクトの座標を1つずつ計算・移動することになる。セクションは簡易なグループ化であり、これを飛ばすとレイアウト作業の複雑さが爆発する。
確定した各セクションを、セクション間接続を考慮して合理的な位置に配置する。
配置パターン:
直列配置(順次依存): 並列配置(合流型依存):
[Section A] [Section A] [Section B]
+80-100px gap ↓ ↓
[Section B] ← 合流 →
+80-100px gap [Section C]
[Section C]
前提条件:
⚠ Phase 2 未完了で Phase 3 に進んだ場合: セクション位置が確定していない状態で patchcord を接続すると、カオスなパッチコードが大量生産される。その状態でパッチコードの整理を試みても、より複雑なスパゲッティを生むだけで収束しない。
セクション配置が確定した後、セクション間の patchcord を接続する。
connect_max_objects でセクション間の patchcord を追加set_patchline_midpoints で経路を最適化organize-patch(Phase 8 検証)で重複・交差がないか確認前提条件:
⚠ Phase 4 を飛ばした場合: 生成時のチェックリスト(add_max_object の後)は個々のオブジェクトを対象とするため、パッチ全体での一貫性(ペア間の設定整合、_parameter_order の依存チェーン整合)は検出できない。これらの問題はユーザーが実際に保存・復元を試すまで発覚せず、原因の特定が極めて困難になる。
パッチ全体を対象とした一括検証を行う。
全 live.* UI オブジェクトと全 pattr の設定を get_object_attribute で読み戻し、以下を確認:
live. UI オブジェクト*:
_parameter_initial_enable が 1 か_parameter_initial が設定されているか_parameter_type と _parameter_unitstyle の整合性(Float(0) → Float(1))pattr:
parameter_enable 1, _parameter_invisible 1, _parameter_modmode 0, parameter_mappable 0 が設定されているか_parameter_initial_enable が 1 か_parameter_range がデータ型に応じた適切な範囲か対になるオブジェクト、同一グループのオブジェクトが同じ設定パターンを持つか確認:
_parameter_type, _parameter_unitstyle, _parameter_initial_enable, _parameter_range が一致するかparameter_enable, _parameter_invisible, _parameter_modmode, parameter_mappable が同じパターンか_parameter_order の読み戻し検証全パラメータの _parameter_order を get_object_attribute で読み戻し、以下を検証:
_parameter_range を設定するチェーン(pattr → pack → prepend → UI)が、範囲内で値を復元する UI オブジェクトより先かscale / pak / pack 等の複数 inlet オブジェクトで、hot inlet (0) に接続するパラメータが最後に復元されるかパッチ全体を対象とした最終レイアウト検証:
(Phase 1 の各セクションで実施済みの Phase 8 検証を、パッチ全体で再度実行)
各 MCP 操作の前後に実行すべき確認事項。スキルの原則を操作レベルで適用するためのチェックリスト。
⚠ このチェックリストを飛ばした場合: 後工程での修正以前に、設定し忘れによるバグが大量発生する。パラメータ名がデフォルト("live.numbox[1]")のまま、presentation が 1 のまま、_parameter_initial_enable が 0 のまま等、原因特定に膨大な時間と労力を費やすのは Claude 自身。生成直後に確認すれば数秒で済む作業を、後から探すと何倍もかかる。
get_objects_in_patch でオブジェクトのテキストを確認し、@ 構文のアトリビュートが反映されているか検証set_object_attribute で presentation 0 を設定_parameter_longname を varname に合わせて設定_parameter_initial_enable 1 を設定_parameter_initial を設定get_object_attribute で _parameter_type, _parameter_unitstyle, _parameter_range が意図通りか確認text / texton ラベルを設定replace_object_text でテキストを設定parameter_enable 1, _parameter_invisible 1, _parameter_modmode 0, parameter_mappable 0 を設定_parameter_range をデータに応じた範囲に設定(Float: [-100000, 100000] 等)_parameter_type をデータ型に応じて設定(Float: 0, blob: 3 等)_parameter_initial_enable 1 を設定⚠ このチェックリストを飛ばした場合: outlet/inlet の役割を推測で接続し、動作しない接続を作成する。ユーザーに指摘されて切断→リファレンス確認→再接続のサイクルが発生し、1回の確認で済む作業が3回以上のやり取りになる。trigger の outlet 順序を間違えると、hot/cold の実行順序が逆転し、値が格納される前に pack が発火する等のロジック不具合が発生する。
get_object_io_info で接続元の outlet 数と接続先の inlet 数を確認trigger から接続する場合:
pattr から接続する場合:
max-resources スキルでリファレンスを必ず確認する。推測による接続は手戻りの最大の原因となる⚠ この検証を飛ばした場合: 上向き接続、オブジェクト重複、パッチコードとオブジェクトの交差がユーザーの目視確認まで検出されない。全て座標データから機械的に検出可能な問題であり、ユーザーに指摘される前に自分で修正すべき問題。
一連のレイアウト操作が完了した後に必ず実行する:
get_objects_in_patch で全オブジェクトの矩形 (position + size) を取得get_patchlines で全パッチコードの start_point, end_point, midpoints を取得start_point.y > end_point.y かつミッドポイントなし → オブジェクト移動または U-shape ミッドポイント追加⚠ 依存チェーンを考慮せず個別に order を設定した場合: pack だけでなく、多くのオブジェクトの cold inlet に必要な値が代入されないままオブジェクトが動作(誤動作)する。メッセージの順序に起因するバグは原因が非常に分かりづらく、特定と修正に膨大な時間と労力を費やすことになる。_parameter_range が設定される前に値を復元すると、デフォルト範囲 [0, 127] でクランプされ、保存した値が失われる。
パラメータを設定する前に、復元依存チェーン全体を設計する:
pack / pak の hot/cold inlet 構造を特定scale 等の複数 inlet オブジェクトで、hot inlet (0) と cold inlet の依存関係を特定_parameter_range を設定するチェーンを先に復元_parameter_order を get_object_attribute で読み戻し、依存チェーンとの整合性を確認。Phase 4(完成検証)でも再検証するAlways provide meaningful varnames for important objects:
await mcp.add_max_object({
patch_id: "...",
object_type: "cycle~",
args: "440",
varname: "osc_main", // Meaningful, descriptive name
position: [100, 200]
});
Naming patterns:
osc_* for oscillatorsfilt_* for filtersenv_* for envelopesgain_* for gain controlsctrl_* for UI controlsin_* / out_* for I/OConnect objects using their varnames:
await mcp.connect_max_objects({
patch_id: "...",
source_varname: "osc_main",
source_outlet: 0,
dest_varname: "gain_master",
dest_inlet: 0
});
Connection rules:
get_patch_info to check object connectionscycle~ → *~ → dac~
midiin → midiparse → [processing] → noteout
For complex patches, use subpatchers (p object):
Max の実行モデル(hot/cold inlet)と安全なメッセージ出力パターン。全てのパッチ作業の前提知識。
Key topics:
trigger outputs right-to-leftpack vs pak (controlled vs any-inlet triggering)message boxes — use trigger, prepend, append insteadtrigger as the safest constant parameter sourcezl.reg for safe list storage, pack / pak for list constructionSee Execution Model & Messaging Reference
オブジェクトテキストの記述規則と効率的なコーディングパターン。
Key topics:
trigger → t, int → i, etc.)scale 0. 1. not scale 0 1)scale exponent argument for integrated curve mapping (replacing pow + scale)*) as a compact alternative to gate + iSee Object Text Conventions Reference
| Tool | Purpose |
|---|---|
list_active_patches | List registered patches |
get_frontmost_patch | Get currently focused patch |
get_objects_in_patch | List objects in a patch |
get_patch_info | Get patch metadata |
add_max_object | Create a new object |
set_object_attribute | Modify object properties |
get_object_value | Get current value (number, slider, etc.) |
connect_max_objects | Create patchcord |
disconnect_max_objects | Remove patchcord |
get_patchlines | List all patchcords with coordinates and midpoints |
set_patchline_midpoints | Add/remove midpoints to fold patchcords |
remove_max_object | Delete an object |
get_avoid_rect_position | Find safe position |
get_console_log | Retrieve Max console messages |
npx claudepluginhub signalcompose/maxmcpOrganizes Max/MSP patch layouts by adjusting object positions, sizes, and patchcord routing in sections or full patches. Useful after edits, additions, or user requests for tidy layouts.
Creates a reusable DAW mix template with standardized bus architecture, channel strip groups, parallel compression, and processing chains to streamline session setup and ensure consistent signal flow.
Creates and manages TouchDesigner networks via MCP API: operator creation/chaining/layout, rendering, GLSL shaders, error checking, data conversion (CHOP/SOP/POP/TOP/DAT).