MIDI MCP Server について
MIDI MCP Server は、構造化された JSON の楽曲データから AI が MIDI ファイルを生成できるようにする MCP サーバーです。コードネームの入力に対応し、ピアノロールのプレビュー画面を備えています。プログラムで作曲を行うユーザーを想定しています。
主な機能
- 01create_midi ツールによる MIDI ファイル生成
- 02parse_chord ツールによるコード構成音の取得
- 03MIDI 番号、音名、音高配列、コード名による音高指定
- 0425 種類以上のコードの種類に対応
- 05付点や三連符を含む柔軟な音価の指定
- 06内蔵の音楽理論リファレンス 7 件
活用シーン
- 01プロンプトから多声部の合唱やメロディの断片を生成
- 02編曲前にコードの構成音を確認
- 03MCP クライアントの会話内でピアノロールと音声を再生
MCP 対応
このプロジェクトは MCP サーバーであり、create_midi と parse_chord の 2 つのツールを MCP クライアントに公開し、音楽理論の文書を MCP リソースとして提供します。stdio、HTTP、Cloudflare Workers 上のリモートサーバーとして動作します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MIDI MCP サーバー
AI による MIDI 作曲のための Model Context Protocol(MCP) サーバーです。コード名に対応し、インタラクティブなピアノロールプレビュー UI と複数のデプロイモードを備え、構造化された JSON データから MIDI ファイルを生成します。

Agent Skills のアプローチをお探しですか? 少ないコンテキストで、より良い曲を作曲できます: tubone24/midi-agent-skill
機能
- 2 つの MCP ツール:
create_midi(インタラクティブプレビュー UI 付き)とparse_chord - 豊富な音高入力:MIDI 番号、音名文字列(
"C4")、音高配列、コード名("Cmaj7") - コードライブラリ:メジャー、マイナー、ディミニッシュ、オーギュメント、7th、maj7、m7、sus2、sus4、パワーコードなど、25 種類以上のコードクオリティに対応
- 柔軟な音価:数値の拍、標準文字列(
'4'、'8')、付点('d4')、三連符('T8') - 音楽理論リソース:MCP リソースとして利用できる、組み込みのリファレンスドキュメント 7 件
- 3 つのトランスポートモード:stdio、HTTP、または Cloudflare Workers(リモート)
- MCP App UI:会話内に直接レンダリングされるピアノロールの可視化とオーディオ再生
デプロイ方法
オプション A — リモート(Cloudflare Workers)
事前にデプロイされたリモートサーバーを利用できます:
https://midi-mcp-server.tubone24.workers.dev/mcp
Streamable HTTP に対応する任意の MCP クライアント(例:Claude.ai)に追加します:
{
"mcpServers": {
"midi": {
"type": "http",
"url": "https://midi-mcp-server.tubone24.workers.dev/mcp"
}
}
}
オプション B — ローカル stdio(デスクトップクライアントに推奨)
ローカル stdio サーバーとしてビルドして設定します:
npm install
npm run build
{
"mcpServers": {
"musicComposer": {
"command": "node",
"args": ["/path/to/midi-mcp-server/build/index.js"]
}
}
}
オプション C — ローカル HTTP
ローカルの Streamable HTTP サーバーとして実行します:
node build/index.js --http
# or with a custom port:
node build/index.js --http --port=8080
サーバーは以下を公開します:
POST /mcp— MCP Streamable HTTP エンドポイントGET /health— ヘルスチェック({"status":"ok","version":"0.2.0"})
ツール
create_midi
構造化された作曲データから MIDI ファイルを生成します。base64 エンコードされた MIDI を返し、対応する MCP クライアント(MCP App)では、オーディオ再生付きのインタラクティブなピアノロールプレビューをレンダリングします。

入力
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
title | string | ✓ | 作曲のタイトル |
composition | object | ✓ | 作曲データ(下記のスキーマを参照) |
出力(構造化コンテンツ)
| フィールド | 型 | 説明 |
|---|---|---|
midiBase64 | string | base64 エンコードされた MIDI ファイルデータ |
title | string | 作曲のタイトル |
bpm | number | 使用したテンポ |
trackCount | number | 生成したトラック数 |
parse_chord
コード名を解析し、その構成音の MIDI 音高と音名を返します。作曲前にボイシングを確認するのに便利です。
入力
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
chord | string | ✓ | コード名。例:"Cmaj7"、"F#m7"、"G7sus4" |
octave | number | — | ルート音のオクターブ(デフォルト:4) |
出力例
{
"chord": "Cmaj7",
"octave": 4,
"midiNumbers": [60, 64, 67, 71],
"noteNames": ["C4", "E4", "G4", "B4"]
}
作曲スキーマ
{
"bpm": 120, // tempo (also accepted: "tempo")
"timeSignature": { "numerator": 4, "denominator": 4 }, // optional, default 4/4
"tracks": [
{
"name": "Piano", // optional
"instrument": 0, // GM program number 0–127 (optional)
"notes": [
{
"pitch": 60, // MIDI number, note name "C4", or array [60, 64, 67]
"chord": "Cmaj7", // OR use chord name (overrides pitch)
"beat": 1, // beat position (1-based); OR use startTime
"startTime": 0, // tick offset (alias: "time")
"duration": "4", // see Duration Reference below
"velocity": 100, // 0–127 (optional, default 100)
"channel": 0 // MIDI channel 0–15 (optional)
}
]
}
]
}
音高の入力形式
| 形式 | 例 | 説明 |
|---|---|---|
| MIDI 番号 | 60 | 標準 MIDI 音符番号(0–127) |
| 音名 | "C4" | 音名の文字 + 任意の変化記号 + オクターブ |
| 音高配列 | [60, 64, 67] | 同時に演奏する複数の音高 |
| コードフィールド | chord: "Cmaj7" | コード名を自動的に展開 |
対応する変化記号:#(シャープ)、b(フラット)。例:"F#5"、"Bb3"。
音価のリファレンス
| 値 | 説明 |
|---|---|
'1' | 全音符 |
'2' | 2分音符 |
'4' | 4分音符 |
'8' | 8分音符 |
'16' | 16分音符 |
'32' | 32分音符 |
'd1' 'd2' 'd4' 'd8' 'd16' | 付点音符 |
'dd4' | 付点4分音符(複付点) |
'T4' 'T8' … | 3連符 |
4(数値) | 拍に基づく指定:1=4分音符、2=2分音符、4=全音符、0.5=8分音符 |
対応するコードクオリティ
| クオリティ | 例 | 説明 |
|---|---|---|
(なし) / maj | C、Cmaj | メジャー |
m / min | Dm | マイナー |
dim | Bdim | ディミニッシュ |
aug | Eaug | オーギュメント |
7 | G7 | ドミナント7th |
maj7 / M7 | Cmaj7 | メジャー7th |
m7 / min7 | Am7 | マイナー7th |
dim7 | Bdim7 | ディミニッシュ7th |
m7b5 | Bm7b5 | ハーフディミニッシュ |
aug7 | Eaug7 | オーギュメント7th |
6 / m6 | C6、Am6 | 6th |
9 / maj9 / m9 | G9 | 9th系 |
add9 | Cadd9 | 9thを追加 |
11 / 13 | C11 | 拡張コード |
sus2 / sus4 | Gsus4 | サスペンデッド |
7sus4 / 7sus2 | G7sus4 | 7thサスペンデッド |
power / 5 | G5 | パワーコード |
MCP リソース
サーバーは、音楽理論のリファレンス文書7件をMCPリソースとして公開します。
| URI | 説明 |
|---|---|
music-theory://harmony | 音程、コードの種類、ダイアトニックコード、カデンツ、声部連結 |
music-theory://chord-progressions | ムード/ジャンル別の一般的なコード進行、代理コード、転調 |
music-theory://counterpoint | 定旋律対位法の規則、協和/不協和、進行の種類 |
music-theory://modes-scales | ダイアトニックモード、マイナースケールのバリエーション、ペンタトニック/ブルース、ジャンルガイド |
music-theory://orchestration | 楽器の音域、GMプログラム番号、テクスチャの種類 |
music-theory://rhythm-patterns | 拍子記号、MIDI音価のリファレンス、ジャンル別グルーヴ |
music-theory://voice-leading | 禁則となる平行進行、ボイシングの戦略、非和声音 |
リソースの読み込みに対応したMCPクライアントは、これらをコンテキストとしてAIに渡し、音楽理論に基づいた作曲を可能にします。
作曲例
const composition = {
bpm: 120,
timeSignature: { numerator: 4, denominator: 4 },
tracks: [
{
name: "Piano",
instrument: 0,
notes: [
{ chord: "Cmaj7", beat: 1, duration: "2", velocity: 90 },
{ chord: "Am7", beat: 3, duration: "2", velocity: 90 },
{ chord: "Fmaj7", beat: 5, duration: "2", velocity: 90 },
{ chord: "G7", beat: 7, duration: "2", velocity: 90 }
]
},
{
name: "Melody",
instrument: 0,
notes: [
{ pitch: "E4", beat: 1, duration: "4", velocity: 100 },
{ pitch: "G4", beat: 2, duration: "4", velocity: 100 },
{ pitch: "A4", beat: 3, duration: "2", velocity: 110 }
]
}
]
};
デモ
以下のプロンプトで、8小節の旋律的短調の合唱曲を生成します。
Create an 8-bar choral piece in a slightly minor, melodic scale.
https://github.com/user-attachments/assets/e20ebef0-fdbf-4e72-910d-41b94183f9d9
ビルドと開発
npm install
# Full build (UI + server)
npm run build
# Build steps individually
npm run build:ui # Vite — builds the MCP App preview HTML
npm run build:server # tsc — compiles TypeScript server
# Deploy to Cloudflare Workers
npm run deploy
# Run tests
npm test
npm run test:coverage
依存関係
| パッケージ | 用途 |
|---|---|
@modelcontextprotocol/sdk | MCP サーバーの実装(stdioおよびHTTPトランスポート) |
@modelcontextprotocol/ext-apps | MCP Apps拡張機能 — 会話内でのインタラクティブなUI |
midi-writer-js | MIDIファイルの生成 |
@tonejs/midi | MIDIの解析(プレビューUI) |
soundfont-player | プレビューUIでのオーディオ再生 |
zod | 入力スキーマの検証 |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
