Skip to main content
Glama

MCP 클로드 스포티파이

대장간 배지

특징

  • Spotify 인증

  • 트랙, 앨범, 아티스트 및 재생 목록을 검색하세요

  • 재생 제어(재생, 일시정지, 다음, 이전)

  • 재생목록 만들기 및 관리

  • 개인화된 추천을 받으세요

  • 다양한 기간 동안 사용자가 가장 많이 재생한 트랙에 액세스하세요.

Related MCP server: Spotify MCP Server

데모

요구 사항

  • Node.js 16 이상

  • Spotify 계정

  • 클로드 데스크탑

  • Spotify API 자격 증명(클라이언트 ID 및 클라이언트 비밀번호)

설치

Smithery를 통해 설치

Smithery 를 통해 Claude Desktop용 MCP Claude Spotify를 자동으로 설치하려면:

지엑스피1

수동 설치

  1. 이 저장소를 복제하거나 다운로드하세요:

git clone https://github.com/imprvhub/mcp-claude-spotify
cd claude-spotify-mcp
  1. 종속성 설치:

npm install
  1. 프로젝트를 빌드합니다(소스 코드를 수정하려는 경우):

npm run build

저장소에는 이미 build 디렉토리에 미리 빌드된 파일이 포함되어 있으므로 소스 코드를 수정할 계획이 없다면 3단계를 건너뛸 수 있습니다.

Spotify 자격 증명 설정

이 MCP를 사용하려면 Spotify API 자격 증명을 얻어야 합니다.

  1. Spotify 개발자 대시보드 로 이동

  2. Spotify 계정으로 로그인하세요

  3. "앱 만들기"를 클릭하세요

  4. 앱 정보를 입력하세요:

    • 앱 이름: "MCP Claude Spotify"(또는 원하는 이름)

    • 앱 설명: "Claude Desktop용 Spotify 통합"

    • 웹사이트: 이 부분은 비워두거나 원하는 URL을 입력할 수 있습니다.

    • 리디렉션 URI: 중요 - http://127.0.0.1:8888/callback 추가하세요

  5. 이용 약관에 동의하고 "만들기"를 클릭하세요.

  6. 앱 대시보드에서 "클라이언트 ID"를 볼 수 있습니다.

  7. "클라이언트 비밀번호 표시"를 클릭하여 "클라이언트 비밀번호"를 표시합니다.

구성에 필요하므로 이 자격 증명을 저장해 두세요.

MCP 서버 실행

MCP 서버를 실행하는 방법은 두 가지가 있습니다.

옵션 1: 수동 실행(최초 설정 및 문제 해결 시 권장)

  1. 터미널이나 명령 프롬프트를 엽니다

  2. 프로젝트 디렉토리로 이동합니다

  3. 서버를 직접 실행합니다.

node build/index.js

Claude Desktop을 사용하는 동안 이 터미널 창을 열어 두세요. 터미널을 닫을 때까지 서버가 실행됩니다.

옵션 2: Claude Desktop으로 자동 시작(일반 사용 시 권장)

Claude Desktop은 필요 시 MCP 서버를 자동으로 시작할 수 있습니다. 설정 방법은 다음과 같습니다.

구성

Claude Desktop 구성 파일은 다음 위치에 있습니다.

  • macOS : ~/Library/Application Support/Claude/claude_desktop_config.json

  • 윈도우 : %APPDATA%\Claude\claude_desktop_config.json

이 파일을 편집하여 Spotify MCP 구성을 추가하세요. 파일이 없으면 새로 만드세요.

{
  "mcpServers": {
    "spotify": {
      "command": "node",
      "args": ["ABSOLUTE_PATH_TO_DIRECTORY/mcp-claude-spotify/build/index.js"],
      "env": {
        "SPOTIFY_CLIENT_ID": "your_client_id_here",
        "SPOTIFY_CLIENT_SECRET": "your_client_secret_here"
      }
    }
  }
}

중요 : 교체:

  • MCP를 설치한 전체 절대 경로를 포함하는 ABSOLUTE_PATH_TO_DIRECTORY

    • macOS/Linux 예: /Users/username/mcp-claude-spotify

    • Windows 예: C:\\Users\\username\\mcp-claude-spotify

  • Spotify에서 얻은 클라이언트 ID를 your_client_id_here 에 입력하세요.

  • Spotify에서 얻은 클라이언트 비밀번호를 your_client_secret_here 에 입력합니다.

이미 다른 MCP를 구성한 경우 "mcpServers" 개체 내부에 "spotify" 섹션을 추가하기만 하면 됩니다.

자동 시작 스크립트 설정(선택 사항)

더욱 안정적인 환경을 위해 자동 시작 스크립트를 설정할 수 있습니다.

  1. 프로젝트 디렉토리에 다음 내용으로 start-spotify-mcp.bat 이라는 이름의 파일을 만듭니다.

@echo off
cd %~dp0
node build/index.js
  1. 이 BAT 파일에 대한 바로가기를 만듭니다

  2. Win+R 누르고 shell:startup 입력한 후 Enter를 누릅니다.

  3. Windows에서 시작하려면 이 폴더로 바로 가기를 이동하세요.

  4. ~/Library/LaunchAgents/ 에 다음 내용으로 com.spotify.mcp.plist 라는 이름의 파일을 만듭니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.spotify.mcp</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/node</string>
        <string>ABSOLUTE_PATH_TO_DIRECTORY/mcp-claude-spotify/build/index.js</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/spotify-mcp.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/spotify-mcp.out</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>SPOTIFY_CLIENT_ID</key>
        <string>your_client_id_here</string>
        <key>SPOTIFY_CLIENT_SECRET</key>
        <string>your_client_secret_here</string>
    </dict>
</dict>
</plist>
  1. 경로와 자격 증명을 실제 값으로 바꾸세요.

  2. 다음을 사용하여 에이전트를 로드합니다. launchctl load ~/Library/LaunchAgents/com.spotify.mcp.plist

  3. ~/.config/systemd/user/ 에 spotify-mcp.service 라는 이름의 파일을 만듭니다(디렉토리가 없으면 만듭니다).

[Unit]
Description=Spotify MCP Server for Claude Desktop
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node ABSOLUTE_PATH_TO_DIRECTORY/mcp-claude-spotify/build/index.js
Restart=on-failure
Environment="SPOTIFY_CLIENT_ID=your_client_id_here"
Environment="SPOTIFY_CLIENT_SECRET=your_client_secret_here"

[Install]
WantedBy=default.target
  1. 경로와 자격 증명을 실제 값으로 바꾸세요.

  2. 서비스를 활성화하고 시작합니다.

systemctl --user enable spotify-mcp.service
systemctl --user start spotify-mcp.service
  1. 다음을 사용하여 상태를 확인하세요.

systemctl --user status spotify-mcp.service

용법

  1. 구성을 수정한 후 Claude Desktop을 다시 시작하세요.

  2. Claude에서 auth-spotify 명령을 사용하여 인증 프로세스를 시작합니다.

  3. 애플리케이션을 승인하기 위한 브라우저 창이 열립니다.

  4. Spotify 계정으로 로그인하고 애플리케이션을 승인하세요.

  5. 중요 : 인증에 성공한 후 Claude Desktop을 다시 시작하여 MCP의 도구 레지스트리와 WebSocket 세션 토큰 캐시를 올바르게 초기화합니다.

  6. 재시작 후 모든 Spotify MCP 도구가 제대로 등록되어 사용할 수 있습니다.

MCP 서버는 Claude Desktop이 관리하는 자식 프로세스로 실행됩니다. Claude가 실행 중이면 claude_desktop_config.json 파일의 구성에 따라 Node.js 서버 프로세스가 자동으로 시작되고 관리됩니다.

사용 가능한 도구

인증-스포티파이

Spotify 인증 프로세스를 시작합니다.

검색-스포티파이

트랙, 앨범, 아티스트 또는 재생 목록을 검색합니다.

매개변수:

  • query : 검색 텍스트

  • type : 검색 유형(트랙, 앨범, 아티스트, 재생 목록)

  • limit : 결과 수(1-50)

플레이 트랙

특정 트랙을 재생합니다.

매개변수:

  • trackId : Spotify 트랙 ID

  • deviceId : (선택 사항) 재생할 Spotify 기기 ID

현재 재생 가져오기

현재 재생에 대한 정보를 가져옵니다.

일시 정지-재생

재생을 일시 정지합니다.

다음 트랙

다음 트랙으로 넘어갑니다.

이전 트랙

이전 트랙으로 돌아갑니다.

사용자 재생목록 가져오기

사용자의 재생목록을 가져옵니다.

재생목록 만들기

새로운 재생목록을 만듭니다.

매개변수:

  • name : 플레이리스트 이름

  • description : (선택 사항) 설명

  • public : (선택사항) 공개인지 비공개인지

재생목록에 트랙 추가

재생목록에 트랙을 추가합니다.

매개변수:

  • playlistId : 재생목록 ID

  • trackIds : 트랙 ID 배열

추천 받기

씨앗을 기반으로 추천을 받습니다.

매개변수:

  • seedTracks : (선택 사항) 트랙 ID 배열

  • seedArtists : (선택 사항) 아티스트 ID 배열

  • seedGenres : (선택 사항) 장르 배열

  • limit : (선택사항) 추천 개수 (1~100)

최고의 트랙을 얻으세요

지정된 기간 동안 사용자가 가장 많이 재생한 트랙을 가져옵니다.

매개변수:

  • limit : (선택 사항) 반환할 트랙 수(1-50, 기본값: 20)

  • offset : (선택 사항) 반환할 첫 번째 트랙의 인덱스(기본값: 0)

  • time_range : (선택 사항) 친화도 계산을 위한 시간 범위:

    • short_term : 대략 지난 4주

    • medium_term : 대략 지난 6개월(기본값)

    • long_term : 몇 년간의 데이터

문제 해결

"서버 연결 끊김" 오류

Claude Desktop에서 "MCP Spotify: 서버 연결 끊김" 오류가 표시되는 경우:

  1. 서버가 실행 중인지 확인하세요 .

    • 터미널을 열고 프로젝트 디렉토리에서 node build/index.js 수동으로 실행하세요.

    • 서버가 성공적으로 시작되면 이 터미널을 열어둔 채로 Claude를 사용하세요.

  2. 구성을 확인하세요 :

    • claude_desktop_config.json 의 절대 경로가 시스템에 맞는지 확인하세요.

    • Windows 경로에 이중 백슬래시( \\ )를 사용했는지 다시 한 번 확인하세요.

    • 파일 시스템의 루트에서 전체 경로를 사용하고 있는지 확인하세요.

  3. 자동 시작 옵션을 시도해 보세요 .

    • "자동 시작 스크립트 설정" 섹션에 설명된 대로 운영 체제에 대한 자동 시작 스크립트를 설정하세요.

    • 이렇게 하면 필요할 때 서버가 항상 실행되도록 할 수 있습니다.

브라우저가 자동으로 열리지 않습니다

인증 중 브라우저가 자동으로 열리지 않으면 수동으로 http://127.0.0.1:8888/login 방문하세요.

인증 오류

Spotify 개발자 대시보드에서 리디렉션 URI를 올바르게 구성했는지 확인하세요: http://127.0.0.1:8888/callback

서버 시작 오류

다음 사항을 확인하세요.

  • 환경 변수는 claude_desktop_config.json 또는 실행 스크립트에서 올바르게 구성되었습니다.

  • Node.js가 설치되어 호환됩니다(v16+)

  • 필수 포트(8888)가 사용 가능하며 방화벽에 의해 차단되지 않습니다.

  • 지정된 위치에서 스크립트를 실행할 수 있는 권한이 있습니다.

Claude에 도구가 나타나지 않음

인증 후 Claude에 Spotify 도구가 나타나지 않는 경우:

  • 인증에 성공한 후 Claude Desktop을 다시 시작했는지 확인하세요.

  • MCP 통신 오류가 있는지 Claude Desktop 로그를 확인하세요.

  • MCP 서버 프로세스가 실행 중인지 확인하세요(확인하려면 수동으로 실행하세요)

  • MCP 서버가 Claude Desktop MCP 레지스트리에 올바르게 등록되었는지 확인하세요.

서버가 실행 중인지 확인

서버가 실행 중인지 확인하려면:

  • Windows : 작업 관리자를 열고 "세부 정보" 탭으로 이동하여 "node.exe"를 찾으세요.

  • macOS/Linux : 터미널을 열고 ps aux | grep node 실행합니다.

서버가 실행 중이 아닌 경우 수동으로 시작하거나 자동 시작 방법을 사용하세요.

테스트

이 프로젝트에는 코드 품질과 기능을 보장하기 위한 자동화된 테스트가 포함되어 있습니다. 테스트 모음은 TypeScript를 지원하는 Jest를 사용하며 다음 내용을 다룹니다.

  • Zod 스키마 검증 - 모든 입력 스키마가 올바르게 검증되어 데이터가 검증됩니다.

  • Spotify API 상호 작용 - API 요청 처리 및 오류 처리 테스트

  • MCP 서버 기능 - 도구의 적절한 등록 및 실행을 보장합니다.

테스트 실행

먼저, 모든 개발 종속성이 설치되었는지 확인하세요.

npm install

모든 테스트를 실행하려면:

npm test

특정 테스트 파일을 실행하려면:

npm test -- --testMatch="**/tests/schemas.test.ts"

ESM 모듈에서 문제가 발생하는 경우 Node.js v16 이상을 사용하고 있는지 확인하고 package.json에 구성된 대로 NODE_OPTIONS 환경 변수에 --experimental-vm-modules 플래그가 포함되어 있는지 확인하세요.

테스트 구조

  • tests/schemas.test.ts : 입력 검증 스키마에 대한 테스트

  • tests/spotify-api.test.ts : Spotify API 상호 작용에 대한 테스트

  • tests/server.test.ts : MCP 서버 기능에 대한 테스트

새로운 테스트 추가

새로운 기능을 추가할 때 해당 테스트를 포함하세요.

  1. 새로운 스키마의 경우 schemas.test.ts 에 유효성 검사 테스트를 추가합니다.

  2. Spotify API 함수의 경우 spotify-api.test.ts 에 테스트를 추가하세요.

  3. MCP 도구의 경우 server.test.ts 에 테스트를 추가하세요.

모든 테스트는 Jest와 TypeScript의 ESM 모듈 형식을 사용하여 작성해야 합니다.

보안 참고 사항

  • 클라이언트 ID와 클라이언트 비밀번호를 절대 공유하지 마세요.

  • 이제 액세스 토큰은 세션과 여러 인스턴스 간의 지속성을 활성화하기 위해 사용자의 홈 디렉토리인 ~/.spotify-mcp/tokens.json 에 저장됩니다.

  • 사용자 데이터는 디스크에 저장되지 않습니다.

애플리케이션 액세스 취소

보안상의 이유로 다음과 같은 경우 Spotify 계정에 대한 애플리케이션의 액세스 권한을 취소할 수 있습니다.

  • 더 이상 이 통합을 사용하지 않습니다.

  • 무단 접근이 의심됩니다

  • 인증 문제를 해결하고 있습니다

접근 권한을 취소하려면:

  1. Spotify 계정 페이지 로 이동하세요

  2. 메뉴에서 "앱"으로 이동합니다.

  3. "MCP Claude Spotify"(또는 앱에 선택한 이름)를 찾으세요.

  4. "액세스 권한 제거"를 클릭하세요

이렇게 하면 모든 액세스 토큰과 새로 고침 토큰이 즉시 무효화됩니다. 다음에 auth-spotify 명령을 사용할 때 애플리케이션을 다시 인증해야 합니다.

기여하다

여러분의 참여를 환영합니다! 다음 지침을 따르세요.

개발 워크플로

  1. 저장소를 포크하세요

  2. 기능 브랜치를 생성합니다( git checkout -b feature/amazing-feature )

  3. 변경 사항을 만드세요

  4. 테스트를 실행하여 통과하는지 확인합니다( npm test )

  5. 변경 사항을 커밋하세요( git commit -m 'Add some amazing feature' )

  6. 브랜치에 푸시( git push origin feature/amazing-feature )

  7. 풀 리퀘스트 열기

코드 스타일 가이드라인

이 프로젝트는 다음과 같은 코딩 표준을 따릅니다.

  • 엄격한 유형 검사를 통해 TypeScript를 사용하세요

  • ESM 모듈 형식을 따르세요

  • 들여쓰기에는 공백 2개를 사용하세요

  • 변수와 함수에는 camelCase를 사용하세요

  • 클래스와 인터페이스에는 PascalCase를 사용하세요

  • JSDoc 주석이 있는 문서 함수

  • 줄 길이를 100자 이하로 유지하세요

프로젝트 구조

이 프로젝트는 다음 구조를 따릅니다.

mcp-claude-spotify/
├── src/               # Source code
├── build/             # Compiled JavaScript
├── tests/             # Test files
├── public/            # Public assets
└── ...

풀 리퀘스트 프로세스

  1. 코드가 스타일 가이드라인을 따르는지 확인하세요.

  2. 필요한 경우 문서를 업데이트하세요

  3. 새로운 기능에 대한 테스트 추가

  4. 모든 테스트가 통과되었는지 확인하세요

  5. 귀하의 PR은 유지 관리자에 의해 검토됩니다.

관련 링크

특허

이 프로젝트는 Mozilla Public License 2.0에 따라 라이선스가 부여되었습니다. 자세한 내용은 LICENSE 파일을 참조하세요.

Available Tools

19 tools
add-tracks-to-playlistC

Add tracks to a playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
trackIdsYesArray of Spotify track IDs to add
playlistIdYesSpotify ID of the playlist

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 but only states the basic action. It doesn't mention whether this requires specific permissions (e.g., user authorization), rate limits, how duplicates are handled, or what happens on failure, which are critical 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.

Conciseness5/5

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

The description is extremely concise with a single, direct sentence that front-loads the core action. There is no wasted language, making it efficient and easy to parse, though this brevity contributes to gaps in other dimensions.

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 complexity as a mutation operation with no annotations or output schema, the description is insufficient. It lacks details on behavioral traits, error handling, return values, and integration with sibling tools, leaving significant gaps for effective agent use.

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?

The schema description coverage is 100%, with clear documentation for both parameters (playlistId and trackIds). The description adds no additional meaning beyond what the schema already provides, such as format examples or constraints, so it meets the baseline for adequate but unenhanced parameter information.

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 verb ('Add') and resource ('tracks to a playlist'), making the tool's function immediately understandable. However, it doesn't differentiate from potential sibling operations like 'create-playlist' or 'play-track', which would require more specificity for a perfect score.

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 like 'create-playlist' for new playlists or 'play-track' for immediate playback. It lacks context about prerequisites (e.g., needing an existing playlist) or exclusions, leaving usage unclear.

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

auth-spotifyC

Authenticate with Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/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 full burden. 'Authenticate with Spotify' implies a state-changing operation (likely obtaining or refreshing tokens), but it doesn't disclose behavioral traits like whether it's interactive, requires user input, stores credentials, has side effects, or handles errors. This leaves critical gaps for an agent to understand how to invoke it safely.

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 extremely concise with just three words, front-loading the core action ('Authenticate') and target ('Spotify'). There's zero waste or redundancy, making it easy to parse quickly.

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 complexity of authentication (often involving tokens, scopes, or user interaction), no annotations, no output schema, and sibling tools that likely depend on auth, the description is incomplete. It doesn't explain what authentication entails, what it returns, or how it integrates with other tools, leaving significant gaps for an agent.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is given since the schema fully covers the absence of parameters, and the description doesn't need to compensate.

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

Purpose3/5

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

The description 'Authenticate with Spotify' states the general purpose (authentication) and target service (Spotify), but it's vague about what authentication means in this context. It doesn't specify whether this initiates OAuth flow, validates existing tokens, or manages credentials, nor does it distinguish from other authentication-related operations that might exist.

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. It doesn't mention prerequisites (e.g., needing authentication before using other Spotify tools), timing considerations, or whether it's required for sibling tools like 'add-tracks-to-playlist' or 'search-spotify'. Without this, an agent might misuse it.

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

create-playlistC

Create a new playlist for the current user

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the playlist
publicNoWhether the playlist should be public (default: false)
descriptionNoDescription of the playlist (optional)

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 states it creates a playlist but doesn't cover critical aspects like authentication requirements, rate limits, whether it returns the created playlist ID, or error conditions. This leaves significant gaps for an agent to understand how to invoke it safely and effectively.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly.

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 complexity (a write operation with no annotations and no output schema), the description is insufficient. It doesn't explain what happens after creation (e.g., returns a playlist ID), authentication needs, or how it fits into workflows with sibling tools. For a mutation tool in this context, more completeness is needed.

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?

The schema description coverage is 100%, with clear descriptions for all parameters (name, description, public). The description adds no additional parameter semantics beyond what's in the schema, such as explaining format constraints or default behaviors. Baseline 3 is appropriate since the schema adequately documents 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 clearly states the action ('Create') and resource ('new playlist for the current user'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get-user-playlists' or 'add-tracks-to-playlist', which would require mentioning this is specifically for creation rather than retrieval or modification.

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. It doesn't mention prerequisites (e.g., authentication via 'auth-spotify'), when not to use it (e.g., for updating existing playlists), or how it relates to siblings like 'add-tracks-to-playlist' for populating playlists after creation.

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

delete-playlistA

Unfollow a playlist (removes it from your library, but the playlist still exists on Spotify)

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesSpotify ID of the playlist to delete

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the key non-obvious trait: this is a non-destructive unfollow, not a true deletion, so the playlist survives on Spotify. It does not mention idempotency, auth requirements, or what happens when the playlist is already unfollowed.

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?

One sentence, front-loaded with the actual operation, with the parenthetical immediately defusing the destructive connotation of the tool name. Nothing is wasted.

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 one-parameter, no-output-schema mutation tool, the behavioral clarification is the main thing an agent needs, and it is present. Missing only auth/prerequisite context, which is minor given a dedicated auth-spotify sibling.

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 coverage is 100% and the single parameter playlistId is already documented in the schema, so the description adds no parameter-level meaning. Baseline 3 is appropriate when the schema does this work.

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 (unfollow) and resource (playlist), and crucially corrects the misleading 'delete' in the tool name by clarifying the playlist is not destroyed. An agent can distinguish this from update-playlist, create-playlist, and remove-tracks-from-playlist without opening any schema.

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?

Usage is implied: use this to remove a playlist from the user's library while leaving it on Spotify. There is no explicit when-to-use, prerequisite (e.g. authentication via auth-spotify), or statement of alternatives such as update-playlist for renaming.

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

get-current-playbackB

Get information about the user's current playback state

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 full burden for behavioral disclosure. It states it retrieves information (implying read-only), but doesn't specify what data is returned (e.g., track details, device info, playback status), potential errors (e.g., no active playback), or authentication requirements (implied by 'user's' but not explicit). This is inadequate for a tool with zero annotation coverage.

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, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose, making it easy to parse quickly.

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 and no output schema, the description is incomplete. It doesn't explain what 'information' is returned (e.g., JSON structure, fields like track name or progress), behavioral aspects like error handling, or how it integrates with sibling tools. For a tool that likely returns complex playback state data, this leaves significant gaps.

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 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline high score since it doesn't need to compensate for gaps.

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 purpose with a specific verb ('Get') and resource ('information about the user's current playback state'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'pause-playback' or 'play-track', which are related to playback control rather than state retrieval.

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. It doesn't mention prerequisites (e.g., requires active playback), exclusions, or how it differs from other playback-related tools in the sibling list, leaving the agent to infer usage context.

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

get-playlist-coverC

Get the cover image of a playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesSpotify ID of the playlist

TDQS

C2.9/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 disclosure burden. It does not say what is actually returned (image URL, binary bytes, base64, size variants), whether authentication is required, or how a missing cover is handled — significant gaps for a tool whose whole purpose is retrieving an asset.

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?

A single short sentence with no filler, and the core purpose is front-loaded. It is efficient, though perhaps too terse to earn a top score given the missing return-value information.

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 clarify the return shape for an image-fetching tool, but it does not. An agent cannot tell whether it receives a URL, raw image data, or metadata, nor what happens if no cover is set.

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 100%, with 'playlistId' documented as the Spotify ID of the playlist. The description adds no format, ID-source, or validity information beyond the schema, so the baseline of 3 applies.

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?

States a specific verb (get) and resource (playlist cover image), so the agent knows exactly what is fetched. However, it does not distinguish itself from the sibling 'upload-playlist-cover', which operates on the same resource in the opposite direction.

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 guidance on when to use this versus alternatives such as 'get-playlist-tracks' or 'upload-playlist-cover'. The read-only nature is only implied by the verb 'get', and no preconditions (e.g., playlist must exist or be public) are stated.

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

get-playlist-tracksC

Get the tracks in a playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of tracks to return (1-50, default: 20)
offsetNoThe index of the first track to return (default: 0)
playlistIdYesSpotify ID of the playlist

TDQS

C2.9/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. 'Get' implies a read, but nothing is said about pagination behavior, authentication requirements (Spotify endpoints require auth), or what happens when the playlist is empty or the ID is invalid.

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?

A single front-loaded sentence with zero filler, which is appropriate for the operation. It is efficient but arguably too terse given the tool's pagination surface.

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 3-parameter tool with no annotations and no output schema, the description is thin. It omits any mention of paginated returns or auth needs, leaving gaps that structured fields do not cover.

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 100%, with limit, offset, and playlistId all documented in the schema itself, so the baseline of 3 applies. The description adds no syntax, format, or ordering detail beyond what the schema already conveys.

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?

States a clear verb ('Get') and resource ('tracks in a playlist'), so an agent immediately knows the operation. However, it offers no differentiation from siblings like get-user-playlists, get-top-tracks, or search-spotify, which all retrieve track-like resources.

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 such as get-user-playlists or search-spotify, and no mention of prerequisites (e.g., that a playlist ID must be known beforehand). The agent must infer usage entirely from the name.

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

get-recently-playedC

Get the user's recently played tracks

ParametersJSON Schema
NameRequiredDescriptionDefault
afterNoUnix timestamp in ms. Returns tracks played after this time (optional)
limitNoMaximum number of tracks to return (1-50, default: 20)
beforeNoUnix timestamp in ms. Returns tracks played before this time (optional)

TDQS

C2.9/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 behavioral burden and it does not deliver: it never says this is a read-only operation, that it requires user authorization, that it reflects a rolling time window, or what the response contains. This is a significant gap for a user-data read with zero annotation coverage.

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?

A single short sentence, front-loaded with no filler or repetition of the schema. It is efficient, though its brevity shades into under-specification rather than tightness.

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 annotations and no output schema, the description is the only place behavioral and return-value context could live, and it supplies neither. An agent cannot tell from this definition what it receives back or under what auth/rate conditions the call succeeds.

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 100%, with after/before/limit fully documented in the schema, so the baseline of 3 applies. The description adds no syntax, defaults, or interaction detail (e.g., that after/before and limit combine) beyond what the schema already states.

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 verb ('Get') and resource ('recently played tracks') scoped to the user, which is clear on its own. However, it offers no differentiation from near-neighbor siblings such as get-current-playback or get-top-tracks, leaving the agent to infer the distinction.

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 statement of when to use this tool versus alternatives, nor any prerequisites such as needing an authenticated user session. The agent gets a purpose but no routing guidance among the many playback/playlist siblings.

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

get-top-tracksB

Get the user's top played tracks over a specified time range

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoThe number of tracks to return (1-50, default: 20)
offsetNoThe index of the first track to return (default: 0)
time_rangeNoOver what time frame the affinities are computed. short_term = ~4 weeks, medium_term = ~6 months, long_term = several years (default: medium_term)

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it indicates this is a read operation ('Get'), it doesn't mention authentication requirements (implied by sibling 'auth-spotify'), rate limits, data freshness, or what happens when parameters are out of bounds. For a tool accessing personal data with 3 parameters, this leaves significant behavioral gaps unaddressed.

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, efficient sentence that front-loads the core purpose without unnecessary words. Every element ('Get', 'user's top played tracks', 'over a specified time range') contributes directly to understanding the tool's function with zero waste or redundancy.

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 3 parameters with full schema coverage but no annotations and no output schema, the description is minimally adequate. It covers the basic purpose but lacks important context about authentication, rate limits, return format, and how this tool fits within the broader Spotify API ecosystem represented by the sibling tools. For a personal data retrieval tool, more behavioral context would be beneficial.

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 100%, providing complete documentation for all 3 parameters. The description adds minimal value beyond the schema by mentioning 'time range' generally, but doesn't provide additional context about parameter interactions, typical values, or semantic meaning beyond what's already in the parameter descriptions. This meets the baseline for high schema coverage.

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 action ('Get') and resource ('user's top played tracks') with a specific scope ('over a specified time range'). It distinguishes from siblings like 'search-spotify' or 'get-recommendations' by focusing on personal listening history rather than general search or algorithmic recommendations. However, it doesn't explicitly differentiate from all siblings (e.g., 'get-current-playback' also retrieves track data).

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 usage when needing personal listening statistics over time, but provides no explicit guidance on when to use this versus alternatives like 'search-spotify' for general track discovery or 'get-recommendations' for algorithmic suggestions. It mentions the time range parameter but doesn't explain typical use cases for different time ranges or when this tool is preferred over other track-related tools.

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

get-user-playlistsC

Get a list of the user's playlists

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of playlists to return (1-50, default: 20)
offsetNoThe index of the first playlist to return (default: 0)

TDQS

C2.9/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 behavioral burden. It implies a read (no mutation verbs), but discloses nothing about auth requirements, whether it returns only the current user's playlists, pagination behavior, or how results are ordered.

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?

A single short sentence with no filler, front-loaded with the verb and resource. It is efficient, though it is arguably too terse to earn a 5.

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 two-optional-parameter read tool with a fully documented schema and no output schema, the description is minimally adequate. It is missing ownership scope and auth context, but nothing in the schema is left unexplained.

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 100% (limit with range/default, offset with default), so the schema already documents both parameters fully. The description adds no syntax or format detail beyond that, which is the baseline 3 case.

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 verb ('Get') and resource ('a list of the user's playlists'), which is unambiguous against siblings like get-playlist-tracks or get-top-tracks. It does not explicitly name or differentiate itself from those nearby siblings, so it falls short of a 5.

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 guidance on when to use this tool versus alternatives such as get-playlist-tracks or get-top-tracks, nor any stated preconditions (e.g. authentication, whose playlists). Usage is only implied by the tool name.

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

next-trackB

Skip to the next track

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 full burden but only states the action without behavioral details. It doesn't disclose if this requires authentication, affects playback state, has rate limits, or what happens on success/failure (e.g., skips in current queue or playlist). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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, efficient sentence with zero waste—'Skip to the next track' is front-loaded and perfectly concise. Every word earns its place, making it easy to parse quickly.

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 complexity (a mutation tool with no annotations or output schema), the description is incomplete. It lacks context on authentication needs, playback requirements, error conditions, or return values. For a tool that likely interacts with active playback, this leaves critical gaps for an AI agent to use it correctly.

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 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add param info, which is appropriate here. Baseline is 4 for zero parameters, as there's nothing to compensate for and no redundancy.

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 'Skip to the next track' clearly states the action (skip) and resource (track), making the purpose immediately understandable. It distinguishes from siblings like 'previous-track' by directionality, though not explicitly named. However, it doesn't specify if this applies to current playback or a playlist context, leaving some ambiguity compared to more specific alternatives.

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 is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires active playback), exclusions (e.g., not usable without a queue), or sibling tools like 'play-track' or 'get-current-playback' for context. The agent must infer usage from the tool name alone.

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

pause-playbackB

Pause the user's playback

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 full burden for behavioral disclosure. It states the action but doesn't mention side effects (e.g., whether playback can be resumed, if it requires specific permissions, or error conditions like no active playback). This leaves significant gaps 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.

Conciseness5/5

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

The description is a single, efficient sentence with no wasted words. It's appropriately sized for a simple tool and front-loads the essential action, making it easy to parse quickly.

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 mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after pausing, potential errors, or return values, leaving the agent with incomplete operational context.

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 with 100% schema description coverage, so the schema already fully documents the lack of inputs. The description appropriately doesn't add unnecessary parameter information, maintaining a clean baseline for parameterless tools.

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 action ('Pause') and target ('the user's playback'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'play-track' or 'get-current-playback' beyond the obvious pause vs play distinction, which prevents a perfect score.

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 is provided on when to use this tool versus alternatives like 'play-track' or 'next-track', nor does it mention prerequisites such as requiring active playback. The description only states what it does without contextual usage information.

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

play-trackC

Play a specific track on an active device

ParametersJSON Schema
NameRequiredDescriptionDefault
trackIdYesSpotify ID of the track to play
deviceIdNoSpotify ID of the device to play on (optional)

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 mentions playing on an 'active device' but doesn't explain what happens if no device is active, whether this requires specific permissions (e.g., Spotify Premium), if it interrupts current playback, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action ('Play a specific track'), making it easy to grasp quickly. Every part of the sentence earns its place by specifying the resource and context.

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 complexity (a mutation operation with no annotations and no output schema), the description is incomplete. It doesn't address key contextual aspects like error conditions (e.g., invalid track ID, no active device), behavioral outcomes (e.g., playback state changes), or integration with sibling tools (e.g., using 'get-current-playback' first). For a tool that modifies system state, more detail is needed to guide effective use.

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?

The description adds no parameter-specific information beyond what the input schema provides, which has 100% coverage with clear descriptions for both 'deviceId' (optional Spotify ID) and 'trackId' (required Spotify ID). Since the schema fully documents parameters, the baseline score of 3 is appropriate, as the description doesn't enhance or clarify semantics further.

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 action ('Play') and resource ('a specific track on an active device'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'next-track' or 'previous-track', which also control playback, nor does it clarify what constitutes an 'active device' versus using 'get-current-playback' to check status.

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 minimal guidance, stating only that it plays a track on an active device. It doesn't specify when to use this tool versus alternatives like 'next-track' for sequential playback, 'search-spotify' to find tracks first, or 'get-current-playback' to verify device status. No exclusions or prerequisites are mentioned, leaving usage context vague.

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

previous-trackB

Skip to the previous track

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 of behavioral disclosure. It implies a mutation action ('skip') but doesn't specify whether this requires specific permissions, affects playback state, or has side effects like changing the current track index. For a mutation tool with zero annotation coverage, 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.

Conciseness5/5

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

The description is a single, clear sentence with no wasted words, making it highly efficient and front-loaded. It immediately conveys the core functionality without unnecessary elaboration.

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 complexity (a mutation with no annotations and no output schema), the description is incomplete. It lacks information on behavioral traits like authentication needs, error conditions, or what happens if no previous track exists. For a tool that likely interacts with playback state, more context is needed.

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, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't mention parameters, which aligns with the schema. A baseline of 4 is applied since there are no parameters to document.

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 'Skip to the previous track' clearly states the action (skip) and target resource (previous track), making the purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'next-track' beyond the directional difference, which keeps it from a perfect score.

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 like 'next-track' or 'play-track', nor does it mention prerequisites such as requiring active playback or authentication. It simply states what the tool does without contextual usage information.

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

remove-tracks-from-playlistC

Remove tracks from a playlist

ParametersJSON Schema
NameRequiredDescriptionDefault
trackIdsYesArray of Spotify track IDs to remove
playlistIdYesSpotify ID of the playlist

TDQS

C2.6/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 behavioral burden, and it discloses nothing. For a mutation tool it does not say whether removals are permanent, whether the track IDs must already exist in the playlist, what happens with invalid IDs, or what authorization 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.

Conciseness4/5

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

The single five-word sentence is front-loaded and contains no filler. It is arguably too terse for a mutation tool, but it is structurally clean and wastes nothing.

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 annotations, no output schema, and a mutation operation, the description should cover reversibility, error behavior, and relationship to sibling playlist tools. It covers none of these, leaving significant gaps for an agent to guess at.

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 100%, so both playlistId and trackIds are already documented in the schema. The description adds no format, ordering, batch-size, or constraint detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose3/5

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

The description states a clear verb and resource ('Remove tracks from a playlist'), so the purpose is unambiguous. However, it is essentially a plain-English restatement of the tool name and offers no differentiation from siblings like add-tracks-to-playlist, reorder-playlist-tracks, or 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 Guidelines2/5

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

There is no when-to-use guidance, no stated prerequisites, and no mention of alternatives such as reorder-playlist-tracks or delete-playlist. The agent must infer when this is the right call 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.

reorder-playlist-tracksB

Reorder tracks in a playlist by moving a range of tracks to a new position

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesSpotify ID of the playlist
rangeStartYesPosition of the first track to move (0-based index)
rangeLengthNoNumber of tracks to move (default: 1)
insertBeforeYesPosition where the tracks should be inserted (0-based index)

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 carries the full behavioral burden. It conveys the move semantics but omits required authorization scope, whether collaborative playlists are supported, and how unspecified indices behave — meaningful gaps for a mutation tool with zero annotation coverage.

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?

A single front-loaded sentence with no filler, stating the operation and its mechanism efficiently. It is appropriately sized, though extremely terse given the tool is a mutation.

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 four-parameter mutation with fully documented params and no output schema, the description is minimally adequate. It still leaves behavioral questions unanswered (auth scope, index shift effects, error conditions) that matter for correct invocation.

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 100%, so playlistId, rangeStart, rangeLength, and insertBefore are all documented in the schema itself. The description's mention of a 'range of tracks' and 'new position' loosely maps to these parameters but adds no syntax or index-handling detail beyond 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 states a specific verb (reorder), resource (playlist tracks), and mechanism (move a range to a new position). It is clearly distinct from sibling mutations like add-tracks-to-playlist or remove-tracks-from-playlist, though it does not explicitly name the boundary with update-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?

Usage is implied by the operation itself — an agent can tell this is for repositioning existing tracks rather than adding or removing them. However, there is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as remove + add for cross-position moves.

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

search-spotifyB

Search for tracks, albums, artists, or playlists on Spotify

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoType of item to search for (default: track)
limitNoMaximum number of results to return (1-10, default: 5)
queryYesSearch query

TDQS

B3.1/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 behavioral burden, yet it says nothing about authentication requirements, rate limits, pagination, or result ordering. The only implicit signal is that a search is a read-only operation, which is minimal disclosure for a tool with zero annotation coverage.

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 with no redundancy or filler. Every word maps to the tool's core purpose.

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?

The schema is fully described and there is no output schema to require return-value documentation, so the essentials are present. However, the absence of behavior and usage context leaves the definition only minimally viable for an agent choosing among many Spotify siblings.

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 100%, so the meaning of query, type, and limit is already fully documented in the schema, and the description adds no extra syntax or formatting guidance. This is the expected baseline when the schema does the heavy lifting.

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?

States a specific verb (Search) and enumerates the resources (tracks, albums, artists, playlists) plus the service (Spotify). An agent can distinguish it from playback and playlist-management siblings, though it does not explicitly name or contrast those siblings.

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 when-to-use context, no prerequisites, and no guidance on distinguishing it from related lookups like get-top-tracks or get-playlist-tracks. Usage is only implied by the verb 'search'.

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

update-playlistC

Update a playlist's name, description, public/private status, or collaborative setting

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew name for the playlist (optional)
publicNoWhether the playlist should be public (optional)
playlistIdYesSpotify ID of the playlist
descriptionNoNew description for the playlist (optional)
collaborativeNoWhether the playlist should be collaborative. Must set public to false first (optional)

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 carries the full behavioral burden and does not state whether ownership/permissions are required, that unspecified fields are left unchanged, or that changes are reversible. It also omits that collaborative requires public=false, a constraint that only appears in the schema.

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?

A single front-loaded sentence that lists the update targets with zero filler. Slightly terse given the mutation risk, but appropriately sized for the information conveyed.

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 mutation tool with no annotations and no output schema, the description plus the fully-covered schema give the agent enough to call it, but omit ownership requirements, side effects, and the public/collaborative interaction detail. Adequate but with clear gaps.

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 100%, so every parameter is already documented, including the collaborative/public ordering constraint. The description echoes the same four field names without adding format or value semantics, so the baseline 3 applies.

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?

States a specific verb ('Update') and resource ('playlist') and enumerates the mutable fields (name, description, public/private, collaborative), so an agent can tell it apart from create-playlist and delete-playlist. It does not explicitly name a sibling or contrast scope, so it falls short of a 5.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as create-playlist for new playlists. The agent is left to infer that this only applies to existing playlists it owns.

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

upload-playlist-coverA

Upload a custom cover image for a playlist (base64 encoded JPEG, max 256KB)

ParametersJSON Schema
NameRequiredDescriptionDefault
playlistIdYesSpotify ID of the playlist
imageBase64YesBase64 encoded JPEG image (max 256KB)

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 carries the full burden. The only behavioral detail it gives (base64 JPEG, max 256KB) merely restates the schema, and it omits key traits: that this overwrites any existing cover, what permission/scope is required, and how failures (oversize/invalid format) are reported.

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 with the action first and the constraints parenthetically appended; no filler or redundancy.

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 two-parameter tool with no output schema and no annotations, the description is adequate but shallow: it does not cover the destructive overwrite behavior, authentication requirements, or error conditions that an agent would need before calling a mutation.

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?

Both parameters are required and schema description coverage is 100%, so the schema already documents playlistId and imageBase64 fully. The description adds no format syntax, encoding caveats, or examples beyond what the schema states — baseline 3.

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 a specific verb (Upload) plus resource (cover image for a playlist) and even the accepted format and size cap. It is trivially distinguishable from the sibling get-playlist-cover, which retrieves rather than sets the image.

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 intent is implied — call this when you want to set a playlist's cover art — but there is no explicit when/when-not guidance, no mention of the prerequisites (ownership, required auth scope), and no reference to the sibling get-playlist-cover for the read side.

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. 11 tool updatesv0.7.0
    • Addeddelete-playlist
    • Addedget-playlist-cover
    • Addedget-playlist-tracks
    • Addedget-recently-played
    • Removedget-recommendations
    • Changedget-user-playlists2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum number of playlists to return (1-50, default: 20)",
        +  "type": "number"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "The index of the first playlist to return (default: 0)",
        +  "type": "number"
        +}
    • Addedremove-tracks-from-playlist
    • Addedreorder-playlist-tracks
    • Changedsearch-spotify1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return (1-50, default: 10)"New value: +"Maximum number of results to return (1-10, default: 5)"
    • Addedupdate-playlist
    • Addedupload-playlist-cover
  2. 12 tool updatesv1.0.0
    • First observedadd-tracks-to-playlist
    • First observedauth-spotify
    • First observedcreate-playlist
    • First observedget-current-playback
    • First observedget-recommendations
    • First observedget-top-tracks
    • First observedget-user-playlists
    • First observednext-track
    • First observedpause-playback
    • First observedplay-track
    • First observedprevious-track
    • First observedsearch-spotify

TDQS

B3.3/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource and action (playlist management, playback control, search, user data, auth). No two tools overlap in purpose; descriptions clearly differentiate similar-sounding operations like delete-playlist (unfollow) and remove-tracks-from-playlist.

Naming Consistency4/5

Nearly all tools use kebab-case with an action-first pattern (get-, create-, add-, remove-, update-, upload-, reorder-). Minor deviations exist in next-track and previous-track, which are not verb_noun, and auth-spotify uses an abbreviation, but overall the convention is predictable.

Tool Count4/5

19 tools is slightly above the ideal 3–15 range but remains reasonable for a Spotify controller covering playlists, playback, search, and user data. Each tool appears to earn its place, though a few could potentially be consolidated.

Completeness4/5

Playlist lifecycle is well covered (create, read, update, unfollow, track add/remove/reorder, cover management). Playback control is basic but missing common operations like volume, seek, shuffle, repeat, queue, and device transfer; these are notable gaps but agents can still perform core tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers