mcpField
P
PlayByKey Music Theory

PlayByKey Music Theory

ローカル
github.com/DigitalBrewLLCメディア・デザイン16 週間前に更新

PlayByKey Music Theory について

PlayByKey Music Theoryは、@playbykey/theoryエンジンを呼び出し可能な音楽理論ツールとして公開するMCPサーバーです。AIアシスタントがスケール、コード、移調、MIDI変換などを決定論的に処理できます。

主な機能

  1. 01スケール、モード、音程の計算
  2. 02コードの構築と特定
  3. 03ダイアトニックコードと定番進行の生成
  4. 04キー間の音符の移調
  5. 05音符をMIDI番号や周波数に変換
  6. 06音名表記と調号の計算

活用シーン

  1. 01音符が指定したスケールに含まれるか確認
  2. 02音符の集合からコードを特定
  3. 03指定したキーでコード進行を作成
  4. 04音符とオクターブをMIDI番号や周波数に変換

MCP 対応

@playbykey/theoryの機能をMCPクライアント向けのツールとして公開し、アシスタントが音楽理論の関係を直接照会できるようにします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"com-playbykey-theory": {
"command": "npx",
"args": [
"-y",
"@playbykey/theory-mcp"
]
}
}
}
起動コマンドnpx -y @playbykey/theory-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@playbykey/theory-mcp1.6.0

ツール

32

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
modeenumはいモード名ionian | dorian | phrygian | lydian | mixolydian | aeolian | locrian
rootenumはいルート音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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。