Skip to main content
Glama
Reese-max

Music Playlist Organizer MCP

by Reese-max

Music Playlist Organizer MCP

這是一個以 Node.js 撰寫的 MCP Server,讓你把找到的歌曲名稱或 YouTube/YouTube Music 連結,辨識後分類、去重,並加入自己的 YouTube 播放清單,之後可以直接回到 YouTube 觀看。

目前以 YouTube 為主要 provider;Spotify 工具仍保留,但屬於選配的 legacy provider。

收藏流程

對「歌曲名稱或搜尋文字」建議採用兩階段流程,避免搜尋結果第一名不是你想收藏的影片:

  1. 呼叫 youtube_identify_track,取得候選影片與 videoId

  2. 使用者確認候選後,把選定的 videoId 傳給 youtube_save_track,並設定 mode: "apply"

  3. Server 依分類找到或建立播放清單,檢查相同 videoId 後才加入。

如果輸入本身是精確的 YouTube/YouTube Music 影片連結,可以直接套用;播放清單連結不能當成單一歌曲輸入。

Related MCP server: yt-curator-mcp

YouTube 工具

  • youtube_search_videos:搜尋歌曲、藝人或影片。

  • youtube_identify_track:從 URL、YouTube Music URL、影片 ID 或文字搜尋辨識影片。

  • youtube_resolve_links:批次解析多個連結或搜尋文字。

  • youtube_list_playlists:列出已授權帳號的播放清單。

  • youtube_create_playlist:建立私人、未列出或公開播放清單。

  • youtube_check_playlist_duplicates:檢查播放清單內的重複影片。

  • youtube_classify_playlist:依標題與頻道關鍵字預覽分類。

  • youtube_add_to_playlist:預覽或將影片加入既有播放清單。

  • youtube_save_track:辨識、分類、去重,並加入指定或自動建立的分類播放清單。

  • youtube_auth_status:查看憑證狀態,不會顯示 token。

  • youtube_auth_revoke:撤銷 OAuth 憑證並刪除本機加密憑證檔。

需求

  • Node.js 20 或更新版本。

  • YouTube Data API key:用於公開搜尋與影片資訊;若不設定,catalog read 會改用 YouTube OAuth。

  • Google OAuth 2.0 client:列出、建立與修改自己的播放清單時需要。

  • OAuth scope:https://www.googleapis.com/auth/youtube

安裝與設定

Copy-Item .env.example .env
npm install
npm test

.env 的 YouTube 相關設定:

YOUTUBE_API_KEY=
GOOGLE_CLIENT_ID=your-google-oauth-client-id
GOOGLE_CLIENT_SECRET=your-google-oauth-client-secret
YOUTUBE_OAUTH_REDIRECT_URI=http://127.0.0.1:53682/oauth2callback

# 建議使用加密憑證檔,不要把 token 貼進設定檔。
YOUTUBE_CREDENTIAL_FILE=
YOUTUBE_CREDENTIAL_PASSPHRASE=use-a-local-secret-not-committed-to-git

YOUTUBE_REGION=TW
YOUTUBE_PLAYLIST_PREFIX=
PROVIDER_TIMEOUT_MS=15000
PROVIDER_MAX_READ_RETRIES=1

首次授權請執行:

npm run youtube:auth

這個流程會使用 OAuth state 與 PKCE,開啟瀏覽器完成 Google 授權,並把 token 寫入本機 AES-256-GCM 加密檔。終端機只會顯示檔案位置與完成狀態,不會顯示 access token 或 refresh token。執行 MCP Server 時,仍須讓它取得同一個 YOUTUBE_CREDENTIAL_PASSPHRASE;不要把 passphrase、.env 或憑證檔提交到 Git。

YOUTUBE_CREDENTIAL_FILE 未設定時,預設位置是使用者設定目錄下的 music-playlist-organizer/youtube-credentials.jsonYOUTUBE_ACCESS_TOKENYOUTUBE_REFRESH_TOKEN 仍可作為明確的本機 fallback,但不建議在一般部署中使用,也不要提交到 repository。

使用範例

先取得候選,不會寫入帳號:

youtube_identify_track({
  "input": "Daft Punk One More Time",
  "limit": 5
})

使用者從回傳的 candidates 選定 videoId 後再收藏:

youtube_save_track({
  "input": "Daft Punk One More Time",
  "videoId": "dQw4w9WgXcQ",
  "category": "Party",
  "mode": "apply",
  "createIfMissing": true,
  "privacyStatus": "private",
  "dedupe": true
})

精確連結可以直接使用:

youtube_save_track({
  "input": "https://music.youtube.com/watch?v=dQw4w9WgXcQ",
  "category": "Chill",
  "mode": "apply"
})

若寫入期間發生 timeout、取消、網路錯誤、429 或 5xx,工具會回傳 UNKNOWN_AFTER_WRITEPARTIAL_PLAYLIST_CREATED,包含已確認的 playlist ID、video ID 與 completedSteps。請先依回傳的 exact ID 讀取播放清單,再決定是否重試;寫入不會自動重試。

MCP Client 設定

把專案的絕對路徑填入 args,並讓 MCP process 取得加密憑證的 passphrase:

{
  "mcpServers": {
    "music-playlist-organizer": {
      "command": "node",
      "args": ["C:\\path\\to\\spotify-playlist-organizer-mcp\\src\\server.js"],
      "env": {
        "YOUTUBE_API_KEY": "your-youtube-data-api-key",
        "GOOGLE_CLIENT_ID": "your-google-oauth-client-id",
        "GOOGLE_CLIENT_SECRET": "your-google-oauth-client-secret",
        "YOUTUBE_CREDENTIAL_PASSPHRASE": "load-this-from-your-local-secret-manager",
        "YOUTUBE_REGION": "TW"
      }
    }
  }
}

目前 server 使用 stdio MCP。Figma 手機頁面原型已建立,但要讓手機頁面直接操作 MCP,下一階段還需要受保護的 HTTP API/session layer;MCP 核心收藏流程已先完成。

Spotify legacy provider

既有的 spotify_* 工具仍保留,包括搜尋、辨識、批次解析、重複檢查、分類與播放清單整理;不設定 Spotify 環境變數時,不會影響 YouTube 工具。

品質控制

npm test
npm run smoke

GitHub Actions 會在 push 與 pull request 執行 npm cinpm test,並對 job 設定時間上限與 read-only repository 權限。

官方文件

Available Tools

15 tools
spotify_check_playlist_duplicatesA

Find repeated tracks in a Spotify playlist without changing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It does disclose an important trait: the tool is read-only and will not modify the playlist. It does not cover authentication, return format, or duplicate-detection criteria, but the read-only guarantee is meaningful.

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 a single sentence with no filler. The core action and the important non-mutating constraint are both front-loaded.

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

Completeness3/5

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

For a simple one-parameter read-only tool, the core operation is clear. The main gaps are the missing playlist identifier format and any guidance about the expected result shape, but the overall scope is modest.

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

Parameters2/5

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

The schema provides only a required string named 'playlist' with no description, and the tool description does not clarify whether this should be a Spotify playlist ID, URL, or name. The description adds only the domain context 'Spotify playlist' without specifying the accepted 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 uses a specific verb and resource ('Find repeated tracks in a Spotify playlist') and adds a clear non-mutating qualifier ('without changing it'). This distinguishes it from mutation-oriented siblings like spotify_organize_playlist.

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

Usage Guidelines3/5

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

The intended use case is implied: call this when you want to detect duplicates in a playlist. However, it does not explicitly mention alternatives or conditions for 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.

spotify_classify_playlistC

Preview deterministic playlist categories using title, artist, and album keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesNo
playlistYes

TDQS

C2.6/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden. It discloses that the tool is 'deterministic' and keyword-based, but omits whether it is read-only, what happens on no matches, or any authentication/rate limits. The 'preview' wording implies a non-destructive read, but it isn't explicitly stated.

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

Conciseness3/5

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

The description is a single, concise sentence with no fluff. However, it is too sparse to be effective — it trades completeness for brevity and misses key usage and parameter details that would help an agent call the tool confidently.

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

Completeness2/5

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

For a tool with a nested object schema and no output schema or annotations, this description is not complete. It doesn't define what output ('categories') is returned, how the rules map to songs, or any edge cases. An agent would likely need to contact the schema to understand the 'rules' object and playlist parameter, which defeats the description's raison d'être.

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

Parameters2/5

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

With 0% schema description coverage, the description must contextualize both parameters. It hints that 'rules' relate to 'title, artist, and album keywords', but gives no structure for the 'rules' object or whether 'playlist' is a name or ID. It does not help the agent understand how to provide the required parameter correctly.

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 phrase 'Preview deterministic playlist categories' clearly identifies a classification action on a playlist, and 'using title, artist, and album keywords' explains the method. It distinguishes itself from sibling operation like 'check_playlist_duplicates' and 'organize_playlist', though it doesn't explicitly contrast with them.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives, prerequisites, or types of playlists. The description does not mention common cases like playlists with missing metadata or how this differs from 'youtube_classify_playlist' or 'spotify_organize_playlist'.

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

spotify_identify_trackC

Identify a track from a Spotify link, YouTube link, ISRC/search text, or title and artist.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
limitNo
artistNo
marketNo

TDQS

C2.8/5.0
Behavior2/5

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 says nothing about return shape, pagination/limit behavior, network calls, authentication, or side effects. The only behavioral hint is that it accepts multiple input formats, leaving the agent to guess what happens with each.

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?

A single, front-loaded sentence states the action and input forms without wasted words. Excellent for a simple tool description.

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

Completeness2/5

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

With no output schema and no annotations, the description should tell the agent what the tool returns and how the parameters shape behavior. It does not explain the return value, the meaning of 'limit', market filtering, or what 'identify' means as an operation. The description is too sparse for confident invocation.

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

Parameters2/5

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

The input schema has zero descriptions, so the description must clarify the parameters. It partially does by mentioning Spotify/YouTube links, ISRC, search text, and 'title and artist', but it never explicitly ties these to the 'input' and 'artist' parameters, and it says nothing about 'limit' or 'market'. Coverage is inadequate for four parameters.

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 ('Identify') on a resource ('track') and enumerates accepted input formats. It is immediately clear what the tool does. However, it does not contrast this with the overlapping sibling tools spotify_search_tracks, spotify_resolve_links, or youtube_identify_track, so sibling differentiation is missing.

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

Usage Guidelines2/5

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

The description implies the tool is used to turn links or search text into a track identity, but it gives no explicit guidance on when to choose it over alternatives. There are several close siblings and no exclusion criteria, so an agent gets little direction about when this tool is the right one.

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

spotify_organize_playlistB

Preview or apply category playlists derived from a source Spotify playlist. Apply replaces only matching derived playlists.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNopreview
rulesNo
prefixNo
publicNo
playlistYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden, and it does disclose the key mutation behavior: apply replaces only matching derived playlists while preview is non-destructive. Still, it omits important side-effect details such as whether apply can delete or rename existing playlists, whether the source playlist is modified, and whether the operation is idempotent.

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 definition is two sentences with no filler: the first sentence front-loads the action and resource, and the second isolates the critical caveat about replacement behavior. Every clause earns its place.

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

Completeness2/5

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

Given no annotations, no output schema, a nested and undocumented 'rules' parameter, and five total parameters, this description is not complete enough for safe invocation. The agent knows the broad intent but cannot reliably determine rule syntax, the effect of prefix/public, or the full consequences of applying changes.

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

Parameters2/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 roughly maps to two parameters: 'Preview or apply' maps to mode, and 'source Spotify playlist' maps to playlist. The central 'rules' object, along with prefix and public, are left entirely unexplained, which is a serious gap for an agent trying to construct a valid call.

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 names a concrete action ('Preview or apply') on a clearly defined resource ('category playlists derived from a source Spotify playlist') and adds a distinctive behavioral detail ('Apply replaces only matching derived playlists'). It is specific enough to separate it from generic playlist tools, though it does not explicitly compare against nearby siblings like spotify_classify_playlist.

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

Usage Guidelines3/5

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

The description implies a preview-then-apply workflow and warns that apply replaces only matching derived playlists, which is a useful usage caution. However, it never states when to choose this tool over alternatives such as spotify_classify_playlist or the YouTube playlist tools, and it offers no explicit exclusions or when-not-to-use guidance.

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

spotify_search_tracksC

Search the Spotify catalog for tracks by title, artist, album, or free text.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
marketNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it searches the catalog, implying a read-only operation, but does not mention rate limits, authentication, pagination, result ordering, or any side effects. The lack of such context is a significant gap for a search tool that returns a list of tracks.

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

Conciseness4/5

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

The description is a single, efficient sentence with no filler, and the core action is front-loaded. However, it lacks any structured breakdown of parameters or usage scenarios, which would have added value without excessive length.

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

Completeness2/5

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

Given the tool has 3 parameters, no output schema, and no annotations, the description is far from complete. It does not explain the return format, pagination, or the semantics of 'limit' and 'market', and provides no usage examples or context. An agent would need to inspect the schema (which lacks descriptions) or guess, making this insufficiently complete.

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

Parameters2/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 for parameter meaning. It partially explains the 'query' parameter by listing search fields, but completely ignores 'limit' (default 10, max 50) and 'market' (two-letter country code). The agent gets no hint about pagination or market filtering, leaving these parameters underspecified.

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 ('Search'), a clear resource ('Spotify catalog'), and a target ('tracks'), and enumerates the search dimensions ('by title, artist, album, or free text'). This makes the tool's purpose unambiguous and distinct from siblings like spotify_identify_track (audio identification) or spotify_resolve_links (link resolution).

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

Usage Guidelines2/5

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 the sibling search-related tools (e.g., spotify_identify_track, spotify_resolve_links, or youtube_search_videos). It does not mention any exclusions, prerequisites, or alternative scenarios, leaving the agent to infer usage from the name alone.

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

youtube_add_to_playlistB

Preview or add one YouTube video to an existing playlist, skipping an exact duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNopreview
inputYes
playlistYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose one useful behavioral trait: duplicates are skipped during the add operation, and it suggests a preview/apply distinction. However, it does not explain what preview returns, whether apply modifies the playlist irreversibly, or any authentication/rate-limit requirements, leaving material gaps for a tool that mutates state.

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 a single concise sentence that front-loads the core operation and duplicates policy. Every word earns its place, with no redundancy or filler.

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

Completeness2/5

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

Given the tool has no output schema and no annotations, the description is too sparse to be fully actionable. It leaves unexplained the exact expectations for 'input' and 'playlist', what the preview mode's result looks like, whether the new mode actually implies idempotency, and how errors or partial results are surfaced. An agent would need to guess or inspect runtime behavior.

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

Parameters2/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 maps 'video' to input and 'playlist' to playlist, and implies mode via 'preview or add', but it does not specify the input format (URL, video ID, search term), the playlist identifier format, or what values are valid for mode beyond the schema's enum. This is minimal added value over the raw schema.

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 previews or adds one YouTube video to an existing playlist while skipping exact duplicates. The specific verb and resource combination ('add one YouTube video to an existing playlist') distinguishes it from siblings like youtube_check_playlist_duplicates, youtube_list_playlists, and youtube_create_playlist without needing to open their schemas.

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

Usage Guidelines2/5

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

There is no explicit guidance about when to use this tool versus alternatives. It mentions a preview and apply mode, but does not state what conditions would favor this over e.g. youtube_save_track or youtube_check_playlist_duplicates, nor does it specify prerequisites like needing an existing playlist or how to identify it.

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

youtube_check_playlist_duplicatesA

Find repeated videos in a YouTube playlist without changing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistYes

TDQS

A3.7/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden for revealing side effects. It directly states the key behavioral attribute: the playlist is not modified. It does not detail return shape or edge conditions, but the safety-relevant behavior is explicitly disclosed.

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 a single, front-loaded sentence that wastes no words. It effectively communicates the action and the non-mutating guarantee.

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

Completeness2/5

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

With no output schema, the description should clarify what the agent receives, such as a list of duplicate entries, counts, or identifiers. It also does not clarify how to supply the playlist parameter. The core purpose is clear, but key invocation details are absent.

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

Parameters2/5

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

The playlist parameter has 0% schema description coverage, and the tool description does not explain whether the value should be a playlist ID, URL, or title. It only establishes that the target is a YouTube playlist, leaving an important ambiguity for the agent.

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?

Clearly states a specific read-only operation: finding repeated videos in a YouTube playlist. 'Without changing it' also distinguishes it from mutation-oriented sibling tools like youtube_add_to_playlist and youtube_organize_playlist.

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

Usage Guidelines3/5

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

The description implies the right use case: call it when duplicate detection in a playlist is needed. It provides no explicit comparison or rejection criteria versus the other playlist tools, so the guidance is adequate but not robust.

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

youtube_classify_playlistC

Preview deterministic categories for a YouTube playlist using title and channel keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesNo
playlistYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. 'Preview' and 'deterministic' hint that the operation is read-only and reproducible, but the description does not confirm non-mutation, explain how the rules object affects behavior, or describe the return structure. For a categorization tool with a nested rules param, this is insufficient.

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

Conciseness4/5

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

The description is a single efficient sentence and is front-loaded with the most important information. It is not bloated, but the brevity contributes to the semantic gaps noted in parameters and behavioral transparency.

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

Completeness2/5

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

Given 0% schema description coverage, no annotations, no output, and a nested object, the description leaves out critical details: the rules object is allowed but its purpose and structure are unsaid, and the output format isn't hinted. This is inadequate for reliable self-contained tool invocation.

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

Parameters2/5

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

The input schema provides zero descriptions for the `playlist` and `rules` parameters. The description mentions only 'title and channel keywords', which indirectly points to the rules content but fails to explain what `playlist` should be (YouTube URL/ID) or how `rules` maps categories to keyword lists. An agent cannot construct valid arguments from the description alone.

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 gives a concrete verb ('Preview'), resource ('categories for a YouTube playlist'), and mechanism ('using title and channel keywords'). It is distinct from sibling tools like youtube_list_playlists or youtube_check_playlist_duplicates, though 'deterministic categories' could be more explicit.

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

Usage Guidelines3/5

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

The purpose implies when this tool is appropriate: you want a preview of category/mapping before performing other playlist actions. However, no alternatives are named, and there is no explicit when-not-to-use guidance, leaving some room for misrouting between Spotify and YouTube classifier siblings.

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

youtube_create_playlistC

Create a YouTube playlist for the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
descriptionNo
privacyStatusNoprivate

TDQS

C2.7/5.0
Behavior2/5

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 of behavioral disclosure. It states it creates a playlist, which implies a write operation, but it does not disclose side effects, permission requirements, quotas, or whether the playlist is immediately available. It also does not mention that the operation likely returns a playlist ID or any response details. This is a significant gap for a mutation tool.

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

Conciseness3/5

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

The description is a single sentence with no wasted words, which is efficient. However, it is so brief that it omits essential information. It is not front-loaded with any constraints or usage notes; it simply states the primary action. The conciseness is good, but it sacrifices necessary substance, making it minimally adequate.

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

Completeness2/5

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

For a tool with three parameters, no output schema, and no annotations, the description is incomplete. It does not explain the parameters, the expected return value, any default behaviors (e.g., privacyStatus default), or any caveats about creating playlists. An agent would have to guess at how to correctly invoke this tool, especially regarding the privacy status and description fields.

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

Parameters1/5

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

The schema has three parameters (name, description, privacyStatus) with 0% description coverage. The description does not mention any of these parameters, their meanings, defaults, or relationships. Since schema coverage is zero, the description must compensate but fails to add any semantic value beyond the raw schema. The agent is left to infer what 'name', 'description', and 'privacyStatus' mean without context.

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 action ('Create') and the resource ('a YouTube playlist') with a specific scope ('for the authenticated user'). It distinguishes well from siblings like youtube_add_to_playlist (adding tracks) and youtube_list_playlists (listing existing ones). The verb and resource are unambiguous.

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

Usage Guidelines2/5

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. There is no mention of when to create a new playlist versus using youtube_add_to_playlist or youtube_save_track. No conditions, prerequisites, or exclusions are given, so an agent has no help selecting this over siblings.

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

youtube_identify_trackC

Identify a song/video from a YouTube URL, YouTube Music URL, video ID, or search text.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
limitNo
regionCodeNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It discloses that the tool identifies from various inputs but does not state whether the operation is read-only, what it returns, whether it performs network calls, or any failure or rate-limit behavior. For a tool with no annotation safety profile, this is a significant gap.

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?

A single sentence with no filler, and the core accepted input formats are front-loaded. It is appropriately concise and every word contributes to the purpose.

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

Completeness2/5

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

The description is not complete enough given there is no output schema and no annotations. It fails to explain return shape, the semantics of limit and regionCode, or what 'identify' yields (metadata, matched track, etc.). An agent can identify the tool but may not invoke optional parameters correctly.

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

Parameters2/5

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

With 0% schema description coverage, the description must compensate for the schema's bare parameter names. It adds useful meaning for the input parameter by listing accepted formats, but it says nothing about limit or regionCode, leaving the agent to guess what those optional parameters control.

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 uses the specific verb 'Identify' and clearly names the resource ('song/video') plus the accepted input forms (YouTube URL, YouTube Music URL, video ID, or search text). It is clear enough to know what the tool does, though it does not explicitly distinguish itself from siblings like youtube_search_videos or youtube_resolve_links.

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

Usage Guidelines2/5

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

The description provides no when-to-use guidance, no exclusions, and no mention of alternatives such as youtube_search_videos or spotify_identify_track. The only context is the accepted input forms, leaving the agent to infer when this tool should be selected over siblings.

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

youtube_list_playlistsB

List the authenticated user's YouTube playlists.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only reveals that the operation requires an authenticated user and is a listing operation; it does not state whether the call is read-only, describe pagination behavior, mention rate limits, or indicate what response shape to expect. This is minimal disclosure for a tool with no annotation safety net.

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 one short, direct sentence that front-loads the core operation and resource. Every word earns its place, and there is no redundant repetition of the tool name or boilerplate.

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

Completeness3/5

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

For a simple zero-required-parameter listing tool, the description is minimally adequate: it identifies the resource and the action. However, with no output schema and no annotations, it does not explain what exactly is returned, whether results are paginated, or how the 'limit' parameter affects the response, leaving some ambiguity for an agent.

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

Parameters2/5

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

The single 'limit' parameter is not mentioned anywhere in the description, and schema description coverage is 0%, so the description provides no added meaning. The schema's type, default, minimum, and maximum give the agent some understanding of 'limit', but the description does not compensate for the lack of explanatory text or clarify how pagination works.

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 uses a specific verb ('List') and a specific resource ('the authenticated user's YouTube playlists'), which clearly identifies the operation. It is immediately distinguishable from sibling tools like youtube_create_playlist, youtube_search_videos, and youtube_save_track because it uniquely targets the user's own playlist collection.

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

Usage Guidelines3/5

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

The intended use case is implied: call this when you need to enumerate the authenticated user's playlists. However, there is no explicit guidance about when to choose this over youtube_search_videos or youtube_create_playlist, and no mention of when not to use it. The context is clear but alternatives and exclusions are absent.

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

youtube_save_trackB

Identify a YouTube song/video, classify it, deduplicate it, and add it to a named or category playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNopreview
inputYes
rulesNo
dedupeNo
prefixNo
categoryNo
playlistNo
privacyStatusNoprivate
createIfMissingNo

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden for behavioral disclosure, but it only lists the intended operations. It fails to mention that 'mode' is preview vs apply, that playlists can be created via createIfMissing, the default privacyStatus, or what happens to duplicates.

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 entire description is a single efficient sentence with zero filler or repetition. It front-loads the resource and lays out the action sequence in a natural order.

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

Completeness2/5

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

For a 9-parameter tool with no annotations, no output schema, and no per-parameter schema descriptions, this high-level sentence is insufficient to invoke the tool safely or effectively. Important behaviors such as preview mode, rule handling, and playlist creation are completely absent.

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

Parameters2/5

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

Since schema description coverage is 0%, the description must compensate for 9 parameters, but it only loosely maps 'input' to 'Identify a YouTube song/video', 'dedupe' to 'deduplicate it', and 'playlist'/'category' to 'named or category playlist'. Parameters like mode, rules, prefix, privacyStatus, and createIfMissing remain unexplained.

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 names a specific resource and a sequence of distinct actions ('Identify a YouTube song/video, classify it, deduplicate it, and add it to a named or category playlist'). This multi-verb structure clearly distinguishes it from sibling tools like youtube_identify_track, youtube_classify_playlist, and youtube_add_to_playlist.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this composite tool versus composing individual sibling calls, nor does it mention mode semantics or conditions like already-identified tracks. Usage context is only implied by the action list, with no alternatives or exclusions.

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

youtube_search_videosC

Search YouTube or YouTube Music-compatible video links by song title, artist, or free text.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
orderNorelevance
queryYes
regionCodeNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Search', which weakly implies a read-only operation, but it does not state what is returned, whether results are limited or paginated, or any other observable behavior. Behavioral context is essentially absent.

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?

A single 15-word sentence with no filler. The verb, resource, and search criteria are front-loaded, and every word earns its place. This is appropriately concise for a straightforward search tool.

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

Completeness2/5

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

For a tool with no annotations and no output schema, the description should supply more context: what the returned video links look like, what the optional parameters control, and how ordering works. An agent can make a basic call with just `query`, but cannot correctly exploit the optional parameters or anticipate the return shape.

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

Parameters2/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 adds meaningful semantics for `query` (song title, artist, or free text), but says nothing about `limit`, `order`, or `regionCode`. Three of the four parameters remain undocumented in both the schema and the description.

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 uses a specific verb ('Search') with a clear resource ('YouTube or YouTube Music-compatible video links') and states the accepted search criteria (song title, artist, or free text). It is clear what the tool does, but it does not explicitly differentiate itself from siblings like youtube_resolve_links or youtube_identify_track, though the 'search' verb indirectly sets it apart.

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

Usage Guidelines2/5

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

The description gives input guidance (what to enter as a search), but provides no guidance on when to use this tool versus alternatives such as spotify_search_tracks, youtube_resolve_links, or youtube_identify_track. No conditions, exclusions, or selection criteria are stated.

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. 15 tool updatesv0.2.0
    • First observedspotify_check_playlist_duplicates
    • First observedspotify_classify_playlist
    • First observedspotify_identify_track
    • First observedspotify_organize_playlist
    • First observedspotify_resolve_links
    • First observedspotify_search_tracks
    • First observedyoutube_add_to_playlist
    • First observedyoutube_check_playlist_duplicates
    • First observedyoutube_classify_playlist
    • First observedyoutube_create_playlist
    • First observedyoutube_identify_track
    • First observedyoutube_list_playlists
    • First observedyoutube_resolve_links
    • First observedyoutube_save_track
    • First observedyoutube_search_videos

TDQS

B3.1/5.0

Scored across 15 tools

Disambiguation3/5

There is notable overlap between search, identify, and resolve_links on both platforms, as identify accepts search text and resolve_links handles links in batch. youtube_save_track also bundles identify, classify, and add, which could be confused with youtube_add_to_playlist. However, most tools have clear, distinct resource-action targets.

Naming Consistency5/5

All tools follow a consistent platform_verb_noun pattern in snake_case, with spotify_ and youtube_ prefixes. The verbs are descriptive and predictable, with no mixed conventions or camelCase exceptions.

Tool Count4/5

15 tools is at the upper edge of the ideal range, but justified by covering two platforms with search, identify, resolve, classify, duplicate-check, and playlist management operations. A few could be consolidated (e.g., identify vs resolve_links), but the count is not excessive for the scope.

Completeness2/5

The YouTube side includes list, create, add, and save operations, but the Spotify side lacks basic playlist management like listing, creating, or adding tracks to playlists. This is a significant gap for a playlist organizer, as users cannot directly manage Spotify playlists beyond organizing derived categories.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    Syncs YouTube Music liked songs, analyzes them for DJ metadata like BPM and key, and enables creating playlists from previews.
    10
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables YouTube playlist curation including inventory, deduplication, merging, and deletion via MCP tools.
    12
    MIT