netease-music-mcp
netease-music-mcp
ローカルでの音楽再生を制御するためのMCPサーバーです。neteasecli とローカルの mpv を介して音楽を再生し、ローカルの歌詞プレイヤーWeb UIを提供します。
免責事項 / Disclaimer
本プロジェクトはNetEase Cloud Music(網易雲音楽)の公式MCPではなく、NetEase Cloud Musicと提携、関連、または承認されているものではありません。本プロジェクトは、個人の学習、研究、およびローカルでの自動化体験のみを目的としています。使用する際は、NetEase Cloud Musicおよび関連サービスの利用規約、著作権ルール、およびアカウント使用規定を遵守してください。
This project is not an official NetEase Cloud Music MCP and is not affiliated with, associated with, or endorsed by NetEase Cloud Music. It is intended for personal learning, research, and local automation experiments. Please use it responsibly and comply with the applicable NetEase Cloud Music terms of service, copyright rules, and account usage policies.
Claude DesktopのようなMCPクライアントを使用して、以下の操作が可能です:
NetEase Cloud Musicの楽曲を検索して再生
一時停止、再開、停止、曲送り
ローカルWebプレイヤーを開く:
http://127.0.0.1:8765/歌詞、プレイリスト、お気に入りの音楽、レコード再生ページの表示
AIの回答前に、現在の楽曲、ジャンル、アーティスト、および現在の歌詞のコンテキストを読み取る
音楽鑑賞終了時に、ワンクリックで
mpvを停止し、Webプレイヤーを閉じる
Related MCP server: mcp_music_server
環境要件
本プロジェクトは現在、主にWindows向けです。
依存関係 | 要件 | 説明 |
Windows | Windows 10/11 推奨 | 現在主にWindowsで開発およびテストされています |
Node.js | 24以降 |
|
npm | Node.jsに付属 | 本プロジェクトの依存関係およびグローバルCLIのインストールに使用 |
NetEase Cloud Musicアカウント | 正常にログイン可能であること |
|
| グローバルインストール | アカウントへのアクセス、検索、プレイリスト、楽曲情報の取得に使用 |
| システム実行ファイル |
|
上流プロジェクト:wangwalk/neteasecli が必要です。コードはデフォルトで %APPDATA%\npm\node_modules からグローバルインストールされた neteasecli を検索します。
mpv は前提依存関係であり、事前にインストールし、PowerShellで直接 mpv --version が実行できることを確認してください。
neteasecli と mpv はシステム/グローバル依存関係であり、npm install では自動的にインストールされません。
neteasecli の現在のバージョンはNode.js 24以降を要求するため、プロジェクト全体をNode.js 24+で実行することを推奨します。
Windowsポータブル版の mpv.exe を使用している場合は、一時的にプロジェクトルートディレクトリに配置することも可能です。
インストール
プロジェクトをクローン:
git clone https://github.com/luuu-h/netease-music-mcp.git
cd netease-music-mcpプロジェクトの依存関係をインストール:
npm install音楽CLIをグローバルインストール:
npm install -g neteasecliまずブラウザでNetEase Cloud MusicのWeb版にログインします。neteasecli のログイン方法はブラウザからCookieをインポートするものであり、MCP内にアカウントパスワードは保存されません。
https://music.163.com/次にPowerShellでログイン状態をインポートします:
neteasecli auth login複数のChrome/Edgeブラウザプロファイルがある場合は、プロファイルを指定できます:
neteasecli auth login --profile "Profile 1"ログイン状態を確認:
neteasecli --pretty auth checkmpv をインストールします。一般的な方法のいずれかを選択してください:
# Chocolatey
choco install mpv -y
# Scoop
scoop install mpvPowerShellで neteasecli コマンドが見つからないと表示される場合は、npmのグローバルコマンドディレクトリが PATH に追加されているか確認してください。Windowsでは通常 %APPDATA%\npm です。
インストールの確認
構文チェック:
npm run checkSmoke test:
npm run smokesmoke は以下を確認します:
システム
PATHまたはプロジェクトルートディレクトリでmpvが見つかるかneteasecliがグローバルにインストールされているか
MCPクライアント内でモデルに呼び出させることも可能です:
netease-music-mcp.check_environmentClaude Desktopの設定
Claude Desktopは claude_desktop_config.json を通じてローカルのMCPサーバーを登録します。設定完了後、Claudeは netease-music-mcp ツールを認識できるようになります。
1. プロジェクトの絶対パスを確認
プロジェクトディレクトリで以下を実行:
pwd出力が以下の場合:
C:\Users\you\projects\netease-music-mcpMCPサーバーのファイルパスは次のようになります:
C:\Users\you\projects\netease-music-mcp\src\server.js2. Claude Desktopの設定ファイルを開く
WindowsでClaude Desktopの設定ファイルを開きます:
notepad "$env:APPDATA\Claude\claude_desktop_config.json"パスが見つからない場合は、まずディレクトリを作成してください:
New-Item -ItemType Directory -Force "$env:APPDATA\Claude"
notepad "$env:APPDATA\Claude\claude_desktop_config.json"3. MCP設定を書き込む
ファイルが空の場合は、以下の内容を直接入力します。パスを自分のプロジェクトパスに置き換え、ダブルバックスラッシュを使用してください:
{
"mcpServers": {
"netease-music-mcp": {
"command": "node",
"args": [
"C:\\path\\to\\netease-music-mcp\\src\\server.js"
]
}
}
}ファイル内に他のMCPサーバーが既に存在する場合は、"netease-music-mcp" の項目のみを既存の "mcpServers" に追加してください:
{
"mcpServers": {
"existing-server": {
"command": "..."
},
"netease-music-mcp": {
"command": "node",
"args": [
"C:\\path\\to\\netease-music-mcp\\src\\server.js"
]
}
}
}4. 再起動と検証
設定を保存した後、Claude Desktopを完全に終了して再起動します。
その後、Claudeに以下を送信します:
请调用 netease-music-mcp.check_environment 检查我的本机音乐环境戻り値の neteaseCliInstalled、mpvAvailable、およびログイン状態が正常であれば、選曲を開始できます。
まだNetEase Cloud Musicにログインしていない場合は、以下を送信してください:
请调用 netease-music-mcp.setup_netease_login 带我完成网易云登录5. よくある設定エラー
JSON内のWindowsパスはダブルバックスラッシュで記述する必要があります(例:
C:\\path\\to\\file.js)argsはプロジェクトフォルダではなくsrc\\server.jsを指す必要があります設定変更後は必ずClaude Desktopを再起動してください
Claudeがツールを認識できない場合は、まず
nodeがPowerShellで直接実行できるか確認してください:
node -vWebプレイヤーの単独起動
Claudeを介さずにWeb UIを直接プレビューしたい場合:
node .\src\server.js --web-player --port 8765その後、ブラウザで以下を開きます:
http://127.0.0.1:8765/Webプレイヤーには以下が含まれます:
お気に入りプレイリスト
プレイリスト作成
お気に入りの音楽
楽曲検索
プレイリスト詳細ページ
下部プレイヤー
再生キュー
レコード歌詞再生ページ
CLIサポート時のバイリンガル歌詞表示
MCPツールリスト
ツール名 | 役割 |
|
|
|
|
| NetEase Cloud Musicの楽曲を検索 |
| キーワードで検索し、最も一致する楽曲を再生 |
| NetEase Cloud Musicの楽曲IDで再生 |
| 検索して別の曲に切り替え |
| 再生を一時停止 |
| 再生を再開 |
| 再生を停止し、現在の聴取状態をクリア |
| 音楽鑑賞セッションを終了:再生停止、 |
| プレイヤーの状態とキャッシュされた楽曲情報を取得 |
| 現在の楽曲、ジャンル、アーティスト、歌詞のコンテキストを取得 |
| ローカルWebプレイヤーを起動し、localhost URLを返す |
推奨されるClaudeプロンプト
以下の内容をClaudeのプロジェクトプロンプトまたはカスタムプロンプトに入れることを推奨します:
你可以使用 netease-music-mcp MCP 控制本机音乐。
当用户要配置、登录、安装、修复或检查 neteasecli 时,调用 netease-music-mcp.setup_netease_login,并按工具返回的 steps 带用户完成登录。用户执行完命令后,再调用一次 netease-music-mcp.setup_netease_login 或 netease-music-mcp.check_environment 验证。
当用户第一次要求播放音乐、点歌、听歌、打开播放器、查看歌词播放器,或当前对话还没有打开过播放器界面时,你必须先调用 netease-music-mcp.open_web_player,并把返回的 localhost URL 告诉用户。
当用户要求播放音乐时,调用 netease-music-mcp.play_song 或 netease-music-mcp.play_track。
当用户要求切歌时,调用 netease-music-mcp.next_song。
当用户要求暂停、继续、停止时,调用 netease-music-mcp.pause、netease-music-mcp.resume、netease-music-mcp.stop。
音乐播放期间,每次回复用户前,都必须先调用 netease-music-mcp.get_listening_context。
把返回的 ai_context 当作当前对话上下文使用。
点歌或切歌成功后,也要使用工具返回的 ai_context。
playback.style 字段已经优先来自网易云歌曲百科,可直接作为曲风/风格使用。
如果 netease-music-mcp.open_web_player 已经返回过 URL,不要重复打开,除非用户明确要求重新打开播放器。
如果用户问播放器在哪里,直接给出上次的 URL;如果不知道 URL,再调用 netease-music-mcp.open_web_player。
当用户说“结束听歌”、“不听了”、“关闭播放器”、“停止整个程序”,或任何表示要结束音乐/听歌会话的请求时,调用 netease-music-mcp.shutdown。这个工具只结束本次听歌和 Web 播放器,不会关闭 MCP 工具进程,因此之后仍然可以继续调用 netease-music-mcp。使用例
Claude Desktopでは次のように話しかけることができます:
一起听歌吧,听歌过程中每次回复我之前请先看 listening_context
打开音乐播放器
播放 布拉格广场 蔡依林
切到 编号89757 林俊杰
暂停
继续
结束听歌音楽鑑賞コンテキストの仕組み
楽曲の再生を開始するたびに、サービスは現在の楽曲情報を .listening-state.json にキャッシュします:
楽曲ID
曲名
アーティスト
アルバム
カバーURL
楽曲時間
ジャンル(NetEase Cloud Musicの楽曲百科を優先)
タイムスタンプ付き歌詞
CLI提供時の翻訳歌詞
get_listening_context は以下のような ai_context を返します。歌詞は現在の再生時間以降の6行です:
我们正在一起听歌,你现在跟我一起听xxx,曲风是xxx,歌手是xxx,当前的6句歌词是xxx注意:MCPサーバー自体は、Claudeが毎回回答する前に特定のツールを呼び出すことを100%強制することはできません。上記の推奨プロンプトは、Claudeが能動的に get_listening_context を呼び出すよう強く制約します。厳密な保証が必要な場合は、プロキシ層を作成するか、カスタムクライアントを使用して、モデルに送信するたびに音楽鑑賞コンテキストを自動的に注入する必要があります。
よくある質問
Claudeがツールを認識しない
claude_desktop_config.json を変更した後は、Claude Desktopを再起動する必要があります。
また、設定内の src/server.js が正しい絶対パスであることを確認してください。
PowerShellで neteasecli が見つからない
まずインストールを確認:
npm install -g neteasecli次に、npmのグローバルコマンドディレクトリが PATH にあることを確認してください。Windowsでは通常以下を含める必要があります:
%APPDATA%\npmコマンドが一時的に使用できない場合は、Nodeを使用してグローバルインストールされたCLIを直接実行することもできます:
node "$env:APPDATA\npm\node_modules\neteasecli\dist\index.js" auth login
node "$env:APPDATA\npm\node_modules\neteasecli\dist\index.js" --pretty auth checkNetEase Cloud Musicへのログイン方法
neteasecli はSMS認証コードログインではなく、ブラウザからNetEase Cloud MusicのCookieをインポートします:
ChromeまたはEdgeで
https://music.163.com/を開き、アカウントにログインします。PowerShellに戻り、以下を実行:
neteasecli auth loginログイン状態を確認:
neteasecli --pretty auth checkClaudeに直接呼び出させることも可能です:
netease-music-mcp.setup_netease_login不足している手順を確認し、次に実行すべきコマンドを返します。
neteasecliがログインCookieを見つけられない
neteasecli auth login がブラウザ内のログインCookieを見つけられない場合は、neteasecli のセッションファイルを直接書き込むことができます。これはブラウザのロックファイルを処理するよりも直接的です。
デフォルトプロファイルのセッションファイルパスは:
C:\Users\<你的用户名>\.config\neteasecli\profiles\default\session.jsonファイル内容には最低限 MUSIC_U が必要です:
{"MUSIC_U":"这里填你从浏览器里拿到的值"}MUSIC_U を取得する方法:
Edge、Chrome、またはその他のブラウザで
https://music.163.com/を開き、ログインします。F12を押して開発者ツールを開きます。Application/アプリケーションタブに移動します。左側の
Cookies->https://music.163.comを探します。MUSIC_Uという名前のCookieを見つけ、そのValueをコピーします。
次にPowerShellで以下を実行:
New-Item -ItemType Directory -Force "$HOME\.config\neteasecli\profiles\default"
Set-Content -Encoding UTF8 "$HOME\.config\neteasecli\profiles\default\session.json" '{"MUSIC_U":"把这里替换成你的MUSIC_U"}'
neteasecli --pretty auth checkSmoke testで mpv が見つからないと表示される
まずPowerShellで直接実行できるか確認してください:
mpv --version実行できない場合は、mpv をインストールするか、mpv.exe があるディレクトリをシステム PATH に追加してください。ローカル開発のみであれば、ポータブル版の mpv.exe をプロジェクトルートに置くことも可能です。プロジェクト内の .gitignore はローカルのmpvバイナリとDLLを無視するように設定されており、GitHubへの誤アップロードを防ぎます。
Webページを閉じても音楽が再生され続ける
Webページはプレイヤーのインターフェースであり、実際に音声を再生しているのはバックグラウンドの mpv です。
再生のみ停止:
netease-music-mcp.stop音楽鑑賞セッション全体を終了し、Webプレイヤーを閉じる:
netease-music-mcp.shutdownバックグラウンドのmpvを手動で停止する
バックグラウンドの再生プロセスを手動で停止したい場合は、Windows PowerShellで以下を実行してください:
Get-Process mpv,mpv.com -ErrorAction SilentlyContinue | Stop-Process -Force開発
まずプロジェクトディレクトリに移動:
cd netease-music-mcpチェックを実行:
npm run check
npm run smokeWeb UIを起動:
node .\src\server.js --web-player --port 8765MCPサーバーを起動:
npm startAvailable Tools
13 toolscheck_environmentCheck local music environmentB
Check neteasecli, mpv, and login status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears full burden. It only says 'check', but does not disclose if this involves network calls, permissions, or side effects. Behavioral traits are insufficiently described.
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?
The description is a single concise sentence that front-loads the purpose. No unnecessary words; each word 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?
Given zero parameters, no output schema, and no annotations, the description is minimal. It lists what is checked but does not mention the format or meaning of the result, which could be important for an AI agent. Slightly lacking completeness.
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 has zero parameters, and the schema is fully covered. The description adds meaning by naming the specific components to check (neteasecli, mpv, login status), which is valuable. Baseline is 4 for zero parameters.
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?
The description clearly states the tool checks neteasecli, mpv, and login status, specifying the verb and resources. However, it could be more precise about what 'check' entails (e.g., verify installation or running status). It distinguishes from sibling 'get_status' by focusing on environment components.
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?
No guidance is provided on when to use this tool versus alternatives like get_status. The description lacks context for when this check is appropriate or what prerequisites exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listening_contextGet current listening contextA
Return the context that the AI should include on the next user message while music is playing. The lyric context is the next 6 lyric lines at or after the current playback time.
| Name | Required | Description | Default |
|---|---|---|---|
| before | No | Deprecated. Kept for compatibility; lyric context now uses upcoming lines only. | |
| after | No | Number of upcoming lyric lines to include by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It reveals the lyric context behavior (next 6 lines at current time) but does not discuss potential errors, side effects, or required permissions, leaving some gaps.
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?
The description is extremely concise, using two sentences that front-load the purpose and provide necessary detail without any fluff. Every word 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?
Given no output schema and no annotations, the description adequately explains what the tool returns and the default number of lines. It does not cover error states (e.g., when nothing is playing) but is reasonably complete for its simplicity.
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?
Schema coverage is 100%. The description adds value by noting the 'before' parameter is deprecated and kept for compatibility, and clarifies the default behavior of 'after'. This goes beyond the schema's basic description.
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?
The description clearly states the tool returns the listening context (lyric lines) for AI inclusion while music is playing. This is a specific verb+resource combination that distinguishes it from sibling tools like check_environment or play_song.
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?
The description implies the tool should be used to get context for the next user message while music is playing, but does not explicitly state when to use it versus alternatives, nor does it provide exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusGet playback statusB
Get current neteasecli/mpv playback status plus cached song metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. It states it's a read operation but fails to mention side effects, prerequisites, or what 'cached' implies. Minimal transparency given no annotation support.
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?
Single sentence, no filler, directly states purpose. Highly efficient.
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?
No output schema, but description explains return content (playback status and metadata). However, lacks detail on format or additional context that might be needed, making it adequate but not complete.
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?
Input schema has 100% coverage (no parameters), and the description doesn't add parameter details. Baseline 3 is appropriate since schema already covers everything.
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?
The description uses specific verbs ('get') and resources ('playback status plus cached song metadata'), clearly distinguishing it from sibling tools like play_song, pause, and get_listening_context.
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?
No guidance on when to use this tool versus alternatives like get_listening_context. Given the set of sibling tools, explicit usage context would help an agent decide between similar read-only tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
next_songCut to another songB
Switch to another requested song by searching and playing it. Use this for natural-language '切歌'.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | The next song request. | |
| quality | No | exhigh | |
| style | No | Optional fallback style/genre hint. NetEase song wiki style is used first when available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It mentions searching and playing but omits important details such as whether the current song is stopped, what happens to playback history, or any side effects like modifying a playlist.
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?
The description is two sentences and gets straight to the point without extraneous details. It is efficient but could be slightly more structured.
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?
Given the lack of annotations and output schema, the description is too brief. It does not cover error handling, the effect on current playback, or how the natural-language request is parsed, leaving significant gaps for an agent.
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 input schema has 67% description coverage (keyword and style have descriptions; quality does not). The description adds no additional parameter information beyond the schema, so it meets the baseline for this coverage level.
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?
The description clearly states the action ('switch to another song by searching and playing') and identifies the use case ('natural-language '切歌''). However, it does not explicitly differentiate from sibling tools like 'play_song' or 'search_song', which could cause ambiguity.
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?
The description implies when to use (natural-language skip requests) but gives no guidance on when not to use it, nor does it mention alternatives like 'play_song' for exact song selection or 'search_song' for browsing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_web_playerOpen local web playerB
Generate and serve a local web player UI for search/play/pause/stop and lyric context. Returns a localhost URL.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions generating and serving a web player UI and returning a URL, but does not detail side effects such as server lifecycle, resource usage, whether it blocks, or how to stop it. This is insufficient for a tool that starts a local server.
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?
The description is a single sentence that efficiently conveys the core purpose and return value. Every word serves a purpose, with no redundancy.
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?
Despite the tool's relative simplicity (one optional parameter, no output schema), the description omits important behavioral context such as prerequisites (e.g., must be logged in?), server persistence, and how to terminate the web server. The agent may not understand the tool's operational implications.
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?
Schema coverage is 0%, and the description does not mention the 'port' parameter at all. The schema provides constraints and a default, but the description adds no context about the parameter's purpose (e.g., that it specifies the port for the local server). This leaves the agent uninformed.
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?
The description clearly states the tool generates and serves a local web player UI for controlling playback (search/play/pause/stop/lyrics) and returns a localhost URL. This distinguishes it from sibling tools that perform individual actions.
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?
The description implies the tool is for obtaining a UI for music control, but it does not explicitly state when to use it vs. using individual playback commands or when not to use it. Context can be inferred from sibling tool names, but explicit guidance is lacking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pausePause playbackA
Pause current neteasecli/mpv playback.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only states that pausing occurs, but fails to disclose what happens if nothing is playing, whether the state is persistent, or any side effects. The behavioral transparency is minimal.
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?
The description is a single, concise sentence with no unnecessary words. It earns its place by conveying the essential purpose efficiently.
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?
Given the tool's simplicity (no parameters, no output schema), the description adequately conveys the core functionality. However, it could mention that pausing only applies to the specified players and whether it can be undone. Still, for a straightforward action, it is nearly complete.
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 input schema has zero parameters, so the description does not need to explain parameter meanings. The baseline score of 4 applies because there is no parameter information to provide.
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?
The title and description clearly state the action (pause) and the resource (current neteasecli/mpv playback). It is a specific verb+resource pair and distinguishes itself from siblings like 'stop' or 'resume'.
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?
The description provides no guidance on when to use this tool versus alternatives like 'stop', nor does it mention any prerequisites or context. The agent receives no hints about appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_songSearch and play songA
Search for a song, play the best match with neteasecli/mpv, and return song info plus listening context. The style field is filled from NetEase song wiki when available.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Song request, for example '编号89757 林俊杰'. | |
| quality | No | exhigh | |
| style | No | Optional fallback style/genre hint. NetEase song wiki style is used first when available. | |
| resultIndex | No | Zero-based search result index to play, accepts a number or numeric string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavioral traits. It mentions playing and returning context, but omits side effects (e.g., replacing current playback, queue behavior), error handling, and dependency on external players. This leaves significant gaps for an action that mutates playback state.
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: the first concisely captures purpose and output, the second adds a specific detail about the style parameter. No redundancy, every sentence 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?
Given no output schema and no annotations, the description covers key actions but lacks details on return format, error handling, prerequisites, and integration with sibling tools like 'pause', 'resume'. Some context is indirectly provided by sibling names, but the description could be more self-contained.
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?
Schema description coverage is 75%, and the description adds value by explaining the 'style' field behavior ('filled from NetEase song wiki when available'), which is not in the schema. Other parameters are adequately described in the schema, so the description provides marginal but useful improvement.
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?
The description clearly states the tool searches for a song, plays the best match using neteasecli/mpv, and returns song info plus listening context. It distinguishes from sibling 'search_song' (search only) and 'play_track' (play specific track) by combining both actions.
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?
The description implies the tool is for searching and playing a song in one step, but it does not explicitly state when to use this over alternatives like 'search_song' or 'play_track', nor does it mention prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_trackPlay track by IDC
Play a NetEase numeric song ID with neteasecli/mpv and return song info plus the start listening context. The style field is filled from NetEase song wiki when available.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | NetEase numeric track ID. | |
| quality | No | exhigh | |
| style | No | Optional fallback style/genre hint. NetEase song wiki style is used first when available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully convey behavioral traits. It mentions using mpv and returning context, but omits critical details such as whether an active login is required, side effects on current playback state, error handling, and idempotency.
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?
The description is extremely concise (two sentences, ~30 words) and front-loads the primary purpose. Every sentence contributes necessary information without redundancy.
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?
Given the lack of output schema and sibling differentiation, the description is insufficient. It fails to specify return format, error behavior, or usage boundaries, leaving the agent with gaps in understanding how to use the tool effectively.
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?
Schema covers 2 of 3 parameters with descriptions. The description adds context for the 'style' parameter (fallback when wiki unavailable), but no additional meaning for 'id' or 'quality'. This is a modest improvement over the schema alone.
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?
The description clearly states the action (play), resource (NetEase numeric song ID), technology (neteasecli/mpv), and return values (song info plus listening context). However, it does not differentiate from the sibling tool 'play_song', which likely serves a similar purpose.
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?
No guidance is provided on when to use this tool versus alternatives like 'play_song', 'search_song', or when prerequisites (e.g., login via 'setup_netease_login') are needed. The agent is left to infer usage context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resumeResume playbackA
Resume paused neteasecli/mpv playback.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description bears full burden. It only states the action without explaining behavior in edge cases (e.g., already playing, errors, prerequisites). For a 0-param tool, more context is needed.
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?
The description is a single 5-word sentence, perfectly front-loaded with no wasted words. It conveys the essential meaning efficiently.
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?
Given 0 parameters and no output schema, the description is minimally adequate. However, it lacks details on behavior when already playing, error conditions, or state requirements, which would improve completeness for a simple tool.
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?
There are 0 parameters, and schema coverage is trivially 100%. Per calibration, baseline is 4, and the description adds the purpose of the tool without repeating any schema details.
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?
The description explicitly states it resumes paused playback, with verb 'Resume' and resource 'paused neteasecli/mpv playback'. This clearly differentiates from siblings like pause, play_song, and next_song.
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?
Usage is implied (after pausing), but no explicit guidance on when to use versus alternatives. For example, if playback is already playing, the behavior is unclear, and no contrast with play_song for starting new playback is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_songSearch NetEase songsA
Search songs using neteasecli and return normalized NetEase track IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Song, artist, or natural-language search keywords. | |
| limit | No | Result count, accepts a number or numeric string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action and output, with no disclosure of side effects, authentication requirements, or rate limits. This is minimal behavioral information.
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 sentence that is direct and to the point. No redundant or extraneous information.
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 search tool with two fully-described parameters and no output schema, the description is largely sufficient. It clearly states the return type (track IDs), though it could hint at subsequent usage (e.g., with play_song). Minor gap.
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?
Schema coverage is 100%, with both parameters having descriptions. The description adds no extra meaning beyond what is in the schema; it does not elaborate on keyword types or limit behavior. Baseline score of 3 is appropriate.
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?
The description clearly states the verb ('Search'), resource ('songs'), and specifies the backend tool ('neteasecli') and output ('normalized NetEase track IDs'). This differentiates it from sibling tools like 'play_song' or 'get_status'.
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?
No explicit guidance on when or when not to use this tool. The usage is implied by the purpose (searching for songs), but alternatives or prerequisites are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_netease_loginGuide NetEase CLI loginA
Use this when the user needs to set up, log in, or troubleshoot neteasecli. It checks installation/login state and returns step-by-step commands Claude can guide the user through.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | Optional Chrome/Edge browser profile name for neteasecli auth login --profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states that the tool checks installation/login state and returns step-by-step commands, but it does not mention any side effects, required permissions, or potential modifications. This is insufficient for a setup tool.
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?
The description is only two sentences (27 words), front-loaded with the purpose, and every sentence adds value. No unnecessary information is present.
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?
The tool has one parameter and no output schema. The description explains the output type ('step-by-step commands') and the overall workflow. It is complete for the tool's complexity, though the output format could be slightly more specific.
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 input schema already provides full documentation for the single optional parameter ('profile') with 100% coverage. The description does not add additional meaning beyond the schema, so baseline score of 3 is appropriate.
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?
The description clearly states the tool's purpose: to set up, log in, or troubleshoot neteasecli. It distinguishes itself from sibling tools (all music playback or environment checks) by focusing specifically on NetEase CLI authentication.
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?
The description explicitly says when to use the tool ('when the user needs to set up, log in, or troubleshoot neteasecli'). It does not mention when not to use it, but sibling tools are unrelated, so no exclusions are necessary. It provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shutdownEnd listening sessionA
Use this when the user asks to end the listening session, stop listening to music, close the player, or stop the music program. It stops mpv playback, clears listening state, and closes the current web player server, while keeping the MCP tool process alive for future calls.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description fully discloses behavior: stops mpv playback, clears listening state, closes web player server, while keeping MCP process alive. This covers safety and side effects.
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 concise sentences: first defines usage, second describes behavior. No wasted words.
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?
No output schema, but the tool's action is simple (stop). Description is complete for an agent to invoke correctly.
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?
No parameters, so description doesn't need to add schema info. Baseline 4 is appropriate; the tool is fully described without parameter details.
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?
The description clearly specifies the action ('end the listening session', 'stop listening to music', 'close the player') and the resource, distinguishing it from siblings like 'stop' and 'pause'.
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?
Explicitly states when to use the tool ('when the user asks to end the listening session...'), implying when not to (e.g., for pause, use 'pause' tool). No explicit exclusion, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stopStop playbackA
Stop current neteasecli/mpv playback and clear listening state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description clearly states it stops playback and clears listening state, which is a behavioral effect beyond mere stopping. This is sufficient transparency for a simple tool.
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?
One sentence, concise, front-loaded with verb and resource, no wasted words.
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?
Given no output schema and no parameters, the description is complete enough. It fully explains the tool's action.
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?
Input schema has zero parameters and 100% coverage, so baseline is 4. Description adds no parameter info, which is acceptable.
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?
The description clearly states the verb 'stop', the resource 'playback', and specifies the additional effect of clearing listening state. This effectively distinguishes it from siblings like pause or shutdown.
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?
The description implies when to use (when stopping and clearing state is desired) but does not explicitly contrast with alternatives like pause (which likely doesn't clear state) or shutdown.
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.
13 tool updates
v0.1.0- First observed
check_environment - First observed
get_listening_context - First observed
get_status - First observed
next_song - First observed
open_web_player - First observed
pause - First observed
play_song - First observed
play_track - First observed
resume - First observed
search_song - First observed
setup_netease_login - First observed
shutdown - First observed
stop
TDQS
Scored across 13 tools
Each tool has a clearly distinct purpose: environment checks, playback controls, search and play via ID or query, status, context, and session management. No significant overlap.
Most tools follow a verb_noun pattern (e.g., play_song, search_song), but a few like 'next_song' (adjective_noun) and 'shutdown' (single verb) deviate slightly.
13 tools cover the essential functionality of a music player (search, play, control, status, login) without being excessive.
Core playback and search are complete, but missing volume control and playlist management represent minor gaps.
Maintenance
Related MCP Connectors
MCP server for China Railway 12306 ticket availability: schedules and seats by Chinese station name.
MCP server for Suno AI music generation, lyrics, and covers
MCP server for Producer/Riffusion AI music generation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that enables AI assistants to search and retrieve music data (songs, lyrics, playlists, albums, artists) from Netease Cloud Music.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that enables LLMs to search, play, and manage music from multiple platforms (NetEase, QQ, Kugou) and local files, with lyrics retrieval and playback control.MIT
- AlicenseCqualityAmaintenanceMulti-source music search and playback MCP server supporting QQ Music, NetEase Cloud, and local files with playlist management.32MIT
- AlicenseAqualityBmaintenanceA read-only MCP server for NetEase Cloud Music data, enabling querying of songs, artists, albums, playlists, lyrics, and user library through tools like search and get details.153MIT