Skip to main content
Glama
WalterT812

netease-desktop-mcp

by WalterT812

netease-desktop-mcp

让 AI 通过本地 MCP 控制 Windows 网易云音乐客户端:查看当前歌曲、搜索点播、控制播放和切歌,以及给当前歌曲加红心。

A local stdio MCP server for controlling the NetEase Cloud Music desktop app on Windows, using native WebSocket CDP without ChromeDriver or cookie extraction.

这是独立社区项目,与网易云音乐及网易公司无隶属或合作关系。当前版本为 0.1.0-alpha.4,处于早期开发阶段。已通过官方 MCP SDK 的 stdio 连接,在 Windows 网易云音乐 3.1.39.205426 上实机验证读取状态、搜索、点播、播放/暂停和上一首/下一首。红心状态读取已验证,添加或取消红心的写入操作尚未实机测试。 客户端更新可能改变界面结构并影响兼容性。

工作方式

支持 MCP 的 AI 客户端
        │ stdio
        ▼
netease-desktop-mcp
        │ 本机 WebSocket / Chrome DevTools Protocol
        ▼
Windows 网易云音乐客户端

音乐由网易云客户端播放,推荐和操作决策由连接的 AI 客户端完成。此项目操作客户端已有的界面与登录会话,不要求提供网易云密码,也不提取 Cookie。

Related MCP server: mcp_music_server

当前能力

MCP 工具

用途

netease_get_status

读取当前歌曲及播放、红心状态

netease_search

搜索歌曲,取得可用于点播的结果

netease_play_result

播放搜索结果

netease_set_playback

设置播放或暂停

netease_skip_track

上一首或下一首

netease_set_liked

设置当前歌曲的红心状态;写入尚未实机测试

netease_create_playlist

创建空的自建歌单,默认私人,可核验 ID、权限与保留结果

netease_list_playlists

刷新自建、收藏及系统歌单,无需切换页面

netease_prepare_playlist_delete

核对自建歌单 ID 和名称,生成短期删除预览

netease_delete_playlist

消费一次性预览,删除指定自建歌单并检查保留结果

红心操作必须携带从当前状态取得的 trackKey。无法确认当前歌曲或红心状态时,工具拒绝修改,避免误操作其他歌曲。它提供“设置为喜欢 / 不喜欢”的语义,不盲目切换按钮。

trackKey 是客户端当前可见歌曲标签的哈希,不是网易云歌曲唯一 ID。 在已验证的新布局中,分别读取可见歌曲名和歌手,再组成标签。它可以发现标签变化,但无法区分标签相同的不同歌曲或录音版本,也无法补全界面未显示的信息。切歌及点播的状态核验同样依赖这些可见信息;不应把 trackKey 当作跨歌曲版本或跨会话的可靠身份凭证。

目前不包含向歌单添加歌曲、取消收藏他人歌单、账号管理、下载音乐或完整听歌历史分析。每个 MCP 会话内部按顺序执行完整操作;Windows 命名管道提供按调试端口区分的跨进程互斥,同一时间只允许一个控制操作。操作结束立即释放,进程退出时由系统回收,不会留下需要手动删除的锁文件。另一个会话正在操作时会返回忙碌错误;请等它结束,并避免同时手动改变页面。

创建歌单(可选启用)

设置 MCP 环境变量 NETEASE_ENABLE_PLAYLIST_CREATE=1 后,可使用 netease_create_playlist。传入 name(最长 40 字符),isPrivate 默认 true。创建前必须有用户授权;私人歌单需经用户要求才改用公开创建。工具拒绝同名歌单,核验新 ID、归属、隐私、零曲目数和其他歌单保留结果。不确定的结果不会自动重试,同一进程也会阻止以相同名称再次创建。这里只建立空歌单,不隐含添加当前歌曲。

歌单删除(可选启用)

默认禁用删除。明确需要此能力时,在 MCP 进程配置中设置:

{
  "NETEASE_ENABLE_PLAYLIST_DELETE": "1",
  "NETEASE_PROTECTED_PLAYLIST_IDS": "123456789,987654321"
}

示例 ID 必须替换成自己要保留的歌单 ID。所有收藏歌单和系统“我喜欢的音乐”自动受保护;额外保护名单来自本地环境变量,不能通过工具参数覆盖。工具清单的危险操作标注只是提示,真正的拒绝检查在控制器和客户端页面两层执行。

使用顺序:读取清单 → 以 ID 和完整名称生成预览 → 获得用户明确授权 → 将预览的 deleteToken 传给执行工具的 token 参数。预览绑定登录账号、歌单 ID、名称、曲目数和更新时间,两分钟后过期,发送删除前即消费;没有批量删除或自动重试入口。执行后刷新清单,检查目标消失以及其他自建、收藏和系统歌单的信息保持一致。失败或连接中断时应先检查实际结果;同一进程会阻止对结果不确定的 ID 再次生成预览。该阻止记录不跨进程持久化,重启不能视作重试授权。

此能力调用客户端自身的歌单操作,通过本机 CDP 读取 React store 并派发固定 action,不用鼠标、键盘、右键菜单或窗口焦点。当前只允许已核验的 app.chunk.d4e863d.js 客户端构建;这是非公开接口兼容性限制,不是文件真实性验证。客户端升级后若构建变化,先拒绝操作,待重新适配。

删除歌单可能无法撤销。建议先保留曲目记录;曲目清单不能恢复原歌单 ID、关注者和历史数据。保护与核验基于客户端刷新后的歌单元数据,没有逐首比对所有保留歌单的曲目,也不阻止用户或其他程序同时修改账号。

环境要求

  • Windows 10 或 Windows 11,以及已安装的网易云音乐桌面客户端。

  • Node.js 24 或更高版本,附带 npm。

  • 支持本地 stdio MCP 的 AI 客户端。

真实音乐控制需要 Windows 网易云客户端。自动测试已在 Windows / Node.js 24 上运行;Linux 尚未运行验收,GitHub Actions 尚未启用。自动测试与客户端实机兼容性是不同的验收范围。

本地启动

在项目目录安装依赖并运行测试:

npm ci
npm test

用启动脚本为网易云开启本机调试接口。将示例替换为自己的客户端路径:

pwsh -File .\scripts\Start-CloudMusic.ps1 -CloudMusicPath 'D:\Apps\CloudMusic\cloudmusic.exe'

如果网易云已经运行且没有开启调试接口,可以明确要求脚本重启客户端。此操作会中断当前播放:

pwsh -File .\scripts\Start-CloudMusic.ps1 -CloudMusicPath 'D:\Apps\CloudMusic\cloudmusic.exe' -Restart

默认调试端口为 9229;脚本支持 -Port 9229。这些命令供用户在自己的电脑上按需执行;除已验证的版本外,其他客户端版本是否接受调试参数仍需确认。

启动 MCP 服务器前指定客户端可执行文件路径。Windows 上会校验调试端口归属,防止连接其他程序:

$env:NETEASE_MUSIC_PATH = 'D:\Apps\CloudMusic\cloudmusic.exe'
$env:NETEASE_MCP_PORT = '9229'
npm start

NETEASE_MUSIC_PATH 为必填项;NETEASE_MCP_PORT 默认 9229,须与启动脚本一致。

服务器使用标准输入和标准输出传输 MCP 消息,不是网页服务;正常使用时应由 AI 客户端启动。

连接 AI 客户端

以下为通用 MCP JSON 配置示例。把路径替换为实际项目路径,并按所用客户端的配置格式填写:

{
  "mcpServers": {
    "netease-desktop": {
      "command": "node",
      "args": ["D:\\Projects\\netease-desktop-mcp\\src\\server.mjs"],
      "env": {
        "NETEASE_MUSIC_PATH": "D:\\Apps\\CloudMusic\\cloudmusic.exe",
        "NETEASE_MCP_PORT": "9229"
      }
    }
  }
}

如果 AI 客户端无法从 PATH 找到 Node.js,请将 command 改成 node.exe 的绝对路径。先启动带调试接口的网易云,再连接 MCP。

连接后可以尝试:

  • “现在放的是什么歌?”

  • “搜索几首适合专注工作的音乐,把结果给我看看。”

  • “播放搜索结果里的第一首。”

  • “暂停一下。”

  • “把当前这首加入我喜欢的音乐。”

命令行检查

项目也提供命令行入口,便于独立排查连接与操作问题:

node .\src\cli.mjs status
node .\src\cli.mjs --help
node .\src\cli.mjs search "轻音乐"
node .\src\cli.mjs play "轻音乐" "1"
node .\src\cli.mjs playback pause
node .\src\cli.mjs skip next

命令包括 status、search、play、playback、skip 和 like。play 会重新搜索并播放指定行;独立 CLI 进程不共享搜索 token,重新搜索的排序也可能变化。需要严格对应已查看的结果时,请使用同一 MCP 会话中的搜索和点播工具。

红心命令格式为 node .\src\cli.mjs like true <trackKey>,取消红心则使用 false。将 <trackKey> 替换为刚刚查询的状态值,只在明确希望改变收藏时执行。更多参数以 CLI 帮助为准。

安全与兼容性

调试接口能够控制客户端页面。只应绑定本机回环地址,不要开放到局域网、配置公网转发或连接未知调试目标。不要把调试端点交给不信任的程序。

MCP 会把操作所需的歌曲信息返回给所连接的 AI 客户端。该客户端如何处理这些信息,由其设置和隐私政策决定。

自动化依赖网易云当前界面的可访问结构。找不到目标或无法确认状态时,应查看工具错误并检查客户端界面。请勿把播放请求已发出视为已实际听到声音;歌曲版权、会员权限及网络状态仍由网易云决定。

关闭 MCP 会断开控制连接,不会关闭网易云客户端。重启网易云至正常模式可以结束本次调试会话。安全问题的报告方式见 SECURITY.md。

验证范围

alpha.3 已通过官方 SDK stdio 实机验证完整歌单读取及用户明确授权的自建歌单删除,并核对其余歌单 ID、名称、曲目数和更新时间;没有使用原生桌面输入。自动测试覆盖 47 项,包括权限默认关闭、保留名单、账号与歌单变化、过期及重复 token、错误结果和协议结构。

Windows 网易云音乐 3.1.39.205426 已通过官方 SDK stdio 实机检查:分别读取歌曲名/歌手、播放状态和红心状态,搜索、点播、暂停/继续播放,以及双向切歌。检查结束后已恢复检查前的曲目和暂停状态,未进行红心写入。这里的播放成功表示客户端界面状态核验成功,不保证音频设备实际发声,也不证明收藏已持久化到服务器。

适配器在新布局的 default-bar-wrapper 内按 data-log 的 oid 定位红心、上一首和下一首按钮,避免依赖按钮排列顺序;歌曲标签来自独立的 .title 与 .author。这些实现依据只适用于相应布局,不能推定后续版本兼容。

开发与贡献

实现使用 JavaScript ESM、官方 @modelcontextprotocol/sdk、Zod 和 Node.js 原生 WebSocket。提交前运行 npm test。涉及 UI 定位或客户端兼容性的改动,请说明 Windows 版本、网易云版本、复现步骤和实机验证范围;不要提交账号信息、Cookie、个人歌曲历史或未经脱敏的调试日志。

本地自动测试覆盖合成 DOM、控制器、连接与互斥逻辑,以及官方 SDK 的内存 transport 和 stdio 协议。GitHub Actions 尚未启用,Windows/Linux 工作流模板位于 docs/ci-workflow.yml。有工作流写入权限的维护者可将模板放入 .github/workflows/test.yml 后启用。不要把该模板的存在视为 CI 已通过。

本项目参考了 Ocrosoft/NetEaseMusic-MCP 的功能设计与界面定位思路,独立实现直接 CDP 连接,不使用其 ChromeDriver 控制实现。相关致谢和许可证见 THIRD_PARTY_NOTICES.md。

许可证

MIT · Copyright (c) 2026 Walter Tang and contributors.

Available Tools

10 tools
netease_create_playlistnetease_create_playlistA

Create one empty owned playlist after user authorization. Private by default. Requires NETEASE_ENABLE_PLAYLIST_CREATE=1. Refuses an existing exact name; verifies returned ID, ownership, privacy and preservation of other playlists. Never retry an uncertain result automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
isPrivateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavioral traits: it refuses an existing exact name, verifies returned ID/ownership/privacy, preserves other playlists, and never retries uncertain results automatically. This gives the agent critical safety and side-effect information that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then adds necessary prerequisites and behavioral caveats. Every sentence contributes useful information without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite leveraging an output schema, the description covers prerequisites, failure conditions, verification behavior, and side-effect expectations. For a create operation with two parameters, this is complete enough for an agent to invoke it correctly and anticipate outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no parameter descriptions, so the description carries the burden. It adds meaning for the 'name' parameter by noting that an existing exact name is refused, and for 'isPrivate' by stating that private is the default. While it does not fully explain all boolean semantics, it compensates well for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('empty owned playlist') and clearly distinguishes this from sibling tools like netease_list_playlists, netease_delete_playlist, and netease_set_liked. It also includes key scoping details ('after user authorization', 'Private by default') that make the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear invocation context: it requires user authorization and the NETEASE_ENABLE_PLAYLIST_CREATE=1 flag, making it easy to know when this tool applies. It does not explicitly name alternatives or state when not to use it, but the sibling names and the create-vs-manage operation make the selection obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_delete_playlistnetease_delete_playlistA
Destructive

After explicit user authorization, consume a deletion preview token and delete that owned playlist once. Rechecks account, name, count, update time and protections, then verifies removal and preservation of other playlists. Never automatically retry an uncertain result. Track-list backups cannot restore original IDs or followers.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral detail beyond the annotations: the token is consumed once, the operation rechecks account and playlist attributes, verifies removal and preservation of other playlists, never auto-retries, and backups cannot restore original IDs or followers. This is excellent disclosure for a destructive, non-idempotent tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and well-structured: precondition first, then the core action, then verification and safety constraints. Every sentence adds meaningful information without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive single-use operation, the description covers authorization, token consumption, verification, non-retry behavior, and irreversibility caveats. An output schema exists, so return value documentation is not required. The only minor implicit detail is the source of the token, but the sibling list makes that clear enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining that the token is a deletion preview token, tied to ownership and single-use consumption. It does not explicitly state where the token comes from or its expiry, but the uuid format and pattern in the schema cover the validation aspects.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action: consume a deletion preview token and delete an owned playlist once. It distinguishes this from siblings by emphasizing it is the final deletion step, not preparation, listing, or status checking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: use only after explicit user authorization and with a deletion preview token. It also forbids automatic retries on uncertain results. It does not explicitly name the prerequisite sibling prepare_playlist_delete, but the token language strongly implies the required flow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_get_statusnetease_get_statusA
Read-onlyIdempotent

Read the current visible song label, playback and heart state. null means unknown. trackKey hashes the visible title/artist, not a unique catalog ID; identical labels are indistinguishable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive behavior. The description adds valuable beyond-annotation context: null means unknown, and trackKey is a hash of visible label rather than a unique catalog ID, preventing misuse. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core purpose and immediately add essential interpretive caveats. Every clause earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, rich annotations, and an output schema present, the description covers the key semantic pitfalls (null meaning and trackKey identity limits). Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description appropriately focuses on output semantics rather than params, and the empty schema leaves nothing undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Read') and resource ('current visible song label, playback and heart state'), clearly distinguishing it from the mutation/search siblings. It also adds meaningful semantics about null and trackKey, making the tool's scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is provided: this is the read/status tool among siblings that perform search or mutations. It does not explicitly enumerate exclusions or alternatives, but the 'current visible' framing makes its intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_list_playlistsnetease_list_playlistsA
Read-onlyIdempotent

Refresh owned, collected and system playlists through the desktop client. Does not move the mouse, focus or navigate. Account identifiers are omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly/idempotent/non-destructive guarantees. The description goes beyond them by disclosing additional behavioral traits: no mouse/focus/navigation side effects and omission of account identifiers. This is valuable context for an agent controlling a desktop client.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each with a distinct purpose: scope/action, UI safety guarantee, and parameter omission. The key action is front-loaded and there is no filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter tool with rich annotations, an output schema, and a precise scope statement, the description covers operation, side-effect behavior, and input context. Nothing needed for correct invocation is missing, and the output schema covers return-value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is trivially 100%. The description adds meaning by explaining that account identifiers are omitted, which clarifies why no parameters are required and prevents the agent from attempting to pass an account ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb 'Refresh' and a concrete resource ('owned, collected and system playlists') within the desktop client. This clearly distinguishes it from sibling mutation tools like netease_create_playlist and netease_delete_playlist.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by positioning this as the playlist-refresh operation and explicitly states it does not move the mouse, focus, or navigate, so it is safe to invoke without disrupting the UI. It does not name alternatives or exclusions, but no sibling tool covers the same list-refresh purpose, making the intended use unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_play_resultnetease_play_resultA

Play an exact row from the latest search. Requires its token and string index. Refuses changed/stale rows. Success means the UI shows the chosen title/artist playing; it does not prove audible output.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexYes
searchTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavior beyond the annotations: it refuses changed/stale rows and clarifies that success only means the UI shows the chosen title/artist playing, not audible output. This is useful context that readOnlyHint and destructiveHint do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core action is front-loaded, and every sentence adds necessary information such as preconditions, stale-row behavior, and the success caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, stale-row behavior, and the success caveat, and an output schema exists so return values needn't be described. It lacks only an explicit pointer to where the token/index originate and how to route generic playback requests to netease_set_playback.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only restates 'token and string index' without detailing that searchToken comes from netease_search responses or how index maps to row position. It provides some meaning but leaves parameter semantics mostly to schema names and format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Play an exact row from the latest search.' The exact-row/latest-search qualifier distinguishes it from generic playback (netease_set_playback) and search (netease_search), so an agent can infer what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly sets preconditions: requires a search token and string index, and only works on the latest search by refusing changed/stale rows. It does not explicitly name when-not-to-use or alternatives, but the intended context is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_prepare_playlist_deletenetease_prepare_playlist_deleteA
Read-only

Preview deletion of an exact owned playlist ID and name; returns a single-use token valid for two minutes. Requires NETEASE_ENABLE_PLAYLIST_DELETE=1. Collected, system and configured protected playlists are refused. Preview is not user consent.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
expectedNameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description adds critical behavioral details: the token is single-use and valid for two minutes, protected playlists are refused, and 'Preview is not user consent.' This prevents the agent from assuming the preview itself authorizes deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences front-load the core action and token outcome, then add prerequisites, exclusions, and the important consent caveat. No word is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers prerequisites, matching criteria, protected cases, token validity, and the non-consent warning. Since an output schema exists, describing the return shape is unnecessary, and the two required parameters are addressed sufficiently for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero schema description coverage, the description carries the burden of explaining parameters. It maps id and expectedName to 'an exact owned playlist ID and name', adding meaning beyond the bare schema. It could be more explicit that expectedName must match the current playlist name exactly, but the existing wording is a meaningful improvement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: it previews deletion of an exact owned playlist by ID and name. It adds that it returns a single-use token, which distinguishes this preparation step from the sibling netease_delete_playlist that would actually perform deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful usage context: it requires NETEASE_ENABLE_PLAYLIST_DELETE=1, only works on exact owned playlists, and refuses collected, system, or configured protected playlists. It does not explicitly name an alternative such as netease_delete_playlist or state 'use this before deleting', but the preview-and-token flow makes the intended usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_set_likednetease_set_likedA
DestructiveIdempotent

Set the current song heart only when explicitly requested. Supply trackKey from a fresh status result. Refuses unknown heart state or changed labels. Visible UI verification is not server-side persistence verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
likedYes
trackKeyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context beyond the annotations: visible UI verification is not server-side persistence verification, and the tool refuses stale or inconsistent state. With readOnlyHint=false and destructiveHint=true, the mutation context is already implied; the description adds meaningful caution about relying on UI feedback.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short, dense sentences, each earning its place. The core instruction is front-loaded, followed by prerequisites, refusal behavior, and verification caveat. No filler or redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given only 2 simple parameters, an output schema, and sibling context, the description covers purpose, usage conditions, parameter sourcing, and verification caveats. Nothing essential for an agent to invoke the tool correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It adds the critical semantic that trackKey must come from a fresh status result, and frames `liked` as the heart state. This is useful beyond the bare boolean/string schema, though it could explain the liked-to-heart mapping more explicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action—setting the current song's heart/liked state—with a clear resource target. It is distinguishable from the sibling tools like netease_set_playback and netease_skip_track, though it does not explicitly name a sibling to differentiate against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use guidance: only when explicitly requested, and requires a fresh status result for trackKey. It also notes refusal conditions for unknown heart state or changed labels. It stops short of naming alternative tools or contrasting them directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_set_playbacknetease_set_playbackA
Idempotent

Explicitly play or pause and verify the UI state. Does not blindly toggle. Unknown UI state refuses the action.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate mutation, idempotency, and openness, but the description adds valuable behavioral detail: it verifies UI state, does not blindly toggle, and refuses when the UI state is unknown. This is meaningful context beyond the structured annotations and helps the agent predict failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded. The first sentence states the core purpose, and the next two add important caveats without redundancy. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema and meaningful annotations, the description is nearly complete. It covers the intended action, the refusal behavior, and the verification aspect. It could be slightly stronger by explicitly pointing to netease_get_status for checking unknown UI state before calling this tool, but the need is reasonably implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'play or pause,' which maps directly to the action enum, and 'does not blindly toggle' clarifies that the action values are absolute target states. However, it does not explicitly name the action parameter or explain its requiredness, leaving much to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: explicitly play or pause and verify the UI state. It is specific about the verb and resource, but it does not explicitly distinguish itself from sibling tools like netease_play_result or netease_get_status, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool when you need an explicit play or pause, not a blind toggle. It also implies a prerequisite—unknown UI state is refused—so the agent should confirm state first. However, it does not explicitly name an alternative or say 'use netease_get_status first'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

netease_skip_tracknetease_skip_trackA

Move to next/previous track once and verify a changed visible song label. Unchanged/identical labels are reported as unverified; do not automatically retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses meaningful behavior beyond the annotations: it performs a single skip, verifies a visible song label, reports unchanged labels as unverified, and explicitly prohibits automatic retries. These details are not captured by readOnlyHint, openWorldHint, idempotentHint, or destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the main action is front-loaded. The second sentence adds a critical edge-case instruction without bloating the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema and clear annotations, the description covers the action, the verification expectation, the failure/edge-case reporting behavior, and the retry policy. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one enum parameter, 'direction', with no property descriptions. The description compensates by linking the direction values to the effect ('Move to next/previous track once'), giving the agent enough semantic grounding to select 'next' or 'previous' correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Move to next/previous track once') and a clear resource ('track'), with an additional verification behavior that distinguishes it from broader playback tools like netease_set_playback. It is immediately obvious what the tool does and how it differs from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational guidance: perform the skip exactly once, verify the label change, treat unchanged labels as unverified, and do not retry. It lacks an explicit comparison to alternatives such as netease_set_playback, so it stops short of full when/when-not coverage.

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.

  1. 10 tool updatesv0.1.0-alpha.4
    • First observednetease_create_playlist
    • First observednetease_delete_playlist
    • First observednetease_get_status
    • First observednetease_list_playlists
    • First observednetease_play_result
    • First observednetease_prepare_playlist_delete
    • First observednetease_search
    • First observednetease_set_liked
    • First observednetease_set_playback
    • First observednetease_skip_track

TDQS

A4.3/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct action: observing status, searching, playing a specific result, toggling playback, skipping, liking, and playlist creation/listing/deletion. The two-step playlist delete preview is clearly separated from the actual delete, and playback controls are differentiated by target and behavior.

Naming Consistency4/5

Tool names follow a consistent netease_ prefix and mostly use verb_noun (netease_get_status, netease_create_playlist, netease_delete_playlist). Minor deviations like netease_search (verb only) and netease_set_liked (verb + adjective rather than a noun) keep the overall pattern readable but not fully uniform.

Tool Count5/5

Ten tools is a well-scoped size for controlling a desktop music app and managing playlists. Each tool covers a distinct capability without redundant helpers or excessive granularity.

Completeness3/5

Core playback/search/like flows are well covered, and playlists create/list/delete exists as a lifecycle. However, there is no tool to add or remove tracks from a playlist or inspect playlist contents, so a created playlist remains an empty dead end for many real workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching NetEase Cloud Music and safely managing playlists through a local stdio MCP server with automatic backend lifecycle management.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Controls the official NetEase Cloud Music desktop client on Windows, enabling AI to search, play, manage queues, and adjust playback settings via a local control channel.
    1
    MIT