Navidrome-MCP
Navidrome MCP Server
Navidrome 用の MCP (Model Context Protocol) サーバーです。Claude Desktop、Claude Code、Cursor、その他の MCP クライアントは、ライブラリの閲覧、プレイリストの作成、新しい音楽の発見、そしてお使いのマシンのスピーカーでのオーディオ再生ができます。
目次
Related MCP server: Spotify MCP Server
機能
🎵 音楽ライブラリ
曲、アルバム、アーティスト、ジャンル、タグを閲覧・検索できます。フィルターはクエリ、スター付きステータス、年範囲、並び順、タグ値をカバーし、組み合わせることもできます: 「90年代のスター付きジャズアルバムを年順に並べたもの」 や 「サウンドトラックのタグが付いた5つ星の曲すべて」 など。タグ分析ツールはライブラリの内容を表示するので、フィルター値を推測する必要はありません。
🔊 ローカルオーディオ再生
MCP サーバーを実行しているホストに
mpvが必要です (mpv のインストール を参照)。
オーディオはブラウザや Navidrome の Web UI を使わず、お使いのマシンのスピーカーから再生されます。検索と再生を一度に行えます: 「スター付きのアルバムをランダムに5枚再生」、「90年代にスターを付けたすべての曲を年順にキューに入れて」、「再生中の曲にロックを10曲ランダムにシャッフルで追加して」 など。アルバムには3つのシャッフルモードがあります: 順序を維持、アルバム順をランダム化、トラックをインターリーブ。
再生中にキューを編集できます: 現在の曲を中断せずに並べ替えやシャッフルができ、現在のトラックを削除すると次のトラックに進みます。保存された Navidrome ラジオ局 (Icecast、SHOUTcast) は、ライブの ICY メタデータとともに mpv でストリーミング再生されるため、放送局が何を再生しているかを確認できます。再生は Navidrome にスクロブルされるため、再生回数と最近のアクティビティが同期されます。mpv は初回使用時に起動し、ユーザーごとのソケットを通じて MCP クライアントの再起動後も維持できます (ライフタイムのルールは MPV Remote のセットアップ を参照)。Linux、macOS、Windows 11 で動作します。
これは、Raspberry Pi や常時稼働のマシンでのハンズフリーミュージックデバイス向けに、音声トランスポート (Whisper STT + TTS) と連携します。
🎛️ MPV Remote (Web UI)
mpvが必要です (ローカルオーディオ再生と同じ)。デフォルトでオンになり、サーバーとともに起動します。
http://localhost:8808 の Web UI は、任意のブラウザにローカル再生のコントロールを提供します: カバーアート付きの再生中情報、トランスポートとシーク、ボリューム、クリックして移動できるライブキューがリアルタイムで更新されます。内蔵ピッカーは、ページから任意のプレイリスト、スター付きの曲、スター付きのアルバムを開始できるため、アシスタントなしでリモコンとして機能します。Expose on LAN を有効にすると、スマートフォンやタブレットから再生を制御できます。オーディオは常にサーバーを実行しているマシンから出力されます。セットアップ、ライフタイム、セキュリティの詳細は MPV Remote のセットアップ にあります。

🎶 プレイリスト
プレイリストの作成、更新、並べ替え、削除ができます。曲、アルバム全体、アーティストのディスコグラフィ、特定のディスクを一度の操作で追加できます。特定の曲が含まれるプレイリストを検索できます。リスニングデータからプレイリストを構築できます: 「再生回数が5回未満の5つ星の曲の『Hidden Gems』プレイリスト」 や 「トップ10アーティストの各アルバムからトップトラックを1曲ずつ、時系列順に」 など。
🎼 ミュージックディスカバリー (Last.fm)
Last.fm API キーが必要です (last.fm/api で無料取得)。設定ページで設定します。
類似アーティストやトラックを見つけ、バイオグラフィやトップトラックを取得し、グローバルな音楽チャートを閲覧できます。これをライブラリと組み合わせて、欠けているアルバムを見つけたり (「トップ5アーティストから欠けているアルバムを人気順に」)、見落としていた音楽を再発見したり (「お気に入りに似ているが、所有しているのに再生していないトラック」)、所有している曲から「ベスト・オブ」プレイリストを構築したりできます。
🎤 同期歌詞
設定ページで有効にします (LRCLIB プロバイダー + ユーザーエージェント)。API キーは不要です。
LRCLIB のコミュニティデータベースから、タイトル、アーティスト、アルバム、再生時間で一致する時間同期歌詞 (LRC 形式、ミリ秒タイムスタンプ) を取得します。同期バージョンがない場合はプレーンテキストが返されます。
📻 インターネットラジオ
Navidrome のラジオ局を管理し、世界中の新しいラジオ局を発見できます。ストリーム URL は追加前に検証され (MP3、AAC、OGG、FLAC の検出)、SHOUTcast/Icecast のメタデータが抽出されます。一括メンテナンスも可能です: 「すべての放送局を検証して、壊れたものを削除して」 や 「これらの10個の URL をテストして、動作するものを追加して」 など。
グローバルな発見には Radio Browser を使用します (ユーザーエージェントが必要で、設定ページで設定します)。ジャンル、国、言語、コーデック、ビットレート、人気度のフィルターで数千の放送局をカバーしています。投票とクリックが登録されるため、あなたの利用がコミュニティランキングに反映されます。
📊 リスニング分析
再生回数、最近のアクティビティ、高評価・再生回数上位のリスト、ライブラリ全体のタグ分布にアクセスできます。これを使って習慣を比較したり (「今年、よく再生しているジャンルとあまり再生していないジャンル」)、忘れていたお気に入りや一発屋を見つけたり、リスニングパターンからムードプレイリストを構築したりできます。
⭐ 評価とお気に入り
曲、アルバム、アーティストにスターを付けたり外したりできます。0〜5 の星評価を設定し、スター付きまたは高評価のすべてを一覧表示できます。Web UI がクロスデバイス同期に使用する保存済み Navidrome キューを読み書きできます。
📚 マルチライブラリサポート
すべての操作を Navidrome ライブラリのサブセットにフィルタリングできます。設定ページでデフォルトを設定するか (Default libraries、library.defaultLibraryIds)、実行時にアクティブなライブラリを切り替えることができます。
利用可能なツール
見出しに requires ... とあるツールカテゴリは、その設定が存在する場合にのみ登録されます。
コアシステム
Tool | Description |
| Navidrome への接続を検証し、機能/ツールの利用可能性を報告します |
ライブラリ管理
Tool | Description |
| ID による曲の詳細メタデータ |
| ID によるアルバムの詳細メタデータ |
| ID によるアーティストの詳細メタデータ |
| 指定した曲を含むすべてのプレイリストを一覧表示 |
| ユーザープロフィール、利用可能なライブラリ、アクティブライブラリのステータス |
| すべての検索/一覧操作でアクティブにするライブラリを設定 |
検索
Tool | Description |
| フィルターと並べ替えを使用してアーティスト、アルバム、曲を横断検索 |
| 高度なフィルターと並べ替えで曲を検索 |
| 高度なフィルターと並べ替えでアルバムを検索 |
| 高度なフィルターと並べ替えでアーティストを検索 |
プレイリスト
Tool | Description |
| アクセス可能なすべてのプレイリストを表示 |
| ID によるプレイリストのメタデータを取得 |
| 新しいプレイリストを作成 |
| 名前、説明、可視性を更新 |
| プレイリストを削除 |
| プレイリストの内容を取得 (JSON または M3U) |
| 曲、アルバム、アーティストのディスコグラフィ、特定のディスクを一度の操作で追加 |
| 位置でトラックを削除 |
| トラックを新しい位置に移動 |
評価とお気に入り
Tool | Description |
| 曲、アルバム、またはアーティストにスターを付ける |
| スターを外す |
| 0〜5 の星評価を設定 |
| スター付きの曲、アルバム、またはアーティストを表示 |
| 最高評価のアイテムを表示 |
再生履歴と保存済みキュー
Tool | Description |
| オプションの時間範囲フィルター付きの最近のリスニングアクティビティ |
| 最も再生された曲、アルバム、またはアーティスト |
| Navidrome の保存済みキューを読み取る (Web UI 同期) |
| Web UI 同期のためにキューを Navidrome に保存 |
| Navidrome の保存済みキューをクリア |
メタデータとタグ
Tool | Description |
| タグ値で検索 (ジャンル、リリースタイプ、メディアなど) |
| ライブラリ全体のタグ使用回数 |
| 検索操作で利用可能なフィルター値を発見 |
Last.fm ディスカバリー (Last.fm API キーが必要)
Tool | Description |
| 指定したアーティストに類似するアーティストを検索 |
| 指定したトラックに類似するトラックを検索 |
| アーティストのバイオグラフィとタグ |
| アーティストのトップトラック |
| Last.fm チャートからのトレンドアーティスト、トラック、タグ |
| リリースタイプと年 (MusicBrainz)、ジャンルと人気度 (Last.fm)、アルバムごとのライブラリ内フラグを含む完全なディスコグラフィ。「X のどのアルバムが欠けているか?」に答えます。 |
| アルバム詳細: 再生時間付きのトラックリスト、年とタイプ、ジャンル、Wiki サマリー、人気度、ライブラリ所属。所有していないアルバムにも対応 |
歌詞 (LRCLIB プロバイダーが必要、設定ページで設定)
ツール | 説明 |
| タイトル/アーティスト/アルバム/再生時間で照合する、時間同期(LRC)およびプレーンテキストの歌詞 |
ラジオ管理
ツール | 説明 |
| 保存済みのNavidromeラジオ局をすべて一覧表示 |
| IDによるラジオ局の詳細情報 |
| 1つ以上のラジオ局を作成(JSON配列、任意の |
| ラジオ局を削除 |
| http(s)ストリームURLの到達可能性と音声コンテンツをテスト |
グローバルラジオ検出(Radio Browserユーザーエージェントが必要)
ツール | 説明 |
| Radio Browser経由で世界中のラジオ局を検索 |
| 利用可能なフィルター値(タグ、国、言語、コーデック) |
| Radio Browserのラジオ局の詳細情報 |
| 人気メトリクスのための再生クリックを登録 |
| ラジオ局に投票 |
ローカル再生(mpvが必要)
再生はデフォルトで元のファイルをストリーミングします(初回セットアップのトランスコード形式を参照)。
ツール | 説明 |
| 1曲または複数曲を再生。 |
| 1枚または複数枚のアルバムを再生。 |
| 検索とアルバム再生を1ステップで実行。 |
| 検索と曲の再生を1ステップで実行。 |
|
|
| 保存済みのNavidromeラジオ局を再生。ラジオは曲やアルバムと混在できないため、キューを置き換える |
| 再生を一時停止(位置は保持) |
| 再生を再開 |
| 次のトラックへスキップ |
| 前のトラックへスキップ |
| 現在のトラック内を移動(絶対位置または相対位置) |
| mpvの内部ボリュームを設定(0〜100) |
| 現在のタイトル/アーティスト/アルバム/位置/再生時間とキューのインデックス(ラジオの場合は局+ICYメタデータ) |
| mpvを起動せずにエンジンの健全性をプローブ(実行中、mpvバージョン、アイドル状態) |
| メタデータと現在のトラックインデックスを含むライブキューのスナップショット |
| キューをクリアして再生を停止 |
| メンバーシップを変更せずにキューの順序をランダム化。現在のトラックは再生を続け、先頭に移動 |
| キューのエントリをインデックス間で移動。再生中の内容は変更されない |
| エントリを削除。現在のトラックが削除された場合、mpvは次のトラックに進む |
| 指定されたインデックスのキューエントリにジャンプ。並べ替えは行わない |
インストールとセットアップ
前提条件
Node.js 20以上(ダウンロード)
実行中のNavidromeサーバー
MCP互換クライアント(Claude Desktop、Claude Code、Cursor、またはローカルstdio対応のその他のMCPクライアント)
任意: mpv ローカル音声再生用
クイックセットアップ
公開パッケージをインストール(起動時に自動更新):
npm install -g navidrome-mcpパッケージ: npmのnavidrome-mcp。
開発ビルドの場合:
git clone https://github.com/Blakeem/Navidrome-MCP.git
cd Navidrome-MCP
pnpm install
pnpm buildMCPクライアントの設定
MCPクライアントの設定は、クライアントにサーバーの起動方法を伝えるだけです。Navidromeの認証情報とすべてのオプションはローカルのsettings.jsonに保存され、ブラウザの設定ページから編集するため、シークレットがクライアントのJSONや環境変数に入ることはありません。設定ページは初回実行時に開きます(初回セットアップを参照)。
Claude Desktopの場合、claude_desktop_config.jsonを編集します(場所: Windowsでは%APPDATA%/Claude/、macOSでは~/Library/Application Support/Claude/、Linuxでは~/.config/Claude/)。他のMCPクライアントも同じJSON形式を使用します。
{
"mcpServers": {
"navidrome": {
"command": "npx",
"args": ["navidrome-mcp"]
}
}
}手動ビルドの場合、command/argsを次のように置き換えます:
"command": "node",
"args": ["/absolute/path/to/Navidrome-MCP/dist/index.js"]初回セットアップ
設定なしで初回起動すると、ブラウザで設定ページが開きます。これはMCPサーバーを起動した場合も、スタンドアロンのWebプレーヤー(navidrome-web)を起動した場合も同様です。ブラウザを開けない場合(SSH経由など)は、URLがコンソールに出力され、未設定のMCPサーバーはそれを返すopen_settingsツールを公開します。設定ページはいつでも次のコマンドで開けます:
npx navidrome-configNavidromeのURL、ユーザー名、パスワード、および任意の機能を入力します。次に接続テストと保存をクリックします。これによりローカルのsettings.json(形式: settings.example.json)が書き込まれます。設定は起動時に読み込まれ、ホットリロードされないため、起動したものを再起動してください: MCPクライアントを終了して再度開くか、navidrome-webを再実行します。以前のenvセットアップからアップグレードする場合、フォームには以前のenv/.envの値が事前入力されます。確認して保存してください。
ヘッドレスマシンとコンテナ: 設定ページはループバックのみにバインドされるため、ブラウザのないホスト(VPS、Dockerコンテナ)では代わりに環境変数で設定します。settings.jsonが存在しない場合、サーバーはNAVIDROME_URL、NAVIDROME_USERNAME、NAVIDROME_PASSWORD、およびMCP_TRANSPORTやLASTFM_API_KEYなどの任意の変数から実行されます。一度作成されたsettings.jsonは常にenvより優先されます。
必須: NavidromeのURL、ユーザー名、パスワード。
任意(設定ページで設定):
デフォルトライブラリ: デフォルトで有効にするライブラリID(カンマ区切り)。空白はすべてを意味します。
Last.fm APIキー: Last.fmディスカバリーを有効にします。
Radio Browserユーザーエージェント: グローバルなラジオ局検出を有効にします。
歌詞プロバイダー(LRCLIB) + ユーザーエージェント: 歌詞の取得を有効にします。
mpvパス:
PATHにない場合のmpvバイナリの場所。空白は自動検出。トランスコード形式: デフォルトは
rawで、最高品質と信頼性の高いシークのために元のファイルをストリーミングします。低速または従量制のリンクにはコーデック(例:mp3、opus)を設定します。ビットレートはコーデックが設定されている場合にのみ適用されます。Web UI(ポート/ホスト/公開/有効/ブラウザ自動起動): MPV Remoteを設定します(MPV Remoteセットアップを参照)。デフォルトは
localhost:8808。トランスポート(タイプ/ホスト/ポート): サーバーがMCPプロトコルを公開する方法。デフォルトは
stdioで、デスクトップクライアントが使用するローカルトランスポートです。typeをhttpに設定すると、サーバーをネットワークプロセスとして実行します(HTTP経由での実行を参照)。
機能は、対応する設定が存在すると有効になります。
mpvのインストール(任意)
mpvはクロスプラットフォームのメディアプレーヤーです。サーバーは起動時にmpvを検出すると再生ツールを登録します。mpvがない場合でも、サーバーはライブラリと保存済みのNavidromeキューを管理しますが、音声は出力されません。
macOS(Homebrew経由):
brew install mpvLinux:
sudo apt install mpv # Debian / Ubuntu / Mint / PopOS
sudo dnf install mpv # Fedora / RHEL / CentOS Stream
sudo pacman -S mpv # Arch / Manjaro
sudo zypper install mpv # openSUSEWindows:
winget install shinchiro.mpv # winget is included on Windows 11
scoop install mpv
choco install mpv完全なID
shinchiro.mpvを使用してください。単純なwinget install mpvでは、非公式のStoreパッケージとの選択を求められます。shinchiroビルドはmpv.ioがWindows用にリンクしているものです。Windowsの
PATHに関する注意。shinchiro.mpvパッケージはC:\Program Files\MPV Player\にインストールされ、PATHには追加されません。次のいずれかを実行してください:
そのフォルダを
PATHに追加(システムプロパティ→環境変数→Path→新規)し、新しいターミナルを開く、または設定ページ(
playback.mpvPath)でmpvパスに完全なmpv.exeパスを設定します(例:C:\Program Files\MPV Player\mpv.exe)。他のインストール方法(scoop、choco、手動zip)は異なるフォルダを使用します。新しいターミナルで
mpv --versionが失敗する場合は、mpv.exeの場所を特定し、上記のいずれかの修正を適用してください。
mpv.ioのビルド済みバイナリも動作します。mpv --versionで確認してください。その後、MCPクライアントを再起動して、サーバーがmpvを再検出するようにします。
MPV Remoteセットアップ
有効化とライフタイム
パネルはデフォルトでオンです。サーバーはそれを別のnavidrome-webプロセスとして起動し、ポートはすぐにバインドされるため、何かが再生される前にページにアクセスできます。mpvのないホストでは起動されません。プレーヤー設定はプレーヤー内の歯車アイコンの背後にあり、歯車と電源ボタンはホストマシンのブラウザにのみ表示されます。
AIクライアントを閉じても再生が継続するかどうか:
デフォルト(オフ): MCPが起動したプレーヤーとmpvは、MCPサーバーが閉じるか再起動すると停止します。
MCPサーバーが閉じた後も再生を継続(
webui.persistAfterMcpExit、設定ページまたは歯車モーダル内): プレーヤーは実行を続けます。電源ボタンで停止します。自分で起動した場合(
navidrome-web、下記): 常に独立して実行されます。MCPサーバーはそれにアタッチし、シャットダウンすることはありません。
mpvはプレーヤーが停止すると停止し、バックグラウンドのアイドルタイムアウトはありません。パネルを無効にするには、設定ページでコンパニオンコントロールパネルを有効にするのチェックを外します(webui.enabled)。
スタンドアロンで実行
MCPクライアントから独立してプレーヤーを実行:
navidrome-web # after: npm install -g navidrome-mcp
# or, from a dev clone / manual build:
node dist/web/main.jssettings.jsonを読み込み、ブラウザを開き、電源ボタンで停止するまでバックグラウンドで実行されます。MCPが起動したインスタンスと共存します: 最初にポートをバインドしたプロセスがそれを所有し、もう一方はアタッチします。ログは設定ディレクトリのnavidrome-web.logに出力されます。
まだ何も設定されていない場合、起動するとプレイヤーではなく設定ページが開きます(初回セットアップを参照)。入力して保存してください。その後、navidrome-web を再起動します。
デスクトップショートカット(推奨)
プラットフォーム用のダブルクリック可能なアイコンを生成します。ターミナルウィンドウなしでバックグラウンドでプレイヤーを起動し、ブラウザを開きます。プレイヤーがすでに実行中の場合は、ブラウザだけが開きます。
navidrome-web-shortcut # after: npm install -g navidrome-mcp
# or, from a dev clone (see Development):
pnpm make:launcherショートカットには node とビルド済みプレイヤーへの絶対パスが埋め込まれるため、PATH に何もなくても動作します。書き込まれるファイルは次のとおりです:
Linux: デスクトップとアプリメニュー(
~/.local/share/applications)にNavidrome Player.desktop。GNOMEでは、初回は右クリック → Allow Launching を選択します。macOS: デスクトップに
Navidrome Player.app(必要に応じて/Applicationsにドラッグ)。Windows: デスクトップとスタートメニューに
Navidrome Player.vbs。(OneDrive リダイレクトされたデスクトップの場合はそこに配置されます。)
プロジェクトを移動または再ビルドした後は、ジェネレーターを再実行してパスを更新してください。
設定
すべての設定はオプションで、設定ページの Web UI セクションにあり、以下では settings.json のパスで示しています。保存後、クライアントを再起動してください。例外は persistAfterMcpExit で、これはギアモーダルでライブ適用されます。
設定( | デフォルト | 効果 |
|
|
|
|
| HTTP サーバーがリッスンするポート。ホストで 8808 が使用中の場合は空きポートを選択してください。 |
|
| バインドアドレス。特定のインターフェースが必要な場合のみ上書きしてください。通常は Expose on LAN が適切な設定です。 |
|
|
|
|
| MCP サーバー起動時にブラウザでプレイヤーを開きます。 |
|
| MCP サーバーが閉じるか再起動した後も、MCP が起動したプレイヤー(および mpv)を実行し続けます。プレイヤー内のギアモーダルでライブ切り替えできます。 |
スマートフォン/タブレットのリモコンとして使う
設定ページで Expose on LAN を有効にして保存します。
MCP クライアントを再起動します(または
navidrome-webを再起動します)。プレイヤーはバインド時に到達可能な LAN URL をログに記録します(例:
http://192.168.1.42:8808)。スマートフォンのブラウザでその URL を開き、ブックマークします。
セキュリティに関する注意
Web UI には認証がありません。ポートに到達できる人は誰でも、一時停止、スキップ、シーク、音量変更、キューの操作ができます。
webui.host=127.0.0.1(デフォルト)の場合、ホストマシンからのみ到達可能で、安全です。Expose on LAN(
webui.expose=true)の場合、LAN 上のすべてのデバイスから到達可能です。信頼できる家庭内ネットワークでは問題ありませんが、パブリックインターネットに公開しないでください。レート制限はなく、コントロール API はキューの変更やプレイリストの開始を許可します。プレイヤー設定と電源ボタンはループバックのみに制限され、リモートブラウザには非表示のため、LAN 上のスマートフォンは再生を制御できますが、設定の変更やプレイヤーのシャットダウンはできません。メインの設定ページは公開されません。公開後、GET /healthzはホスト外では404を返し、バージョンのフィンガープリントの漏洩を防ぐため、プレイヤーのヘルスチェックはホストから行ってください。
HTTP 経由での実行
デフォルトでは、サーバーは stdio 上で MCP を話します。クライアントはサーバーを子プロセスとして起動し、標準入力/標準出力で通信します。これは同じマシン上のデスクトップクライアントでは機能しますが、ネットワーク経由では到達できません。
トランスポートを http に設定すると、サーバーはソケットをバインドし、/mcp で MCP の Streamable HTTP トランスポート を提供します。その後、supergateway や mcp-proxy ブリッジなしで、ネットワーク上の MCP クライアントが直接接続するスタンドアロンプロセスとして実行されます。
settings.json に transport ブロックを追加します。host のデフォルトは 127.0.0.1(ループバックのみ)です。expose: true を設定するとすべてのインターフェース(0.0.0.0)にバインドしてリモートクライアントが到達できるようになり、明示的な host は expose より優先されます。authToken を設定するとベアラー認証が要求されます。これはポートがループバックを超えて到達可能な場合は常に推奨され、設定ページには Generate ボタンがあります:
"transport": {
"type": "http",
"port": 3000,
"expose": true,
"authToken": "a-long-random-secret"
}HTTP 対応の MCP クライアントを http://<host>:<port>/mcp に向けます:
{
"mcpServers": {
"navidrome": {
"type": "http",
"url": "http://your-host:3000/mcp",
"headers": { "Authorization": "Bearer a-long-random-secret" }
}
}
}トークンが設定されている場合、すべての /mcp リクエストは Authorization: Bearer <token> を保持する必要があり(定数時間で比較)、それ以外は 401 が返ります。トランスポートがトークンなしで非ループバックアドレスにバインドする場合、サーバーは起動を拒否する代わりに起動時に警告をログに記録するため、ファイアウォールや NetworkPolicy でロックダウンされたデプロイでも実行されます。GET /healthz はゲートされません。これはコンテナのヘルスチェック用の認証なしの liveness エンドポイントで、200 {"status":"ok"} を返し、Navidrome への呼び出しは行いません。
ホストフィルタリング(DNS リバインディング保護): デフォルトのバインド(認証トークンなしのループバック)では、Host ヘッダーがループバックエイリアスでないリクエストは拒否されるため、悪意のある Web ページがブラウザ経由でサーバーを操作できません。authToken を設定するか、非ループバックアドレスにバインドすると、自動フィルターはオフになります。リモートデプロイはサーバーが事前に知ることのできない名前で到達されるため、ベアラートークンがすでにリバインディングをブロックします(誘導されたブラウザはトークンを添付できません)。受け入れる名前を固定するには、transport.allowedHosts を設定します。これは存在する場合は常に強制されます。transport.allowedOrigins はブラウザクライアントの場合のみ設定してください。Origin ヘッダーをゲートします。
トランスポートは環境変数でも設定できます:MCP_TRANSPORT(stdio|http)、MCP_HTTP_HOST、MCP_HTTP_PORT、MCP_HTTP_EXPOSE(true ですべてのインターフェースにバインド)、MCP_HTTP_AUTH_TOKEN、MCP_HTTP_ALLOWED_HOSTS / MCP_HTTP_ALLOWED_ORIGINS(カンマ区切り)。Web UI には対応する WEBUI_* ファミリーがあります(WEBUI_ENABLED、WEBUI_PORT、WEBUI_HOST、WEBUI_EXPOSE、WEBUI_AUTO_OPEN_BROWSER、WEBUI_PERSIST_AFTER_MCP_EXIT)。これらは settings.json が存在しない場合に適用され、初回実行時に設定フォームを事前入力します(初回セットアップを参照)。
単一アカウント、共有状態: すべての HTTP セッションは、認証済みの単一の Navidrome アカウントを保持する 1 つのプロセスによって提供され、アクティブライブラリの選択はプロセス全体でグローバルです。
set_active_librariesの呼び出しは、接続されているすべてのセッションのライブラリフィルターを変更し、get_user_detailsはその共有された選択を反映します。
セキュリティ: サーバーは認証済みの Navidrome セッションを保持するため、開かれたポートは資格情報なしでライブラリを完全に制御できることを意味します。localhost を超えてポートを公開することはオプトインです(
expose: true、または明示的な非ループバックhost)。公開する場合は、認証トークンを設定するか、ファイアウォール、Kubernetes NetworkPolicy、TLS を追加するリバースプロキシでアクセスを制限してください。リモートアクセスが必要でない限り、デフォルトのstdioトランスポートを維持してください。
音声の出力先。 トランスポートは MCP プロトコルに誰が到達できるかを決定し、音声は移動しません。mpv はサーバープロセスと同じ場所で実行されるため、サーバーを実行しているマシンが音を出します。コンテナ外のマシンでの HTTP は、再生が機能するリモート MCP アクセスを提供します:スピーカーに接続されたマシンでサーバーを実行し、リモートクライアントを http://そのマシン:3000/mcp に向け、authToken を設定します。コンテナは、ライブラリツール(検索、プレイリスト、レーティング、ラジオメタデータ、Last.fm、歌詞)のみの常時稼働エンドポイントを提供し、音声はありません。
コンテナについては、Docker での実行 を参照してください:イメージ、デプロイ形態、マウントされた設定、音声に関する注意事項。
ChatGPT Desktop に関する注意
ChatGPT の MCP サポート(Web およびデスクトップ)はホストされた HTTPS エンドポイントを必要とし、ローカルの stdio サーバーでは機能しません。このサーバーは HTTP 経由で MCP を提供できるため(HTTP 経由での実行を参照)、mcp-remote のようなブリッジの代わりに、TLS を終端するリバースプロキシの背後でホストできます。セルフホストの音楽サーバーでは、Claude Desktop、Claude Code、Cursor、または stdio をサポートする他のクライアントを使用する方が簡単です。
トラブルシューティング
接続の問題
Navidrome が実行中で到達可能であることを確認します
設定ページの Navidrome URL にプロトコル(
http://またはhttps://)が含まれていることを確認します保存する前に、設定ページの Test connection ボタン(または
curl/ ブラウザでの資格情報のテスト)を使用します
macOS 固有
macOS トラブルシューティングガイド を参照してください。一般的な問題は Node.js のパスが見つからないことで、シンボリックリンクまたは完全なパスで修正できます。
設定
設定ファイルでは絶対パスを使用します
JSON を検証します(末尾のカンマなし)
変更後は MCP クライアントを再起動します
既知の制限事項
mpv がないと音声が出ません。 代わりに Navidrome の Web UI または Subsonic クライアントを使用してください(mpv のインストールを参照)。
最近再生した曲にタイムスタンプがありません。 Navidrome は再生回数と完了ステータスを公開しますが、トラックが最後に再生された日時は公開しません。
保存されたキュー ≠ ライブキュー。
*_saved_queueツールは Navidrome のサーバーサイドキュー(Web UI 同期)を操作します。*_play_queueツールはローカルの mpv プレイリストを操作します。
開発
git clone https://github.com/Blakeem/Navidrome-MCP.git
cd Navidrome-MCP
pnpm install
pnpm build
node dist/config-app/main.js # opens the settings page; fill in + Save
# (writes settings.json to your OS config dir; see settings.example.json)
pnpm dev # hot reload
pnpm test # watch-mode tests
pnpm test:run # one-shot tests
pnpm check:all # lint + typecheck + dead-code
pnpm build # production bundle開発ビルドからスタンドアロン Web プレイヤーをテストする
これは、リリースが npm に到達する前にプレイヤーを試すためのソースからのパスです(公開パッケージは dev より遅れる場合があります)。MCP サーバーにも適用されます。両方とも同じ dist/ から実行されるためです。
# 1. Build (also bundles the web UI's static assets into dist/)
pnpm build
# 2. Configure if needed; writes settings.json to your OS config dir
node dist/config-app/main.js # opens the settings page; fill in + Save
# 3. Run the standalone player directly
node dist/web/main.js # serves http://127.0.0.1:8808 and opens your browserそのビルドからダブルクリック可能なアイコンを作成するには(グローバルインストールは不要):
pnpm make:launcher # writes a shortcut to your Desktop + app menuWindows の注意事項(PowerShell):
pnpm buildを使用してからnode dist\web\main.jsを実行します。上記と同じですがバックスラッシュを使用します。pnpm make:launcherはNavidrome Player.vbsをデスクトップとスタートメニューに書き込みます。コンソールウィンドウなしでnode dist\web\main.jsを起動し、このチェックアウトへの絶対パスを埋め込むため、フォルダを移動した後は再実行してください。リダイレクトされた/OneDrive のデスクトップがファイルを隠す場合、スタートメニューのコピーは引き続き機能します(スタート → 「Navidrome」と入力)。
再生には mpv のインストールが必要です。
PATHにない場合は、設定ページでplayback.mpvPathを設定してください。
npm install -g navidrome-mcp の後、同じフローが navidrome-web、navidrome-config、navidrome-web-shortcut として、クローンやビルドなしで実行されます。
MCP Inspector でのテスト:
pnpm build
npx @modelcontextprotocol/inspector node dist/index.js # web UI
npx @modelcontextprotocol/inspector --cli node dist/index.js \
--method tools/call --tool-name search_all --tool-arg query="jazz" # CLIライセンス
コード: AGPL-3.0
ドキュメント: CC-BY-SA-4.0
サポート
Navidrome コミュニティへの ❤️ を込めて
Available Tools
2 toolsopen_settingsA
Open the Navidrome MCP settings page in a browser and return its local URL. Use this when the server is not configured or its configuration failed at startup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it discloses the key side effect (launches a browser), the return value (local URL), and the recovery context in which it applies. It stops short of stating whether the browser launch blocks, requires a desktop session, or what happens on a headless host.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the action and return front-loaded and the usage condition following immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, zero-parameter action tool with no output schema, the description covers what it does, what it returns, and when to reach for it. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Open the ... settings page in a browser') plus the return value ('return its local URL'), which is enough to distinguish it from the sibling test_connection, which would probe connectivity rather than surface a settings UI.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger condition: 'Use this when the server is not configured or its configuration failed at startup.' It does not name the alternative (test_connection) explicitly, so it falls just short of the 5-level when/when-not/alternatives standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionB
Report Navidrome MCP configuration/connection status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure and falls short. It never states whether this actively probes the network/server or merely echoes local configuration, whether it is safe/read-only, whether credentials are required, or what a negative result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler or redundancy. Every word contributes to identifying what the tool reports.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a diagnostic tool with no output schema, the description should describe the shape and meaning of the returned status (e.g., success/failure fields, what components are checked). It provides none of that, leaving the agent unable to interpret results or decide when this is the right diagnostic to run.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to explain beyond the schema; the baseline for a 0-param tool applies. No parameter-related gaps exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Report") and resource ("Navidrome MCP configuration/connection status"), so an agent can immediately tell this is a diagnostic/status tool. It does not, however, contrast itself with the only sibling, open_settings, so the boundary between the two is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all — nothing says whether this should be called before other operations, only when the connection is failing, or as a general health check. The sibling open_settings offers a plausible adjacent use case that the description does nothing to disambiguate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v2.6.0- First observed
open_settings - First observed
test_connection
TDQS
Scored across 2 tools
The two tools have distinct purposes: opening a settings page versus reporting connection status. They both relate to configuration, but the descriptions clearly differentiate their use cases, so confusion is minimal.
Both names follow a consistent verb_noun snake_case pattern: open_settings and test_connection. This is predictable and easy to parse.
Two tools is borderline thin for a server named Navidrome-MCP, which suggests broader music server functionality. However, if the server's only role is configuration assistance, the count may be acceptable but still feels minimal.
The tool surface only covers configuration and connection testing, with no tools for interacting with Navidrome's core domain such as browsing artists, albums, playlists, or searching. This is severely incomplete for a server that presumably integrates with a music streaming service.
Maintenance
Related MCP Connectors
Search, analyze, and discover commercially released music using sonic intelligence.
Builds narrated, playable music stories, explores sample lineage, and saves verified playlists.
Music promotion from your AI assistant: analyze tracks, prepare radio and creator campaign drafts.
AI playlist engine that turns music prompts into real YouTube playlists and filters bad versions.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables music management through search, playlist creation, and intelligent recommendations. Supports searching by song, artist, or album, creating and managing playlists, and getting music recommendations based on genre and mood.74 npmMIT
- FlicenseBqualityDmaintenanceEnables AI assistants to control Spotify playback, search for music, manage playlists, and interact with your Spotify library through natural language commands.19-
- AlicenseAqualityBmaintenanceEnables natural-language inquiries about personal listening history and playlist creation with enforced hard constraints and automated repair.4MIT
- AlicenseNot gradedqualityAmaintenanceConnects AI assistants to a local music library for full-text search and filtering of tracks, albums, artists, genres, composers, and lyrics, plus listening analytics and metadata hygiene audits. Also lets users generate and populate playlists and control playback (play, pause, seek, volume) in a running player instance.MIT