Skip to main content
Glama
gittgi
by gittgi

ytm-runlist-mcp

Codex, Claude Code 같은 MCP 클라이언트에서 YouTube Music 플레이리스트를 러닝용으로 재배치하기 위한 로컬 MCP 서버입니다.

LLM이 곡 제목, 아티스트, 길이, 기존 순서를 보고 러닝 흐름을 판단하고, 이 서버는 YouTube Data API를 통해 실제 플레이리스트 조회/검증/생성을 담당합니다.

할 수 있는 일

  • Google OAuth 로컬 로그인

  • YouTube / YouTube Music 플레이리스트 목록 조회

  • 선택한 플레이리스트 곡 목록 조회

  • 러닝 페이스 전략 객관식 옵션 제공

  • LLM이 만든 재배치 순서 검증

  • 원본 플레이리스트 순서 변경

  • 더 안전한 새 플레이리스트 복사본 생성

Related MCP server: yt-music-mcp

안전 원칙

  • YouTube Music 비공식 스크래핑을 하지 않습니다.

  • 음원을 다운로드하거나 스트리밍 오디오를 분석하지 않습니다.

  • 캐시는 없습니다.

  • 저장되는 개인 파일은 Google OAuth client secret과 token뿐입니다.

  • 원본 플레이리스트 변경 tool은 기본값이 dry_run=true입니다.

  • 실제 원본 변경은 dry_run=falseconfirm_modify_original=true가 모두 필요합니다.

  • 기본 추천 흐름은 원본 수정이 아니라 새 비공개 플레이리스트 복사본 생성입니다.

프로젝트 구조

src/ytm_runlist_mcp/     MCP 서버와 YouTube API 코드
skills/                  선택형 Agent Skill 문서
tests/                   단위 테스트
.runlist/                로컬 OAuth 파일, git ignore 대상

준비물

  • Python 3.11 이상

  • YouTube / YouTube Music 플레이리스트가 있는 Google 계정

  • Google Cloud 프로젝트

  • YouTube Data API v3

  • Codex, Claude Code, 또는 MCP 호환 클라이언트

1. Google Cloud Console 설정

1.1 프로젝트 만들기

  1. Google Cloud Console을 엽니다: https://console.cloud.google.com/

  2. 상단 프로젝트 선택 드롭다운을 클릭합니다.

  3. New Project를 클릭합니다.

  4. 프로젝트 이름을 입력합니다.

예시:

YTM Runlist MCP

생성 후 해당 프로젝트가 선택되어 있는지 확인합니다.

1.2 YouTube Data API v3 활성화

  1. APIs & Services -> Library로 이동합니다.

  2. 검색창에 입력합니다.

YouTube Data API v3
  1. Enable을 클릭합니다.

YouTube Data API는 비공개 사용자 데이터 접근에 OAuth 2.0을 사용합니다. 또한 YouTube 계정에는 service account 방식이 맞지 않으므로, 이 프로젝트는 desktop installed app OAuth 흐름을 사용합니다.

1.3 OAuth 동의 화면 설정

Google Cloud UI에 따라 메뉴 이름이 조금 다를 수 있습니다.

새 UI:

Google Auth platform

예전 UI:

APIs & Services -> OAuth consent screen

설정:

App name: YTM Runlist MCP
User support email: 본인 이메일
Developer contact email: 본인 이메일
Audience / User type: External

개인용으로 쓸 때는 테스트 모드로 두면 됩니다.

1.4 Test user 추가

테스트 모드라면 YouTube Music을 쓰는 본인 Google 계정을 test user에 추가합니다.

Google Auth platform -> Audience -> Test users

1.5 Scope 추가

Data Access에서 아래 scope를 추가합니다.

https://www.googleapis.com/auth/youtube.force-ssl

이 scope는 플레이리스트 조회, 생성, 항목 추가, 순서 변경을 위해 사용합니다.

1.6 Desktop OAuth Client 생성

Google Auth platform -> Clients -> Create client

또는:

APIs & Services -> Credentials -> Create Credentials -> OAuth client ID

설정:

Application type: Desktop app
Name: YTM Runlist MCP Desktop

생성 후 JSON 파일을 다운로드합니다.

파일 이름은 보통 이런 형태입니다.

client_secret_1234567890-abcdef.apps.googleusercontent.com.json

2. macOS 설치

저장소를 받습니다.

git clone https://github.com/YOUR_USERNAME/ytm-runlist-mcp.git
cd ytm-runlist-mcp

가상환경을 만들고 설치합니다.

python3 -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"

Google Cloud에서 받은 OAuth JSON을 복사합니다.

mkdir -p .runlist
cp ~/Downloads/client_secret_*.json .runlist/client_secret.json

Google 계정 로그인을 실행합니다.

ytm-runlist-auth login
ytm-runlist-auth status

성공하면 대략 이렇게 보입니다.

{
  "client_secrets_exists": true,
  "token_exists": true,
  "valid_or_refreshable": true
}

3. Windows PowerShell 설치

저장소를 받습니다.

git clone https://github.com/YOUR_USERNAME/ytm-runlist-mcp.git
cd ytm-runlist-mcp

가상환경을 만들고 설치합니다.

py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"

PowerShell이 스크립트 실행을 막으면 아래 명령을 한 번 실행합니다.

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

다시 활성화합니다.

.\.venv\Scripts\Activate.ps1

Google Cloud에서 받은 OAuth JSON을 복사합니다.

New-Item -ItemType Directory -Force .runlist
Copy-Item "$env:USERPROFILE\Downloads\client_secret_*.json" ".runlist\client_secret.json"

Google 계정 로그인을 실행합니다.

ytm-runlist-auth login
ytm-runlist-auth status

4. Codex에 MCP 등록

Codex 설정 파일에 MCP 서버를 추가합니다.

설정 파일:

~/.codex/config.toml

macOS 예시:

[mcp_servers.ytm-runlist]
command = "/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.venv/bin/ytm-runlist-mcp"

[mcp_servers.ytm-runlist.env]
YTM_RUNLIST_DATA_DIR = "/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.runlist"
GOOGLE_CLIENT_SECRETS_FILE = "/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.runlist/client_secret.json"
YTM_RUNLIST_GOOGLE_TOKEN_FILE = "/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.runlist/google-token.json"

Windows 예시:

[mcp_servers.ytm-runlist]
command = "C:\\ABSOLUTE\\PATH\\TO\\ytm-runlist-mcp\\.venv\\Scripts\\ytm-runlist-mcp.exe"

[mcp_servers.ytm-runlist.env]
YTM_RUNLIST_DATA_DIR = "C:\\ABSOLUTE\\PATH\\TO\\ytm-runlist-mcp\\.runlist"
GOOGLE_CLIENT_SECRETS_FILE = "C:\\ABSOLUTE\\PATH\\TO\\ytm-runlist-mcp\\.runlist\\client_secret.json"
YTM_RUNLIST_GOOGLE_TOKEN_FILE = "C:\\ABSOLUTE\\PATH\\TO\\ytm-runlist-mcp\\.runlist\\google-token.json"

Codex를 새로 열거나 새 세션을 시작합니다.

확인:

codex mcp list

5. Claude Code에 MCP 등록

Claude Code도 같은 MCP 서버를 사용할 수 있습니다. 서버를 따로 만들 필요는 없습니다.

macOS:

claude mcp add ytm-runlist \
  --env YTM_RUNLIST_DATA_DIR=/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.runlist \
  --env GOOGLE_CLIENT_SECRETS_FILE=/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.runlist/client_secret.json \
  --env YTM_RUNLIST_GOOGLE_TOKEN_FILE=/ABSOLUTE/PATH/TO/ytm-runlist-mcp/.runlist/google-token.json \
  -- /ABSOLUTE/PATH/TO/ytm-runlist-mcp/.venv/bin/ytm-runlist-mcp

Windows PowerShell:

claude mcp add ytm-runlist `
  --env YTM_RUNLIST_DATA_DIR="C:\ABSOLUTE\PATH\TO\ytm-runlist-mcp\.runlist" `
  --env GOOGLE_CLIENT_SECRETS_FILE="C:\ABSOLUTE\PATH\TO\ytm-runlist-mcp\.runlist\client_secret.json" `
  --env YTM_RUNLIST_GOOGLE_TOKEN_FILE="C:\ABSOLUTE\PATH\TO\ytm-runlist-mcp\.runlist\google-token.json" `
  -- "C:\ABSOLUTE\PATH\TO\ytm-runlist-mcp\.venv\Scripts\ytm-runlist-mcp.exe"

Claude Code는 MCP server scope를 지원합니다. 여러 프로젝트에서 쓰려면 --scope user, 팀과 공유하려면 project scope를 검토하세요.

6. 선택형 Skill

MCP 서버는 Skill 없이도 동작합니다.

다만 Skill을 쓰면 LLM이 더 일관된 순서로 작업합니다.

포함된 Skill:

skills/runlist-youtube-music/SKILL.md
skills/claude-code/runlist-youtube-music/SKILL.md

Skill의 역할:

  1. 플레이리스트 목록 조회

  2. 사용자에게 대상 선택 요청

  3. 곡 목록 조회

  4. 러닝 전략과 거리/시간 질문

  5. 재배치 순서 검증

  6. 쓰기 전 미리보기

  7. 원본 수정 전 명시 확인

  8. 기본적으로 새 비공개 복사본 생성 권장

7. 추천 프롬프트

Codex 또는 Claude Code에 그대로 붙여넣을 수 있습니다.

ytm-runlist MCP로 내 YouTube Music 플레이리스트를 러닝용으로 재배치해줘.

먼저 플레이리스트 목록을 보여주고, 내가 고르면 곡 목록을 확인해줘.
그다음 러닝 전략을 객관식으로 물어보고, 거리/목표 시간도 물어봐줘.

원본은 수정하지 말고, 재배치 미리보기 후 새 비공개 플레이리스트 복사본으로 만들어줘.
조회된 곡만 사용하고 playlist_item_id를 임의로 만들지 마.

8. MCP Tools

이 서버가 제공하는 tool:

health
get_running_strategy_options_tool
list_youtube_music_playlists
get_playlist_tracks_tool
validate_reorder_plan
reorder_original_playlist
create_reordered_playlist_copy_tool

9. 개발과 테스트

테스트 실행:

pytest

MCP 서버 직접 실행:

python -m ytm_runlist_mcp.server

stdio MCP 서버라서 터미널이 가만히 대기하는 것이 정상입니다.

10. YouTube Data API quota

YouTube Data API quota는 돈이 아니라 하루 API 사용량 제한입니다.

Google 공식 문서 기준으로 YouTube Data API를 활성화한 프로젝트는 기본적으로 search.list 100회/일, videos.insert 100회/일, 그 외 endpoint 합산 10,000 units/day를 받습니다. 이 프로젝트는 검색이나 영상 업로드를 쓰지 않고, 플레이리스트 조회/생성/항목 추가/순서 변경을 씁니다.

관련 quota cost 예시:

playlists.list       1 unit
playlistItems.list   1 unit
playlists.insert    50 units
playlistItems.insert 50 units
playlistItems.update 50 units

큰 플레이리스트를 자주 원본 재정렬하면 playlistItems.update가 곡 수만큼 호출되어 quota를 빨리 쓸 수 있습니다. quota를 다 쓰면 과금되는 것이 아니라 그날 더 이상 API 호출이 안 되고, 필요하면 YouTube API audit을 거쳐 quota 증설을 요청해야 합니다.

11. GitHub에 올리기 전 주의

아래 파일은 절대 커밋하지 마세요.

.runlist/
client_secret*.json
google-token.json
.env

현재 .gitignore에 포함되어 있습니다.

확인:

git status --ignored

12. 현재 한계

  • YouTube Music 전용 공개 API가 아니라 YouTube Data API를 사용합니다.

  • YouTube Music 플레이리스트가 YouTube Data API에서 보이는지 각자 계정으로 확인해야 합니다.

  • 원본 플레이리스트 순서 변경은 playlistItems.update를 사용합니다.

  • 플레이리스트가 수동 정렬 상태가 아니면 YouTube API가 순서 변경을 거부할 수 있습니다.

  • 큰 플레이리스트는 dry-run으로 update 수를 먼저 확인하는 것이 좋습니다.

공식 문서

Available Tools

7 tools
create_reordered_playlist_copy_toolA

Create a new playlist copy from a proposed order.

Unlike in-place reorder, ordered_playlist_item_ids may be a subset of the source playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
descriptionNo
privacy_statusNoprivate
source_playlist_idYes
ordered_playlist_item_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/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 fully disclose behavior. It mentions the subset distinction but fails to state other important aspects like creation side effects, authorization needs, or idempotency. For a creation tool, more behavioral context is needed.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the core action and resource. Every word is necessary, and no information is redundant.

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 5 parameters, an output schema, and several sibling tools, the description is too sparse. It lacks explanation of the output, required parameter relationships (e.g., source_playlist_id and ids), and potential edge cases like duplicates. The presence of output schema does not fully compensate.

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 should compensate for parameter meaning. It only clarifies 'ordered_playlist_item_ids' as a subset of source items. Other parameters like title, description, privacy_status, and source_playlist_id are left implicit, relying on names.

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 purpose: 'Create a new playlist copy from a proposed order.' with a specific verb and resource. It also distinguishes from the sibling 'reorder_original_playlist' by noting the key difference about subset of items.

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 provides a clear context for when to use this tool versus in-place reorder by highlighting that ordered_playlist_item_ids may be a subset. However, it lacks explicit when-not-to-use guidance or mention of other alternatives.

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

get_playlist_tracks_toolB

Return tracks from a playlist, including playlist_item_id needed for reordering.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility. It only mentions returning tracks and a specific field, but omits details on authentication, rate limits, pagination, error handling, or the structure of the output beyond the one field.

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, focused sentence that efficiently conveys the core purpose. While concise, it could be slightly expanded to include parameter details without losing brevity.

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's simplicity (1 param, output schema exists), the description should cover basic usage and output. It lacks explanation of the output format, error handling, and fails to compensate for absent annotations, making it incomplete.

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?

With 0% schema description coverage, the description must explain parameters. It does not describe the playlist_id parameter at all (no format, source, or validation hints), leaving the agent with only the schema type and name.

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 returns tracks from a playlist, highlighting the inclusion of playlist_item_id for reordering, which distinguishes it from sibling tools focused on reordering operations.

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 implicitly guides usage by noting the relevance of playlist_item_id for reordering, suggesting this tool is a prerequisite before reordering. It lacks explicit when-not-to-use or alternative names, but the context is clear enough.

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

get_running_strategy_options_toolB

Return objective running pace strategy options for the LLM to present to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states that the tool returns options for presentation, but does not indicate whether it is read-only, has side effects, requires authentication, or any other behavioral details. The description is insufficient for a tool with no annotations.

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 conveys the tool's purpose without any wasted words. It is appropriately sized for a tool with no parameters.

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?

Given the tool has no parameters and an output schema exists, the description is minimally adequate. It states what the tool returns, but does not elaborate on the structure or usage context. For a simple retrieval tool, it meets a basic standard but could be slightly more informative.

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 no parameters, so schema coverage is trivially 100%. The baseline is 4. The description adds meaning by stating the purpose of the output, though it does not elaborate on parameterization since none exists.

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 'Return' as the verb and specifies the resource as 'objective running pace strategy options', clearly indicating what the tool retrieves. It distinguishes from sibling tools which are about playlist management and health, but the verb is not highly specific.

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 prerequisites, context, or exclusions. The sibling tools are unrelated, so the tool's purpose is unique, but no explicit usage context is given.

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

healthA

Return MCP server version and local OAuth status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses exactly what the tool returns (server version and OAuth status) and implies no side effects. Since no annotations are provided, the description adequately covers behavior, though it could mention that it is a read-only operation.

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 is front-loaded with the verb and object, containing no wasted words.

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 the tool's simplicity (no parameters, has output schema), the description is complete enough. It fully informs the agent of what the tool does without needing further details.

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?

There are zero parameters, and schema coverage is 100%. The description does not need to add parameter semantics, meeting the baseline of 4.

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 verb 'Return' and specifies the exact resources: 'MCP server version' and 'local OAuth status.' It is distinct from all sibling tools, which focus on playlists and reordering.

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 use for health checks but does not explicitly state when to use or not use this tool. No alternatives or exclusions are mentioned.

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

list_youtube_music_playlistsA

List playlists owned by the authenticated user's YouTube account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as authentication requirements, rate limits, or pagination. It only states it lists playlists for the authenticated user, which is minimal.

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

Conciseness5/5

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

The description is a single sentence of nine words, front-loaded with 'List playlists', and contains zero redundant information.

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 tool with no parameters and an output schema, the description adequately states the core functionality. However, it could mention that it returns all playlists or that authentication is required, but these are implied.

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 zero parameters and 100% coverage, so the description inherently explains that no parameters are needed. It adds meaning by specifying the scope (owned by authenticated user), which is beyond the empty 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 uses a specific verb ('List') and resource ('playlists owned by the authenticated user's YouTube account'), clearly distinguishing it from siblings like get_playlist_tracks_tool which retrieves tracks from a specific 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?

No guidance on when to use this tool versus alternatives is provided. Sibling tool names suggest related operations, but no explicit when-to-use or when-not-to-use context is given.

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

reorder_original_playlistA

Reorder the original playlist in place.

dry_run defaults to true. Set dry_run=false and confirm_modify_original=true only after the user explicitly confirms modifying the original playlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
playlist_idYes
confirm_modify_originalNo
ordered_playlist_item_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool modifies the original playlist in place (destructive) and that dry_run defaults to true for safety. However, it does not describe return values, error behavior, or reversibility, leaving some behavioral aspects unclear.

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 very concise (2 sentences). The first states purpose, the second gives critical usage instruction. No wasted words, and it is front-loaded with the main 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?

Given 4 parameters (2 required) and an output schema, the description is minimal. It does not explain return values, how to use 'ordered_playlist_item_ids', or compare with sibling tools. The agent would lack sufficient context for correct 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?

Schema coverage is 0%, so description must compensate. The description only explains 'dry_run' and 'confirm_modify_original' but not 'playlist_id' or 'ordered_playlist_item_ids'. It does not clarify what 'ordered_playlist_item_ids' expects or how to construct it, leaving significant gaps.

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 purpose: 'Reorder the original playlist in place.' This specifies the action (reorder) and the resource (original playlist), and distinguishes it from the sibling 'create_reordered_playlist_copy_tool' which creates a copy instead.

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 provides explicit usage guidelines: it notes 'dry_run defaults to true' and instructs to set 'dry_run=false and confirm_modify_original=true only after the user explicitly confirms modifying the original playlist.' This gives clear safety instructions. However, it lacks explicit comparison to siblings for when to use this vs. 'create_reordered_playlist_copy_tool'.

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

validate_reorder_planA

Validate a proposed full in-place reorder and return the minimal update actions.

ordered_playlist_item_ids must contain every existing playlist item exactly once. running_plan is optional metadata from the LLM and is validated only for shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
playlist_idYes
running_planNo
ordered_playlist_item_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It explains that the tool validates input and returns 'minimal update actions,' but omits details like error handling on invalid input, whether the tool is read-only (likely, but not stated), or any authorization requirements. It does not contradict annotations (none exist).

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 only three sentences long, with the main purpose in the first line. Every sentence adds essential information: the core action, a critical constraint, and a note on an optional parameter. There is no redundancy or extra text.

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?

Given the tool has 3 parameters, 0% schema description coverage, no annotations, and an existing output schema (not shown), the description provides a basic understanding. It defines the input constraint for the key parameter and the loose nature of 'running_plan.' However, it does not explain what qualifies as 'minimal update actions,' how failures are communicated, or how this tool relates to sibling tools beyond implication. Adequate but not thorough.

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 description adds meaning to two of three parameters: it specifies that 'ordered_playlist_item_ids must contain every existing playlist item exactly once' and that 'running_plan is optional metadata ... validated only for shape.' The schema has 0% description coverage, so this additional context is valuable. However, 'playlist_id' is not described, leaving a small gap.

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 purpose: 'Validate a proposed full in-place reorder and return the minimal update actions.' It uses a specific verb (validate) and resource (proposed reorder), and the output is defined. This distinguishes it from sibling tools like 'reorder_original_playlist' which actually performs the reorder, and 'create_reordered_playlist_copy_tool' which creates a copy.

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 that this tool should be used before applying a reorder, as it 'validate[s]' a proposal. The constraint 'ordered_playlist_item_ids must contain every existing playlist item exactly once' gives a usage condition. However, there is no explicit guidance on when not to use it or mention of alternatives, such as using 'reorder_original_playlist' directly.

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. 7 tool updatesv0.1.0
    • First observedcreate_reordered_playlist_copy_tool
    • First observedget_playlist_tracks_tool
    • First observedget_running_strategy_options_tool
    • First observedhealth
    • First observedlist_youtube_music_playlists
    • First observedreorder_original_playlist
    • First observedvalidate_reorder_plan

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: creating a copy, fetching tracks, providing running strategy options, health check, listing playlists, reordering in-place, and validating a reorder plan. No two tools overlap in functionality.

Naming Consistency2/5

Tool names are inconsistent: some end with '_tool', some don't ('health' is a single word), and verb phrases vary ('list_youtube_music_playlists' vs 'reorder_original_playlist'). No uniform pattern.

Tool Count5/5

With 7 tools, the server is well-scoped for its domain of YouTube Music playlist reordering and running strategy integration. Each tool feels necessary and the count is within the ideal range.

Completeness5/5

The tool set covers key operations: list playlists, get tracks, get running strategy options, validate a plan, reorder a playlist, and create a copy. No obvious gaps for the runlist management purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Local read-only MCP server for YouTube Data API v3 and YouTube Analytics API, enabling public video searches and OAuth-based private channel reads.
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for YouTube Music that enables searching songs and artists, managing playlists, and authenticating via Google OAuth, using STDIO transport.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Local YouTube MCP server for turning public video, channel, and playlist URLs into structured context, with bounded comment retrieval, timestamped captions, and owned-playlist management using your own Google Cloud credentials.
    17
    14
    MIT