Skip to main content
Glama
Cifero74

mcp-apple-music

by Cifero74

mcp-apple-music šŸŽµ

mcp-name: io.github.Cifero74/mcp-apple-music

Python 3.10+ License: MIT MCP

An MCP (Model Context Protocol) server that gives Claude full access to your Apple Music account — search the catalog, browse your personal library, manage playlists, and explore your listening history and recommendations.

Ask Claude things like:

  • "Based on what I've been listening to lately, recommend 15 songs I don't have yet and add them to a new playlist"

  • "Show me all my playlists and tell me which artists appear most"

  • "Search for albums by Nick Cave and add my three favourites to a playlist called Dark Picks"


Features

Tool

Description

search_catalog

Search Apple Music catalog (songs, albums, artists, playlists)

search_library

Search within your personal library

get_library_songs

List songs saved in your library (paginated)

get_library_albums

List albums in your library (paginated)

get_library_artists

List artists in your library

get_library_playlists

List all your playlists with IDs

get_playlist_tracks

Get tracks inside one of your playlists or an Apple Music catalog playlist (pl. IDs)

create_playlist

Create a new playlist

add_tracks_to_playlist

Add songs to a playlist (library or catalog tracks)

add_to_library

Save catalog songs, albums or playlists into your library

get_recently_played

See recently played albums/playlists/stations

get_recommendations

Get personalised Apple Music picks

favorite_song

Mark a catalog song as favorite (star)

unfavorite_song

Remove a catalog song from favorites

get_song_favorite_status

Check which catalog songs are favorited


Related MCP server: Spotify MCP Server

Requirements

  • Python 3.10+

  • uv (recommended) or pip

  • A paid Apple Developer Program membership (99 USD/year) to create a MusicKit key. The free Apple Developer account can't create MusicKit keys.

  • An active Apple Music subscription


Setup

1. Create a MusicKit Key

  1. Go to developer.apple.com → Certificates, Identifiers & Profiles

  2. Under Keys, click + to create a new key

  3. Give it any name, enable MusicKit, and click Continue → Register

  4. Download the .p8 file — you can only download it once, keep it safe!

  5. Note your Key ID (e.g. ABC123DEF4) and your Team ID (found under Membership Details)

āš ļø The Key ID is the alphanumeric code shown next to the key name — not the filename of the .p8 file.

2. Clone and install

git clone https://github.com/Cifero74/mcp-apple-music
cd mcp-apple-music

# with uv (recommended)
uv sync

# or with pip
pip install -e .

3. Run the one-time setup wizard

# with uv
uv run mcp-apple-music-setup

# or directly
python -m mcp_apple_music.setup

The wizard will ask for your Team ID, Key ID, and the path to your .p8 file. It then opens a browser page where you click "Authorise Apple Music" — this uses Apple's official MusicKit JS to obtain your Music User Token, which is stored securely at ~/.config/mcp-apple-music/config.json (file permissions: 600).

4. Add to Claude Desktop

Open your Claude Desktop config:

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

{
  "mcpServers": {
    "apple-music": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/absolute/path/to/mcp-apple-music",
        "mcp-apple-music"
      ]
    }
  }
}

Restart Claude Desktop — you should see the apple-music tools available in the toolbar.


How it works

Apple Music requires two separate tokens:

  • Developer Token — a JWT you sign locally with your .p8 private key. Valid up to 6 months; the server regenerates it automatically before expiry. Your key never leaves your machine.

  • Music User Token — obtained once via MusicKit JS OAuth in the browser (the setup wizard handles this). Stored locally at ~/.config/mcp-apple-music/config.json.

Your .p8 key  ──►  Developer Token (JWT, auto-renewed)  ─┐
                                                           ā”œā”€ā”€ā–ŗ Apple Music API
Browser OAuth ──►  Music User Token (stored locally)    ā”€ā”˜

āš ļø Playback control (play/pause/skip) is not available via Apple's REST API. It requires native MusicKit frameworks (iOS/macOS app) or MusicKit JS running in a browser context.

For playback control, check out chrome-relay — a companion CLI that lets an MCP server drive a music.apple.com tab already open in Chrome, enabling play/pause/skip without shipping a MusicKit JS shim.


Project structure

mcp-apple-music/
ā”œā”€ā”€ src/
│   └── mcp_apple_music/
│       ā”œā”€ā”€ __init__.py
│       ā”œā”€ā”€ auth.py      — Developer Token generation + User Token management
│       ā”œā”€ā”€ client.py    — Async HTTP client for api.music.apple.com
│       ā”œā”€ā”€ server.py    — FastMCP server with all 14 tools
│       └── setup.py     — One-time setup wizard (browser-based OAuth)
ā”œā”€ā”€ config.example.json  — Example config structure (no secrets)
ā”œā”€ā”€ pyproject.toml
└── README.md

Example prompts

Once connected, you can ask Claude:

"What have I been listening to this week? Based on that, find 10 songs
 I don't own yet that I'd probably enjoy and create a playlist with them."

"Search for all albums by Joni Mitchell and tell me which ones
 I already have in my library."

"List my playlists, pick the one that looks most like a workout mix,
 and add 5 high-energy songs from the catalog to it."

"Create a playlist called 'Rainy Sunday' with the 10 most mellow tracks
 you can find from my library."

Authors

Built by Cifero74 and Claude (Anthropic) as part of a personal MCP ecosystem for Claude Desktop.

This project was conceived, designed, debugged, and shipped entirely through a collaborative conversation between Mario and Claude — from API research and auth flow design, through the setup wizard, to live testing with a real Apple Music library.

Contributions, issues and PRs are welcome!


License

MIT — use it, fork it, build on it.

Available Tools

15 tools
add_to_libraryA

Save Apple Music catalog songs, albums or playlists into the user's library.

Use this when the user wants to keep something found with search_catalog, get_playlist_tracks or get_recommendations. Saved playlists then appear in get_library_playlists.

Args: song_ids: Comma-separated catalog song IDs (numeric). album_ids: Comma-separated catalog album IDs (numeric). playlist_ids: Comma-separated catalog playlist IDs (start with 'pl.').

NameRequiredDescriptionDefault
song_idsNo
album_idsNo
playlist_idsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden. It does disclose a postcondition ('Saved playlists then appear in get_library_playlists') and ID formats, which is real value, but it says nothing about required permissions, whether the operation is idempotent, or what happens when all three optional string params are left at their empty defaults.

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 purpose and usage guidance are front-loaded in the first two sentences, and the Args block is short and scannable. The formatting is slightly redundant with the schema titles, but every line carries usable information about formats.

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?

An output schema exists, so return values need not be described, and the parameter formats are well covered. However, for a mutation tool with no annotations, the absence of any statement about permissions, failure modes, or the empty-input case leaves real gaps an agent would want before calling.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well: it explains that song and album IDs are numeric and comma-separated, and that playlist IDs use the 'pl.' prefix. The one gap is that it does not say whether at least one ID group must be supplied, which matters for a tool where all three params are optional with empty-string defaults.

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 and resource: saving catalog songs, albums, or playlists into the user's library. It distinguishes itself from read siblings by naming the upstream sources (search_catalog, get_playlist_tracks, get_recommendations), though it never explicitly contrasts itself with add_tracks_to_playlist, which is the closest functional neighbor.

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?

Gives a clear trigger condition: 'Use this when the user wants to keep something found with search_catalog, get_playlist_tracks or get_recommendations.' It also states the downstream consequence (saved playlists appear in get_library_playlists). It lacks any explicit when-NOT-to-use guidance, particularly versus add_tracks_to_playlist.

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

add_tracks_to_playlistA

Add tracks to an existing playlist.

Args: playlist_id: The target playlist ID (starts with 'p.'). track_ids: List of track IDs to add. track_type: 'library-songs' for tracks from your library (default), 'songs' for catalog tracks (from search_catalog or a catalog 'pl.' playlist).

NameRequiredDescriptionDefault
track_idsYes
track_typeNolibrary-songs
playlist_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden for a mutation tool. It says nothing about required write permissions, duplicate-track handling, whether tracks are appended or replace existing entries, ordering, or what happens on invalid IDs.

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 purpose is front-loaded in one sentence, followed by compact per-parameter notes. Every line adds information; only the 'Args:' block formatting is slightly heavier than needed.

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?

With an output schema present, return values need no explanation, and all parameters are described. However, for an unannotated mutation tool the description omits duplicate handling, permission requirements, and failure behavior, leaving real gaps.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description documents all three parameters: the 'p.' prefix format for playlist_id, the array of track IDs, and the two valid track_type values with their default. This is meaningfully more than the bare schema 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 specific verb and resource ('Add tracks to an existing playlist'), making the operation immediately identifiable. The word 'existing' implicitly separates it from create_playlist, but no sibling is named explicitly.

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 track_type explanation effectively routes the agent: use 'library-songs' for library content and 'songs' for catalog tracks obtained from search_catalog or a catalog 'pl.' playlist. It lacks explicit when-not-to-use guidance or error conditions, but the context is clear.

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 in your Apple Music library.

Args: name: Name for the new playlist. description: Optional short description.

NameRequiredDescriptionDefault
nameYes
descriptionNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. Fails to disclose what the output schema contains, whether duplicate names are allowed, if the operation is idempotent, or what happens upon success/failure. 'Create' implies mutation but lacks safety/side-effect details.

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

Conciseness3/5

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

Front-loaded action statement is good, but the 'Args:' section feels like mechanical schema documentation rather than narrative description. Appropriately brief but leaves significant gaps for a mutation tool with no annotations.

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

Completeness2/5

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

Given 0% schema coverage and no annotations, the description should provide more behavioral context. While output schema exists (relieving return-value burden), missing critical context: error conditions, uniqueness constraints, and relationship to sibling tools that populate playlists.

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

Parameters4/5

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

Schema coverage is 0%, so description compensates by documenting both parameters (name and description) with their purposes. However, lacks validation constraints (max length, allowed characters) or detailed semantics beyond basic labels.

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 specific verb (Create) + resource (playlist) + scope (Apple Music library). However, fails to explicitly distinguish from sibling 'add_tracks_to_playlist' (creation vs. modification) or clarify that this creates an empty 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 explicit when-to-use guidance, prerequisites (e.g., authentication requirements), or alternatives mentioned. The description does not indicate whether to use this before or after add_tracks_to_playlist, or how it relates to get_library_playlists.

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

favorite_songA

Mark a catalog song as favorite (the star in Apple Music).

Args: song_id: Catalog song ID (use search_catalog to find it).

NameRequiredDescriptionDefault
song_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations at all, so the description carries the full behavioral burden, and it discloses almost nothing about the write: no statement of idempotency (does re-favoriting error or no-op?), no mention that unfavorite_song is the reversible inverse, and no auth or failure-mode context. For a mutation tool with zero annotation coverage this is a meaningful gap.

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

Conciseness5/5

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

One front-loaded sentence states the effect, and the Args block is limited to the single parameter that matters with its provenance. No filler, no restatement of the tool name.

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?

With an output schema present, return values need not be explained, and the lone parameter is sourced. What remains missing for a write tool with no annotations is any note on reversibility (unfavorite_song) or error/duplicate behavior, leaving the agent adequate but not fully prepared.

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

Parameters4/5

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

Schema coverage is 0% — song_id has no description in the input schema — so the description must compensate, and it does: it labels the value a *catalog* song ID (distinct from a library song ID) and points at search_catalog as the source. It leaves out the expected format/example, keeping it just under full marks.

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 and resource ("Mark a catalog song as favorite") and adds a concrete analogy ("the star in Apple Music") that removes ambiguity about effect. It does not, however, name its obvious inverse sibling unfavorite_song or otherwise differentiate itself from that pair.

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?

Gives actionable pre-call guidance by naming search_catalog as the way to obtain the required song_id, which closes the loop on the only prerequisite the tool has. There is no explicit when-not guidance (e.g. for library vs catalog songs, or vs unfavorite_song), so it stops short of a 5.

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

get_library_albumsA

List albums saved in your Apple Music library.

Args: limit: Number of albums to return, 1–100 (default 25). offset: Pagination offset (default 0).

NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It implicitly conveys read-only behavior through the word 'List' and explains pagination via the offset parameter description. However, it lacks explicit safety declarations, rate limit warnings, auth requirements, or error behavior that would be critical for a tool accessing a user's personal library.

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 optimally structured with a single clear sentence stating purpose, followed by a standard Args docstring block. No sentences are wasted; every line earns its place by providing essential parameter constraints immediately after the purpose statement.

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's simplicity (standard pagination pattern) and existence of an output schema, the description adequately covers the core functionality. However, with no annotations covering auth or safety, the description should have mentioned that this requires Apple Music authentication/authorization, which is missing. It meets minimum viability but has clear 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?

Despite 0% schema description coverage (properties only have titles, no descriptions), the Args section compensates effectively by documenting the limit constraint (1–100, default 25) and explaining offset as pagination context. This adds meaningful semantic value beyond the bare schema types.

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 opens with the specific verb 'List' followed by the resource 'albums' and clear scope 'saved in your Apple Music library'. It effectively distinguishes from siblings like get_library_songs, get_library_artists, and search_catalog by specifying this retrieves saved/library albums rather than catalog search or other media types.

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 does not mention when to prefer this over search_library for filtering, or how it relates to get_recently_played. The Args section documents parameters but does not constitute usage guidelines.

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

get_library_artistsB

List artists in your Apple Music library.

Args: limit: Number of artists to return, 1–100 (default 25). offset: Pagination offset (default 0).

NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It adds valuable behavioral context by documenting pagination constraints (limit 1–100) and offset semantics in the Args section. However, it omits sorting order, whether results include only favorited artists or all library artists, and any rate limiting considerations.

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?

Well-structured with a clear single-sentence purpose followed by an Args docstring. No redundant filler. The information density is appropriate for the tool's complexity, though the 'Args:' header is slightly formal.

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?

Adequate for a simple read tool with an output schema available, but gaps remain given zero annotations. It lacks disclosure on authentication requirements, sorting behavior, or the specific relationship between 'library artists' and catalog artists. Sufficient but not generous.

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?

Excellent compensation for 0% schema description coverage. The Args section adds specific constraints (1–100 range), semantic meaning ('Number of artists', 'Pagination offset'), and default values that the bare schema lacks. Both parameters are fully documented in text.

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?

Clear verb ('List') and resource ('artists in your Apple Music library') scopes the operation specifically to the user's personal library. While it implicitly distinguishes from siblings like get_library_albums by specifying 'artists', it does not explicitly differentiate from search_library (search vs. enumeration) or other 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?

Provides no guidance on when to use this tool versus alternatives like search_library (for searching) or get_library_songs (for individual tracks). No prerequisites (e.g., authentication requirements) or exclusion criteria are mentioned.

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

get_library_playlistsB

List all playlists in your Apple Music library.

Args: limit: Maximum number of playlists to return, 1–100 (default 100).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/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. While it identifies the scope as 'Apple Music library', it lacks crucial context: authentication requirements, whether results include collaborative/subscribed playlists, pagination behavior beyond the limit parameter, or rate limiting details.

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?

Efficiently structured with the core purpose front-loaded in the first sentence, followed by a concise Args section. No filler text; every line serves a specific informational 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?

Adequate for a simple retrieval tool with output schema present. The single parameter is well-documented, but the description misses behavioral context and usage guidance expected when no annotations are present to carry that load.

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

Parameters5/5

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

Excellent compensation for 0% schema description coverage. The Args section fully documents the 'limit' parameter with its purpose (maximum to return), valid range (1–100), and default value (100), adding substantial semantic value missing from the structured 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?

States specific verb (List), resource (playlists), and scope (Apple Music library) clearly. However, it does not explicitly distinguish from sibling 'get_playlist_tracks' (which retrieves contents) or clarify when to use this versus 'search_library'.

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?

Provides no guidance on when to use this tool versus alternatives like 'search_library' or 'get_playlist_tracks'. No prerequisites, pagination strategy (offset/cursor), or error handling guidance is mentioned.

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

get_library_songsA

List songs saved in your Apple Music library.

Args: limit: Number of songs to return, 1–100 (default 25). offset: Pagination offset for retrieving subsequent pages (default 0).

NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Explains the pagination mechanism (offset for subsequent pages) and default values, but omits read-only nature, rate limits, failure behaviors, or output format details (though output schema exists).

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?

Efficient two-part structure: single declarative sentence for purpose, followed by concise Args documentation. No redundant text or unnecessary verbosity.

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?

Appropriate for a simple read operation with 2 optional parameters. Output schema exists to document return values. Minor gap: doesn't explicitly confirm read-only status or mention total result set availability.

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

Parameters5/5

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

Schema has 0% description coverage (only titles and types). The Args section fully compensates by documenting semantics, valid ranges (1–100), default values (25, 0), and purpose (pagination) for both 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?

Clear verb (List) and specific resource (songs in Apple Music library). Implicitly distinguishes from siblings by specifying 'songs' versus albums/artists/playlists and 'library' versus catalog/recommendations, though it lacks explicit comparative guidance.

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 provided on when to prefer this over search_library, get_recently_played, or get_playlist_tracks. No mention of pagination strategy or maximum result limits beyond the parameter range.

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

get_playlist_tracksA

Get the tracks inside a playlist: one of the user's own playlists, or an Apple Music catalog playlist (editorial, themed, curator playlists).

Apple Music returns at most 100 tracks per request. Use offset to page through a large playlist, or set fetch_all=True to automatically fetch every page (up to max_tracks).

Args: playlist_id: Library playlist ID (starts with 'p.', from get_library_playlists) or catalog playlist ID (starts with 'pl.', from search_catalog or get_recommendations). limit: Maximum tracks to return for a single page, 1–100 (default 100). Ignored when fetch_all is True (always uses page size 100). offset: Pagination offset for single-page requests (default 0). Ignored when fetch_all is True. fetch_all: If True, follow pagination and return every track in the playlist (up to max_tracks). Default False. max_tracks: Safety cap when fetch_all is True, 1–5000 (default 2000).

NameRequiredDescriptionDefault
limitNo
offsetNo
fetch_allNo
max_tracksNo
playlist_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/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 load and does it well: it discloses Apple Music's 100-track-per-request ceiling, the paging semantics, the default page size, and the max_tracks cap that bounds fetch_all. It does not mention auth requirements, rate limiting, or error behavior for invalid IDs, which keeps it out of the top band.

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?

Front-loaded summary followed by a structured Args block, with no wasted preamble. Minor redundancy: the 'ignored when fetch_all is True' rule is repeated for both limit and offset, and the paging constraint is stated twice (prose and args).

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?

Covers both playlist sources, pagination in both modes, defaults, hard limits, and parameter interactions; since an output schema exists, return-value shape need not be described. An agent has everything required to call this correctly on the first attempt.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate entirely, and it does: every one of the five parameters gets a meaning, accepted range, default, and in several cases an interaction rule ('Ignored when fetch_all is True'). The playlist_id prefixes are explained with the sibling tool each comes from.

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?

Opens with a specific verb+resource ('Get the tracks inside a playlist') and immediately narrows scope to two distinct playlist classes (library 'p.' vs catalog 'pl.'), which an agent cannot infer from the name alone. It also names the sibling tools that produce each ID type, tying the tool into the surrounding toolset.

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?

Explicitly describes the two usage modes: single-page requests via offset/limit versus automatic full retrieval via fetch_all, including the max_tracks safety cap. It stops short of saying when to prefer this over alternatives like search_library or get_library_songs, but the mode selection guidance is clear and actionable.

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

get_recently_playedA

Get your recently played albums, playlists, and stations.

Note: Apple Music API returns recently-played containers (albums, playlists, stations) rather than individual tracks.

Args: limit: Number of items to return, 1–10 (default 10). The /me/recent/played endpoint rejects anything above 10.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

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 burden and does disclose a real behavioral constraint: the endpoint rejects limits above 10 and defaults to 10. The note that Apple Music returns containers rather than tracks is genuinely useful context for interpreting results. It stops short of mentioning auth/user-token requirements or ordering of results.

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 first sentence front-loads the purpose, and the constraint note follows logically. The default value is stated twice (in prose and again in the args block), a minor redundancy, but nothing is bloated.

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?

An output schema exists, so return shapes need not be explained, and the container-versus-track note adds the one behavioral wrinkle an agent would otherwise get wrong. For a single read-only parameter tool, this is essentially complete.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does: it gives the valid range (1–10), the default (10), and the reason for the cap (the endpoint rejects anything above 10). Nothing about the single parameter is left ambiguous.

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 a well-defined resource ('recently played albums, playlists, and stations'), which is inherently distinct from the library-oriented siblings (get_library_albums, get_library_songs). It does not explicitly name an alternative or scope boundary, but the qualifier 'recently played' does the disambiguating work on its own.

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 only implied: an agent can infer this is for playback history rather than library contents. There is no explicit statement of when to prefer this over get_library_* or search_catalog, and no prerequisites or exclusions are given.

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

get_recommendationsA

Get personalised Apple Music recommendations.

Args: limit: Number of recommendation groups to return, 1–10 (default 5).

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full disclosure burden. It adds 'personalised' (indicating user-specific/history-based behavior) and 'recommendation groups' (indicating the return structure). However, it omits authentication requirements, rate limits, or caching behavior for the Apple Music API.

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?

Extremely efficient at two sentences. The first states purpose; the second documents the parameter. Every element earns its place, though the 'Args:' formatting is slightly informal.

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?

Appropriate for the tool's low complexity (one optional parameter) and presence of output schema. The description successfully bridges the schema coverage gap. Could be improved by noting the personalization/auth prerequisite, but sufficient for invocation.

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

Parameters5/5

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

Excellent compensation for 0% schema coverage. The Args section explicitly documents 'limit' as 'Number of recommendation groups to return', providing semantic meaning (groups vs tracks), valid range (1–10), and default value (5) that the schema completely lacks.

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 the specific verb 'Get' and resource 'personalised Apple Music recommendations', clarifying the tool fetches discovery content. However, it lacks explicit differentiation from siblings like 'search_catalog' or 'get_library_songs' to help the agent choose between discovery methods.

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 guidelines provided for when to use this tool versus alternatives. The agent cannot determine whether to use recommendations, search, or library retrieval for music discovery without external reasoning.

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

get_song_favorite_statusB

Check which catalog songs are marked as favorite.

Args: song_ids: Comma-separated catalog song IDs (e.g. "1276760751,123").

NameRequiredDescriptionDefault
song_idsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, so the description carries the full disclosure burden. The word "Check" implies a read, but nothing is said about batch size limits, behavior for unknown or non-catalog song IDs, or whether favorites are scoped to the authenticated user. These are material gaps for a lookup 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?

The purpose is front-loaded in one sentence, followed by only the parameter format detail that the schema omits. The Python-docstring "Args:" framing is slightly verbose but nothing is redundant.

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?

An output schema exists, so return values need not be explained, and the single-parameter surface is largely covered. Still, an agent cannot tell from this definition how large a batch is safe to send or how unknown IDs are reported, which matters for a batched lookup.

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

Parameters4/5

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

Schema coverage is 0% — the property is just a bare string titled "Song Ids" — so the description must compensate, and it does: it specifies comma-separated encoding and gives a concrete example ("1276760751,123"). It stops short of stating whether catalog IDs are numeric-only or whether there is a maximum batch size.

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 and resource ("Check which catalog songs are marked as favorite") and implies batch scope via the plural song_ids. It is clearly distinguishable from the mutation siblings favorite_song/unfavorite_song by virtue of being a read, but it never names or contrasts with them explicitly.

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 versus get_library_songs or search_catalog, and no prerequisites are given. The only usage signal is implicit in the Args block, which shows the batching contract but not the decision criteria.

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

search_catalogA

Search all of Apple Music (not just the user's library) for songs, albums, artists and playlists.

Use this whenever the user asks for music that may not be in their library. For moods, genres, activities or eras (e.g. "relax", "workout", "jazz anni 60") search with types="playlists" to find Apple's themed playlists, then open one with get_playlist_tracks.

Args: query: Search term (e.g. "Radiohead", "Bohemian Rhapsody", "relax"). types: Comma-separated resource types to include. Options: songs, albums, artists, playlists (default: all four). limit: Results per type, 1–25 (default 5).

NameRequiredDescriptionDefault
limitNo
queryYes
typesNosongs,albums,artists,playlists

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the key behavioral trait: catalog-wide scope versus library scope, plus per-type result limits and defaults. It does not mention whether an Apple Music subscription is required or any rate-limit/throttling behavior, leaving a modest gap for a search against an external service.

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?

Front-loaded with the scope distinction, followed by usage strategy, then a compact Args block. Every sentence adds information the schema does not carry, so the length is earned.

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?

An output schema exists, so return-shape explanation is unnecessary. Combined with the fully documented parameters and the explicit routing to get_playlist_tracks, an agent has everything needed to invoke this correctly.

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

Parameters5/5

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

Schema coverage is 0%, yet the description fully compensates: it gives query examples, enumerates the four valid values for types with the default, and states the 1–25 range and default of 5 for limit. Nothing needed to call the tool is left undocumented.

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

Purpose5/5

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

States a specific verb (search) plus resource (songs, albums, artists, playlists) and scope (all of Apple Music, not just the user's library). This immediately distinguishes it from the sibling search_library without needing to open either schema.

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

Usage Guidelines5/5

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

Gives explicit triggering conditions ('whenever the user asks for music that may not be in their library') and a concrete strategy for mood/genre/era queries: search with types="playlists" then open results with get_playlist_tracks. It names the follow-up sibling tool explicitly.

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

search_libraryA

Search only what the user has saved in their Apple Music library.

To search all of Apple Music, use search_catalog instead.

Args: query: Search term. types: Comma-separated types. Options: library-songs, library-albums, library-artists, library-playlists limit: Results per type, 1–25 (default 10).

NameRequiredDescriptionDefault
limitNo
queryYes
typesNolibrary-songs,library-albums,library-artists,library-playlists

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/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 the full behavioral burden. It does disclose the meaningful scoping constraint (results are restricted to the user's saved library) and caps result volume via the documented 1–25 limit, but it says nothing about auth requirements, ordering/relevance of results, or behavior on empty matches.

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?

Front-loaded with the scope statement and the routing alternative, then the parameter block. Every line earns its place; the types enumeration and limit range are load-bearing, not padding.

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 three-parameter search with an output schema (so return shape needn't be explained), the definition covers scope, the alternative tool, and all parameter constraints. The only minor gap is result ordering/relevance behavior, which an agent might want when choosing between library and catalog search.

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

Parameters5/5

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

Schema coverage is 0% – the schema only names the properties with a bare integer default for limit and no enum for types. The description fully compensates: it gives the valid comma-separated values for types (library-songs/albums/artists/playlists) and the 1–25 bound with default 10 for limit, none of which appear in the 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?

States a specific verb (search) plus a precisely bounded resource (only content saved in the user's Apple Music library) and immediately contrasts it with search_catalog. An agent can distinguish this from the sibling catalog search without opening either schema.

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

Usage Guidelines5/5

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

Explicitly names the alternative and the condition that selects it: 'To search all of Apple Music, use search_catalog instead.' This is exactly the when-not-to-use guidance that differentiates the two search tools.

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

unfavorite_songA

Remove a catalog song from favorites (clears its rating).

Args: song_id: Catalog song ID.

NameRequiredDescriptionDefault
song_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/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 the behavioral burden. It usefully discloses that this is a mutation and that it clears the song's rating, but it does not mention idempotency, permissions, or what happens if the song is not currently favorited.

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 followed by one argument line. Every part is relevant and there is no wasted 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?

The tool is simple and has an output schema, so return values need not be described. However, without annotations, the description should do more to cover mutation semantics and usage context; the rating-clearing side effect is helpful but not enough for full completeness.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must fully document the single parameter. It only says 'song_id: Catalog song ID,' which identifies the domain but does not explain the expected format or how to obtain a valid catalog song ID.

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

Purpose5/5

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

The description uses a specific verb and resource: removing a catalog song from favorites. It also states the notable side effect that the song's rating is cleared, which makes its purpose distinct from favorite_song and get_song_favorite_status.

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

Usage Guidelines3/5

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

The intended use is implied clearly by 'Remove a catalog song from favorites,' but the description gives no explicit when-to-use guidance, prerequisites, or alternatives such as favorite_song or get_song_favorite_status.

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. 6 tool updatesv1.3.0
    • Addedadd_to_library
    • Addedfavorite_song
    • Changedget_playlist_tracks3 fields changed
      • addedInput schema / properties / fetch_all
        Added value: +{
        +  "default": false,
        +  "title": "Fetch All",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_tracks
        Added value: +{
        +  "default": 2000,
        +  "title": "Max Tracks",
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
    • Addedget_song_favorite_status
    • Changedsearch_catalog1 field changed
      • changedInput schema / properties / types / default
        Previous value: -"songs,albums,artists"New value: +"songs,albums,artists,playlists"
    • Addedunfavorite_song
  2. 11 tool updatesv0.1.0
    • First observedadd_tracks_to_playlist
    • First observedcreate_playlist
    • First observedget_library_albums
    • First observedget_library_artists
    • First observedget_library_playlists
    • First observedget_library_songs
    • First observedget_playlist_tracks
    • First observedget_recently_played
    • First observedget_recommendations
    • First observedsearch_catalog
    • First observedsearch_library

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation4/5

Catalog vs library search is explicitly distinguished, and most tools target clearly distinct resources (playlists, favorites, recommendations, recently played). Minor overlap remains between get_library_songs and search_library with types=library-songs, and the three "add" tools (add_to_library, add_tracks_to_playlist, favorite_song) require reading descriptions to separate.

Naming Consistency5/5

All names are snake_case and verb-first (search_, get_, add_, create_, favorite_/unfavorite_), with predictable prefixes (get_library_* for library listings, get_playlist_tracks for contents). The pattern is uniform across all 15 tools.

Tool Count5/5

15 tools sits comfortably in the well-scoped range for a music service covering catalog, library, playlists, favorites and recommendations. The four get_library_* tools are slightly repetitive but each maps to a distinct resource type.

Completeness3/5

Read/create paths are well covered, but destructive and detail operations are absent: no remove_tracks_from_playlist, delete_playlist, remove_from_library, and no way to list the tracks of a saved library album (only playlist tracks). These gaps create dead ends for common library-management workflows.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Connects Claude to Spotify for music discovery, playlist creation, and collection analysis through natural language. Enables searching songs, analyzing music diversity, creating playlists, and getting recommendations using Spotify's API.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Integrates Spotify with Claude to enable voice-controlled music playback, playlist management, and personalized recommendations through conversational AI. It provides comprehensive tools for searching tracks, managing liked songs, and analyzing listening habits.
    15
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude Code to Apple Music using only your Apple ID, without needing a developer account. Enables access to recently played, playlists, search, recommendations, and playlist creation.
    12 npm
    MIT