PlayByKey Music Theory について
PlayByKey Music Theoryは、@playbykey/theoryエンジンを呼び出し可能な音楽理論ツールとして公開するMCPサーバーです。AIアシスタントがスケール、コード、移調、MIDI変換などを決定論的に処理できます。
主な機能
- 01スケール、モード、音程の計算
- 02コードの構築と特定
- 03ダイアトニックコードと定番進行の生成
- 04キー間の音符の移調
- 05音符をMIDI番号や周波数に変換
- 06音名表記と調号の計算
活用シーン
- 01音符が指定したスケールに含まれるか確認
- 02音符の集合からコードを特定
- 03指定したキーでコード進行を作成
- 04音符とオクターブをMIDI番号や周波数に変換
MCP 対応
@playbykey/theoryの機能をMCPクライアント向けのツールとして公開し、アシスタントが音楽理論の関係を直接照会できるようにします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
32掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| mode | enum | はい | モード名ionian | dorian | phrygian | lydian | mixolydian | aeolian | locrian |
| root | enum | はい | ルート音C | C# | D | D# | E | F | F# | G | G# | A | A# | B | Db | Eb | Gb | Ab | Bb |
詳細
@playbykey/theory-mcp
@playbykey/theory を、AI が呼び出せる音楽理論ツールとして公開する MCP サーバーです。
MCP を使うと、AI アシスタントはトレーニングデータからスケール、モード、キーの関係性を推論する代わりに、理論エンジンをツールとして直接呼び出せます。音楽理論の関係性は、固定された音程とスケール度数の関係に基づき、決定論的に解決されます。
同じセットアップ手順とすべてのツールのリファレンスについては、@playbykey/mcp ページをご覧ください。
インストール
グローバルインストールは不要です。npx が必要に応じてパッケージを取得して実行します。Node.js(npx 用)が必要です。
Claude Desktop
Claude Desktop の設定から MCP 設定ファイル(claude_desktop_config.json)を編集します。
{
"mcpServers": {
"theory": {
"command": "npx",
"args": ["-y", "@playbykey/theory-mcp"]
}
}
}
保存後に Claude Desktop を再起動し、設定で theory が接続済みと表示されることを確認します。
Cursor
設定ファイルの場所:
- グローバル(すべてのプロジェクト):
~/.cursor/mcp.json - プロジェクトのみ: プロジェクトルートの
.cursor/mcp.json
{
"mcpServers": {
"theory": {
"command": "npx",
"args": ["-y", "@playbykey/theory-mcp"]
}
}
}
保存後に Cursor を再起動し、MCP 設定で theory が接続済みと表示されることを確認します。
Claude Code
プロジェクトスコープ(推奨) - リポジトリのルートに .mcp.json をコミットすると、git clone 後にすべてのコントリビューターがサーバーを利用できます。
{
"mcpServers": {
"theory": {
"command": "npx",
"args": ["-y", "@playbykey/theory-mcp"]
}
}
}
ローカルスコープ - 何もコミットせず、このプロジェクトのみで使用するサーバーを登録します。
claude mcp add theory npx -y @playbykey/theory-mcp
グローバルスコープ - このマシン上のすべてのプロジェクトで使用するサーバーを登録します。
claude mcp add theory npx -y @playbykey/theory-mcp --scope user
claude mcp list を実行して、theory が接続済みと表示されることを確認します。
ツール
モード
get_mode_notes - ダイアトニックモードの7つの音を返します。
入力:root(音)、mode(モード名)
例:get_mode_notes("D", "dorian") → D、E、F、G、A、B、C
get_parent_scale_modes - 親キーの7つのモードローテーションをすべて返します。
入力:root(音)、mode(モード名)
例:get_parent_scale_modes("D", "dorian") → C ionian、D dorian、E phrygian、F lydian、G mixolydian、A aeolian、B locrian
get_modal_root - 親(メジャー)キー内のモードのルート音を返します。
入力:parent_key(音)、mode(モード名)
例:get_modal_root("C", "dorian") → D
get_relative_minor - メジャーキーの平行短調のルート音を返します。
入力:major_key(音)
例:get_relative_minor("C") → A
get_relative_major - マイナーキーの平行長調のルート音を返します。
入力:minor_key(音)
例:get_relative_major("A") → C
get_mode_info - モードの表示用メタデータ(名前、スケール度数、特徴の説明)を返します。
入力:mode(モード名)
例:get_mode_info("dorian") → Dorian、度数2、「6度を半音上げたマイナー」
五度圏
get_circle_of_fifths - C から始まる完全五度上昇順で、12の半音階の音をすべて返します。
入力:なし
例 → C、G、D、A、E、B、F#、C#、G#、D#、A#、F
調号
get_key_signature - 指定したキーをメジャーキーの主音として扱い、シャープまたはフラットの数を返します(このツールはマイナーキーの調号を公開しません)。慣例的に記譜される異名同音の表記に解決されます。get_key_signature("A#") は A# 自身ではなく、Bb メジャーのフラット2つを返します。表記どおりのルート音の数を取得するには、get_root_letter とともに get_spelled_accidental_count を使用してください。
入力:key(音)
例:get_key_signature("D") → シャープ2つ
スケール
get_scale_notes - スケールタイプに応じて、スケールの音を返します。
入力:root(音名)、scale_type(次のいずれか:major、blues、pentatonic-major、pentatonic-minor、harmonic-minor、melodic-minor、chromatic)
例:get_scale_notes("A", "blues") → A、C、D、D#、E、G
build_note_map - 音名、スケール内の度数(1始まり)、ルートからの半音オフセットを含む、音ごとの構造化データを返します。
入力:root(音名)、scale_type
例:build_note_map("C", "major") → [{note:"C", scaleDegree:1, semitoneOffset:0}, {note:"D", scaleDegree:2, semitoneOffset:2}, ...]
get_scale_degree - スケール内における音の度数(1始まり)を返します。音がスケールに含まれない場合は null を返します。
入力:root(音名)、scale_type、note(音名)
例:get_scale_degree("C", "major", "E") → 3
is_note_in_scale - 指定された音がスケールに含まれるかどうかを返します。
入力:root(音名)、scale_type、note(音名)
例:is_note_in_scale("C", "major", "F#") → false
get_melodic_minor_notes - 上行メロディック・マイナー・スケールの7つの音を返します。
入力:root(音名)
例:get_melodic_minor_notes("C") → C、D、D#、F、G、A、B
get_melodic_minor_mode_notes - メロディック・マイナーのモードの7つの音を返します。
入力:root(音名)、mode(次のいずれか:melodic-minor、dorian-b2、lydian-augmented、lydian-dominant、mixolydian-b6、locrian-nat2、altered)
例:get_melodic_minor_mode_notes("C", "altered") → C、C#、D#、E、F#、G#、A#
get_harmonic_minor_mode_notes - ハーモニック・マイナーのモードの7つの音を返します。
入力:root(音名)、mode(次のいずれか:harmonic-minor、phrygian-dominant)
例:get_harmonic_minor_mode_notes("C", "phrygian-dominant") → C、C#、E、F、G、G#、A#
get_bebop_scale_notes - ビバップ・スケールのバリエーションの8つの音を返します。ダイアトニック・スケールに、クロマチックな経過音を1つ加えたスケールです。
入力:root(音名)、type(次のいずれか:bebop-dominant、bebop-major、bebop-dorian)
例:get_bebop_scale_notes("C", "bebop-dominant") → C、D、E、F、G、A、A#、B
インターバル
resolve_interval - ルートを基準として、名前付きインターバルの開始音と終了音を返します。
入力:root(音名)、interval(インターバル ID。例:major_3rd、perfect_5th)
例:resolve_interval("C", "major_3rd") → C から E(4半音)
get_semitone_distance - 2つの音の上行方向の半音数(0~11)を返します。
入力:from(音名)、to(音名)
例:get_semitone_distance("C", "E") → 4
音名の表記
get_sharps - 音名のリストを標準的なシャープ表記に変換します。多くのツールではフラット表記の入力もそのまま受け付けますが、get_flats と get_enharmonic_labels ではシャープ表記の入力が必要です。この2つを呼び出す前に、これを使ってフラット表記の音名を正規化してください。
入力:notes(シャープまたはフラット)
例:get_sharps(["Db", "C#", "D"]) → C#, C#, D
get_flats - シャープ表記の音名のリストをフラット表記に変換します。ナチュラルの音名は変換されません。
入力:notes(シャープ表記である必要があります)
例:get_flats(["C#", "D"]) → Db, D
get_enharmonic_labels - シャープ表記の音名のリストについて、シャープとフラットを組み合わせた表示ラベルを返します。ナチュラルの音名は変換されません。
入力:notes(シャープ表記である必要があります)
例:get_enharmonic_labels(["C#", "D"]) → Db/C#, D
get_root_letter - シャープまたはフラットの指定に基づき、ルートをどの音名(A~G)で表記すべきかを解決します。spell_diatonic_scale に渡されます。
入力:root(音名)、preference(sharp または flat)
例:get_root_letter("F#", "flat") → G
spell_diatonic_scale - 7音のダイアトニックスケールを、音名A~Gをそれぞれ1回ずつ使う正しい表記に変換します。通常の音名だけでは表せない表記(B#、E#、Cb、Fb、ダブルシャープ、ダブルフラット)にも対応します。
入力:notes(スケール順の7音)、root_letter(get_root_letter から取得)
例:spell_diatonic_scale(["F#","G#","A#","B","C#","D#","F"], "F") → F#, G#, A#, B, C#, D#, E#
get_spelled_accidental_count - 7音のダイアトニックスケールを正しく表記した場合のシャープまたはフラットの数と、そのうちダブル臨時記号がいくつあるかを返します。メジャースケールとナチュラルマイナースケールのどちらにも同じように使用できます。調とその平行短調では臨時記号の数が同じです。
入力:notes(スケール順の7音)、root_letter(get_root_letter から取得)
例:get_spelled_accidental_count(["A#","C","D","D#","F","G","A"], "A") → 7 sharps (3 double sharps)
コード
get_chord_notes - ルートとコードタイプを指定して、コードの構成音を返します。
入力:root(音名)、chord_type(22種類のコードタイプのいずれか。例:major-triad、dominant-7th、major-13th)
例:get_chord_notes("C", "major-triad") → C, E, G
get_diatonic_chords - 調/モードの7つのダイアトニックトライアドを、各スケールディグリーにつき1つ、ディグリー順に返します。
入力:root(音名)、mode(モード名、省略可。デフォルトはionian)
例:get_diatonic_chords("C", "ionian") → C major-triad, D minor-triad, E minor-triad, F major-triad, G major-triad, A minor-triad, B diminished-triad
get_chord_by_degree - 調/モードにおける指定したスケールディグリー(1~7)のダイアトニックコードを返します。
入力:degree(整数1~7)、root(音名)、mode(モード名、省略可。デフォルトはionian)
例:get_chord_by_degree(5, "C", "ionian") → G major-triad
get_available_inversions - コードの構成音数に基づき、そのコードタイプで有効な転回形の番号を返します。
入力:chord_type
例:get_available_inversions("major-9th") → 0, 1, 2, 3, 4
get_chord_inversion - 指定した転回形のコードトーンが最低音になるよう、コードの構成音を並べ替えます。
入力:root(音名)、chord_type、inversion(整数。指定可能な範囲はコードタイプによって異なります)
例:get_chord_inversion("C", "major-triad", 1) → E, G, C
detect_chords - 音のセットに一致するすべてのコード(ルート、タイプ)を識別し、ルートをキーとして返します。
入力:notes(音名の配列。順序は任意)
例:detect_chords(["E", "C", "G"]) → { C: [major-triad] }
進行
get_progression_in_key - 指定したキーで、名前付きのカタログ進行をコードとして順番に出力します。
入力:progression_id(I-V-vi-IV、ii-V-I、I-IV-V、vi-IV-I-V、12-bar-blues、I-vi-IV-V、I-vi-ii-V のいずれか)、root(音名)
例:get_progression_in_key("I-V-vi-IV", "C") → C メジャートライアド、G メジャートライアド、A マイナートライアド、F メジャートライアド
get_roman_numeral - モード内の音階度数を示すローマ数字を返します。大文字・小文字と接尾辞は、ダイアトニックトライアドの種類を表します。
入力:degree(整数 1~7)、mode(モード名、省略可能。既定値はイオニアン)
例:get_roman_numeral(7, "ionian") → vii°
移調
transpose - 2つの主音の半音数の差に基づいて、音のセットをあるキーから別のキーへ移調します。
入力:notes(音名の配列)、from_root(音名)、to_root(音名)
例:transpose(["C", "E", "G"], "C", "D") → D、F#、A
MIDI と周波数
note_to_midi - 科学的ピッチ表記(C4 = 中央のC = MIDI 60)を使用して、指定したオクターブの音のMIDIノート番号を返します。
入力:note(音名)、octave(整数)
例:note_to_midi("C", 4) → 60
midi_to_note - 指定したMIDIノート番号に対応する音名とオクターブを返します。note_to_midi の逆関数です。
入力:midi_number(整数 0~127)
例:midi_to_note(69) → A4
note_to_frequency - 平均律で、指定したオクターブの音の周波数をHz単位で返します。A4 = 440Hzです。
入力:note(音名)、octave(整数)
例:note_to_frequency("A", 4) → 440 Hz
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。