Apple Music MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PYTHONPATH | Yes | Path to the applemusic-mcp src directory (e.g. /Users/you/applemusic-mcp/src) so the applemusic_mcp package can be imported. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| now_playingA | What's playing right now, plus player state, volume, shuffle and repeat. |
| playbackC | Control playback. Returns the player state afterwards. |
| set_player_optionsA | Set volume (0-100), shuffle on/off, and/or repeat mode. Omit what you don't want to change. |
| search_libraryC | Search the user's Music library. Returns tracks with ids you can play or add to playlists. |
| play_trackC | Play a specific track by its id (from search_library or get_playlist_tracks). |
| search_and_playB | Search the library and immediately play the best match. Also returns other candidates. |
| list_playlistsA | List the user's own playlists (regular and smart), with track counts. |
| get_playlist_tracksC | List tracks in a playlist (by exact name). |
| play_playlistB | Start playing a playlist by name, optionally setting shuffle first. |
| create_playlistB | Create a new empty playlist. Fails if one with that name already exists. |
| add_to_playlistB | Add tracks (by id) to a playlist. Tracks already in the playlist are skipped. |
| remove_from_playlistA | Remove tracks (by id) from a playlist. Does not delete them from the library. |
| set_favoriteA | Mark (or unmark) tracks as Favorite, one at a time in the given order. gap_sec waits between tracks so each gets a distinct timestamp. Keep calls under ~40 tracks when using a gap so the call doesn't time out. |
| favorite_playlistA | Mark a playlist's tracks as Favorite one by one, in batches. With reverse=true it walks from the LAST track toward the first. |
| compare_playlistsB | Tracks in |
| listening_statsA | Analyze the library: play counts, favorite artists/albums/genres, recent activity. Play counts are lifetime totals tracked by the Music app (no per-period history). Library data is cached for 5 minutes; pass refresh=true to re-read it. |
| artist_statsC | Everything about one artist in the library: track count, total plays, albums, top songs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 17 tools
Most tools target distinct resources/actions (now_playing vs playback vs set_player_options; search_library vs search_and_play). Minor overlap exists between set_favorite and favorite_playlist (single vs batch) and between playback and set_player_options for player state, but descriptions clarify the boundaries well.
Consistent snake_case throughout, but the convention mixes verb_noun (play_track, create_playlist, add_to_playlist) with noun-first/state names (now_playing, playback, listening_stats, artist_stats). Readable and predictable despite the minor stylistic split.
17 tools is slightly above the ideal 3-15 sweet spot, but each covers a distinct facet of music playback, library search, playlists, favorites, and stats, so it earns its place rather than feeling padded.
Strong coverage of playback, search, playlist lifecycle (create/list/get/add/remove/play), favorites, and analytics. Minor gaps: no delete/rename playlist and no explicit queue management, but agents can work around these.