Serato DJ library について
Serato DJ libraryは、Seratoの楽曲検索やライブラリ監査を行うローカルMCPサーバーです。DJやライブラリ管理者向けに、BPMとCamelotキーによる選曲を提供し、クレートの書き込みは明示的な有効化と事前確認が必要です。
主な機能
- 01テキスト・BPM・キー・属性で楽曲検索
- 02ライブラリとクレートの閲覧
- 03重複曲や欠損ファイルの監査
- 04確認後にクレートを作成
- 05データベースのスナップショットを読み取り
活用シーン
- 01BPM範囲とCamelotキーで楽曲を検索
- 02重複曲や壊れたパスを確認
- 03曲を選びレビュー後にクレートを作成
MCP 対応
ローカルMCPサーバーとして、MCPクライアントにSeratoライブラリの検索・監査ツールを提供します。既定では読み取り専用で、書き込みを有効にするとクレート変更を仮置きし、確認してから適用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
6掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
serato-dj-mcp
Serato DJ ライブラリについて Claude に質問できます。BPM と Camelot キーからハーモニックミックスができるトラックを探したり、クレートを見たり、重複やファイルの欠落をチェックしたりできます。また、新しいクレートを作成し、書き込む前に内容を確認できます。Model Context Protocol(MCP)を介して動作します。これは、Claude Desktop、Claude Code、Cursor、VS Code などの AI アプリがコンピューター上のツールに接続するための標準です。この小さなローカルサーバーはライブラリから回答し、それ自体がどこかにデータを送信することはありません。
ステータス:実験的です。 1.0 より前の段階で、開発を積極的に進めています。マイナーバージョンでは動作が変わったり、互換性が損なわれたりする場合がありますが、パッチバージョンではそのような変更はありません。
重要
Serato との提携、承認、サポートは受けていません。 Serato と Serato DJ は、それぞれの所有者の商標です。このプロジェクトはリバースエンジニアリングしたデータベースのレイアウトを読み取るため、Serato の更新後に動作しなくなる可能性があります。
質問できること
サーバーを接続すると、いつもどおりアシスタントに話しかけられます。
- 「今年追加した、122〜126 BPM、8A または 9A のトラックを探して。」
- 「8A からハーモニックミックスできる、124 BPM 前後のトラックを教えて。」
- 「Warm Up クレートの中身を、順番どおりに見せて。」
- 「ライブラリをチェックして。重複、ファイルの欠落、どのクレートにも入っていないトラックを調べて。」
- 「ライブラリに BPM またはキーが設定されていないトラックはある?」
クレートへの書き込みを有効にしている場合:
- 「今見つけた20曲から Friday Opening というクレートを作って、書き込む前に一覧を見せて。」その後、Serato を終了してから「ステージングしたクレートを適用して。」
アシスタントが検索を行い、サーバーはライブラリから回答します。依頼された場合は、承認した内容だけを書き込みます。
インストール
macOS で動作します。 macOS 上の Serato DJ Lite 4.0.9 でテスト済みです。テストスイートは Node.js 22.16 および 24 を使い、macOS と Linux の CI で実行されます。Windows は未テストです — 互換性をご覧ください。Claude Desktop 拡張機能と以下の Claude Code のセットアップは macOS で手動テスト済みです。Cursor と VS Code のセットアップは各エディターのドキュメントに従っていますが、テストはしていません。
どの方法でも、サーバーは読み取り専用で起動します。クレートへの書き込みは別途切り替える設定です。詳しくはこちらをご覧ください。
Claude Desktop
拡張機能として(Node.js は不要です)。 最新リリースから serato-dj-mcp-<version>.mcpb をダウンロードし(バージョン 0.1.1 以降のリリースに添付されています)、開いてください。Claude Desktop に内容が表示され、インストールされます。設定でライブラリフォルダーを指定し、クレートへの書き込みや生 SQL を有効にできます。これら3つの設定は、すべて初期状態のままでもかまいません。
または手動で、Node.js 22.16 以降をインストールしたうえで、Settings → Developer → Edit Config を開いてサーバーを claude_desktop_config.json に追加し、Claude Desktop を再起動してください。
{
"mcpServers": {
"serato": {
"command": "npx",
"args": ["-y", "serato-dj-mcp"]
}
}
}
Claude Code
claude mcp add serato -- npx -y serato-dj-mcp
すべてのプロジェクトで使えるようにするには、serato の前に --scope user を追加してください。このリポジトリは、同じコマンドを起動する Claude Code プラグインでもあります。
Cursor
Cursor に追加するか、Claude Desktop と同じ mcpServers エントリを ~/.cursor/mcp.json に追加してください。このリンクを開くと cursor://anysphere.cursor-deeplink/mcp/install?name=serato&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInNlcmF0by1kai1tY3AiXX0= に移動し、Cursor に {"command":"npx","args":["-y","serato-dj-mcp"]} を serato という名前で追加するよう求められます。
VS Code
VS Code にインストール、 またはターミナルから:
code --add-mcp '{"name":"serato","type":"stdio","command":"npx","args":["-y","serato-dj-mcp"]}'
任意のクライアントでのオプション
args の serato-dj-mcp の後にオプションを追加します。例:
"args": ["-y", "serato-dj-mcp", "--allow-writes"]:
--library <path>— Serato のライブラリフォルダー(master.sqliteを含むフォルダー)です。ライブラリが~/Library/Application Support/Seratoにあり、マウント済みドライブ上にある場合も自動的に検出される macOS では不要です。--allow-writes— クレートへの書き込みを許可します。詳細は下記を参照してください。--allow-raw-sql— 開発者向けの読み取り専用 SQL ツールrun_sqlを追加します。
すべてのオプションはオプションに記載されています。
node:sqlite は実験的な Node API であり、stderr に警告が出力されます。MCP プロトコルは stdout 経由で通信するため、これは想定どおりであり、問題ありません。
ソースから実行する場合(開発者向け)
git clone https://github.com/Venut-Technologies/serato-dj-mcp.git
cd serato-dj-mcp
npm ci
npm run build
続いて、"command": "node" と "args": ["/absolute/path/to/serato-dj-mcp/dist/index.js"] を使用するか、claude mcp add serato -- node /absolute/path/to/serato-dj-mcp/dist/index.js を実行します。
サーバーが読み取り、書き込み、送信する内容についてはPRIVACY.mdをご覧ください。ネットワークリクエストは行わず、テレメトリーもありません。
互換性
| Serato DJ 4.x | 対応しています。Serato DJ Lite 4.0.9(ライブラリスキーマ 202)を対象に開発およびテストされています。それ以外の 4.x スキーマバージョンは schema_unknown 警告とともに読み込まれます。Serato DJ Pro 4.x も同じライブラリ形式を使用すると想定されますが、テストされていません。 |
| Serato DJ 3.x | 検出して報告しますが、読み込みません(SQLite ではなく、バイナリ形式の database V2 を使用しています)。 |
| macOS | 対応しています。このプロジェクトは macOS 上で開発され、CI も macOS 上で実行されます。 |
| Windows | 未テストです。サーバーに Windows 固有の処理はありません。自動検出で認識されるのは macOS のレイアウトのみのため、--library を明示的に指定してください。また、ユーザーフォルダー内に macOS 形式のキャッシュおよび状態ディレクトリーが作成されることを想定してください。「Serato が起動中か」の確認には Windows にない ps を使用するため、apply_changes は推測で書き込むのではなく、書き込みを拒否する場合があります。 |
| Linux | Serato は Linux では動作しません。CI では、合成フィクスチャーを使用してテストスイートを実行しています。 |
| Node.js | 22.16 以降が必要です。node:sqlite の backup() が利用できるのはこのバージョン以降のためです。前提としているわけではありません。CI では macOS と Ubuntu 上で、22.16 および 24 の両方を使ってテストスイート全体を実行しています。 |
| Claude Desktop 拡張機能 | お使いの Node.js ではなく、Claude Desktop 独自の Node.js で実行されます。2026-09-24 に macOS 上の Claude Desktop 2.7032.0(組み込み Node.js は 24.21)で手動確認済みです。インストール後、list_libraries と list_crates がライブラリのデータを返しました。 |
このサーバーが Serato ライブラリについて前提としている内容はすべて、各主張の根拠となる測定結果とともにdocs/serato-4x-notes.mdに記載されています。
デフォルトでは読み取り専用、要求に応じて書き込み
デフォルトでは、サーバーが Serato のファイルに書き込むことはありません。 すべての読み取りは、--cache-dir 内のライブラリデータベースのスナップショットコピーを経由するため、Serato の起動中・終了中を問わず、アシスタントからの質問によってライブラリが変更されることはありません。
この動作を拡張するフラグが 2 つあり、指定した場合にのみ追加のツールが登録されます。存在しないツールを誤って呼び出すことはできません。
--allow-raw-sqlはrun_sqlを追加します。スナップショットに対する読み取り専用のSELECTを実行し、生の行を返します。--allow-writesはstage_crate、preview_changes、apply_changes、discard_changesを追加します。書き込みは 2 段階に分かれています。まずクレートをステージングします。この段階ではライブラリに一切触れません。その後、確認を行い、Serato が終了している場合にのみ適用します。書き込みの前には毎回、両方のデータベースをバックアップします。詳細はライブラリへの書き込みをご覧ください。
ツール
list_libraries— このサーバーから参照できるライブラリと、そのバージョン、スキーマバージョン、場所を一覧表示します。ここに表示されるパスは伏せられていないため、--libraryに指定できます。search_tracks— フリーテキスト、BPM、キー、ジャンル、評価、追加日、クレートへの所属、フラグで検索します。調性は Camelot です。Serato 自体がキーを解析できなかったトラックも検索結果に含まれ、キーの取得元はkey_sourceに表示されます。不透明なカーソルを使ったページネーションに対応しています。デフォルトでは、1 ページにつき 25 トラック、9 フィールドを返します。get_tracks—search_tracksが返した ID を使ってトラックを取得します。不明な ID は除外されず、missingに返されます。list_crates— Serato Library の領域にあるクレートと、その表示パス、各クレートに含まれる重複のないトラック数を一覧表示します。スマートクレート、領域のルート、Prepare パネルなど Serato のその他の内部領域は一覧に含まれません。get_crate_tracks— 1 つのクレートに含まれるトラックを、クレート内の順序で返します。指定できるのは Serato Library の領域にあるクレートのみです。audit_library— ライブラリを診断します。デフォルトではすべてのチェックが実行され、件数と最大 10 件のトラック ID の例が報告されます。対象となるのは、BPM がないトラック、キー情報がまったくないトラック、Serato 自体が表示できないキーが設定されたトラック、古い状態としてマークされたトラック、どのクレートにも属していないトラック、ストリーミング専用のトラック、重複トラック、パスが壊れているトラックです。どのトラックがどのトラックと重複しているかが対処に必要な情報であるため、duplicatesは個別の ID ではなくグループを報告します。broken_pathsはデフォルトで Serato 独自の missing フラグを読み取ります。ディスク上も確認するにはcheck_filesystem: trueを渡してください。切断されたドライブに対する stat は数秒間ブロックするため、この確認は明示的な指定が必要です。マウントされていないドライブは、その旨が報告され、そこにあるすべてのトラックが見つからないと判定されることはありません。run_sql— スナップショットのコピーに対して、読み取り専用のSELECTを 1 つ実行します。パスが伏せられず、生の行を返すため、--allow-raw-sqlが指定された場合にのみ登録されます。
--allow-writes を指定した場合:
stage_crate— トラック ID から新しいクレートをステージングします。まだ書き込みは行われません。レスポンスにはステージングされたすべてのトラックがタイトルとアーティスト名付きで表示されるため、確認してください。preview_changes— ステージングされた内容を表示します。format: "detail"を指定すると、各トラックの詳細まで表示されます。apply_changes— ステージングされた内容をすべて一括で書き込みます。全件適用か、まったく適用しないかのいずれかです。Serato の実行中は拒否されます。discard_changes— ステージングされたクレートを 1 つ、またはすべて破棄します。
オプション
--library <path>、--root <dir>(繰り返し指定可)、--cache-dir <dir>、
--state-dir <dir>、--allow-raw-sql、--allow-writes、--help、
--version。SERATO_LIBRARY_PATH は --library の代わりに指定できます。
両方が指定された場合はフラグが優先されます。不明なオプションは無視されず、エラーになります。
ライブラリへの書き込み
書き込みには --allow-writes が必要で、2段階で行われます。データベースへの書き込み中は Serato を終了しておく必要がありますが、モデルは通常、Serato の起動中に動作するためです。stage_crate はいつでも実行できますが、Serato の実行中は apply_changes が拒否されます。その後 Serato を起動すると、数秒以内に新しいクレートが表示されます。
書き込みによって行われること:Serato Library の最上位に、root.sqlite 内の新しいクレートを作成するだけです。既存のクレートを変更または削除したり、トラックを編集したり、master.sqlite、database V2、Subcrates フォルダーに触れたりすることはありません。これらは Serato が自動で再生成します。
書き込みの前には毎回、両方のデータベースが
<state-dir>/backups/<library-id>/<timestamp>/ にバックアップされます(デフォルトの state-dir:
~/Library/Application Support/serato-dj-mcp)。バックアップは最新の10件が保持されます。バックアップ手順まで進んだ apply_changes の試行はすべてバックアップの対象です。トランザクション内で拒否された試行(たとえば名前の競合)も含まれます。そのため、「最新の10件」とは、書き込みに成功した10件ではなく、試行の最新10件を意味します。最も新しいバックアップには、元に戻そうとしている書き込みがすでに含まれている可能性があります。
元に戻すツールはありません。 特定の書き込みを元に戻すには、まず適切なバックアップを見つけます。その apply_changes 呼び出しが返した backup_paths を使うか、<state-dir>/manifests/<library-id>.jsonl を開き、"commit_state" が "committed" の行の backup_paths を使用してください。<library-id> は list_libraries が返す uuid です。該当する2つのパスを確認したら、次の手順を実行します。
- Serato を終了します。
- ライブラリフォルダー内にある
root.sqlite-journalがあれば削除し、master.sqlite-walとmaster.sqlite-shmを削除します。 - バックアップした
root.sqliteとmaster.sqliteをライブラリフォルダーにコピーし、現在のファイルを置き換えます。 ~/Music/_Serato_/Subcrates/<crate name>.crateを削除します。Serato はクレートの同期後にこれをエクスポートしており、データベースをコピーして戻しても削除されません。
これらのファイルを復元すると、そのバックアップの作成後に Serato 自身がライブラリに記録した内容もロールバックされます。
入れ子のクレートには対応していません。この方法で別のクレート内に作成したクレートは、次回 Serato が同期すると削除されます。そのため、すべてのクレートは最上位に作成されます。
プライバシー
同じ内容を、各記述の根拠となるソースファイルを添えた単独のポリシーとして掲載しています: PRIVACY.md。
- すべての処理はお使いのコンピューター上で実行されます。 サーバーは MCP クライアントが起動するローカルプロセスです。テレメトリーを送信せず、分析機能もなく、ネットワークリクエストも行いません。実行する他のプログラムは、書き込みの前に Serato が実行中か確認するための
psだけです。 - 読み取るデータ: Serato のライブラリデータベース。
apply_changesを除き、常に読み取り専用です。audit_libraryのcheck_filesystem: trueを指定した場合は、ディスク上にあるトラックのファイルメタデータも読み取ります。 - 書き込むデータとその場所:
--cache-dir(デフォルト:~/Library/Caches/serato-dj-mcp)には、ライブラリデータベースのスナップショットコピーが保存されます。いつでも安全に削除できます。--state-dir(デフォルト:~/Library/Application Support/serato-dj-mcp)には、ステージングしたクレート、すべての書き込みのマニフェスト、ロックファイル、ライブラリデータベースのバックアップが保存されます。--allow-writesの使用時のみ使われます。削除すると、これらのバックアップも削除されます。--allow-writesを指定すると、apply_changesは Serato のroot.sqliteに新しいクレートを書き込みます。
- コンピューター外に送信される内容は、MCP クライアントによって異なります。 ツールの結果(トラック名、アーティスト名、クレート名、ファイルパス)はアシスタントに送られ、そこからクライアントが使用するモデルプロバイダーに送られます。ホームフォルダー以下のトラックパスは
~に短縮されます。list_libraries、run_sql、apply_changesが返すバックアップパスはフルパスです。気になる場合は、クライアントのデータポリシーを確認してください。
制限事項
何を信頼するかを決める前にお読みください。
- Serato DJ 3.x はサポートされていません。
version: "3.x"として認識・報告されますが、読み取り機能はありません。SQLite ではなく、バイナリ形式のdatabase V2を保存するためです。3.x のライブラリからデータを返すツールはありません。 - 読み取りはスナップショット経由で行われます。 そのため、回答に反映されるのは現在の瞬間ではなく、最後のスナップショット時点のライブラリです。スナップショットは最大 2 秒間再利用されるため、Serato が書き込み中の場合、回答が最大 2 秒遅れることがあります。
--cache-dirに保持されるのは各ライブラリの現在のスナップショットのみで、新しいものが公開されると古いものはすぐに削除されます。 - 2 つの監査チェックは、このプロジェクトで意味を確認できていない列の仕様に基づいています。
staleはis_staleを、streaming_onlyはthird_party_typeを読み取ります。参照ライブラリでは全トラックでどちらもゼロだったため、その意味を断定せずに件数のみを報告します。 ratingとストリーミングフラグは解釈せず、そのまま渡されます。 参照ライブラリの 118 トラックすべてでratingは NULL または 0 だったため、評価スケールの上限は確認できていません。ストリーミングフラグについても、生の列値を超える意味は断定しません。analysis_flagsのビット 2 については断定しますが、フィールドの残りの部分については断定しません。 「Serato が独自の解析を実行した」として読み取ります。これは「BPM がある」と同じ意味ではありません。BPM はファイルのタグから取得される場合もあるためです。flags.analyzedとして公開され、search_tracksで絞り込みに使用できます。2026-09-06 に 118 トラックを測定したところ、106 トラックでビット 2 が設定されており、そのうち 104 トラックに BPM がありました。ビットがクリアだったのは 12 トラックで、そのうち 6 トラックは効果音、残る 6 トラックは Serato 独自の解析ではなくタグから BPM を取得したトラックでした。- フリーテキスト検索は Serato の検索とは異なります。 Serato は自社プロセスだけが利用できる関数でテキストを正規化するため、
qは正規化済みの列と生の列の両方に一致し、アプリケーションでの検索結果と異なる場合があります。 - Serato の書き込み中にページを取得すると、2 つのスナップショットにまたがることがあります。 ページネーションはキーセット方式のため、新しいコピー上の同じ位置から続行し、その旨を
warnings: snapshot_advancedに示します。境目で一部の行が重複または欠落することがあります。 - クレートへの書き込みは新しく、実験段階です。 書き込みプロトコルは、稼働中の Serato DJ Lite 4.0.9 のライブラリを使って検証しましたが、Serato のアップデートをまたいだ検証、大規模ライブラリでの検証、複数の外部ドライブに分散したライブラリでの検証は行っていません。ご自身のバックアップも必ず保管してください。
- 書き込みの範囲は意図的に限定されています。
apply_changesが作成するのは新しいトップレベルのクレートのみです。ネストされたクレートやスマートクレートの作成、クレートの名前変更・並べ替え・削除、トラックやキューポイントなどのメタデータの編集は行いません。 - クレートに追加できるのは、そのライブラリと同じディスクにあるトラックだけです。 ストリーミングトラックや、別のドライブにある Serato ストア内のトラックは
stage_crateによって拒否され、それぞれのトラック名が示されます。 - 適用するには Serato を終了する必要があり、結果を確認するには再起動が必要です。 新しいクレートが Serato とこのサーバーの読み取りツールに表示されるのは、Serato の起動と同期が完了した後です。
- ステージングでは Serato のライブデータベースを読み取ります。
stage_crateは Serato の実行中にroot.sqliteを読み取ります。2026-09-16 に測定したところ、各 50 トラックのステージングを 3 回行い、それぞれ 8~41 ms かかりました。その間、Serato 自身のログには何も記録されていませんでした。これは保証ではなく、あくまで根拠です。より負荷の高いライブラリや Serato 自身が書き込み中の状態では試していません。 - 取り消し用のツールはありません。 書き込みを取り消すには、前述のとおりバックアップを手動で復元する必要があります。
原則
このサーバーがライブラリについて保証すること、および行わないことは、PRINCIPLES.md に記載されています。各保証には、それを実施するコードと、保証が守られなくなった場合に失敗するテストが示されています。
セキュリティ
脆弱性は非公開で報告してください。詳細は SECURITY.md をご覧ください。脆弱性について公開 issue を作成しないでください。
貢献
issue とプルリクエストを歓迎します。CONTRIBUTING.md から始めてください。変更内容は CHANGELOG.md に記録されています。
ライセンス
MIT。Venut Technologiesがメンテナンスしています。
SeratoおよびSerato DJは、それぞれの所有者の商標です。このプロジェクトは独立しており、Seratoとは提携しておらず、承認やサポートも受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。