Native Apple Music MCP server for macOS. Provides control and querying of Apple Music via the Music.app using AppleScript and Apple Events.
Server defines 6 tools with explicit schemas and descriptions. Naming follows verb_noun convention (music_get_state, music_playback, music_search, music_playlists, music_preferences, music_library). Descriptions are present and moderately detailed (avg ~150 chars). Input schemas are well-structured with enums and type constraints. However, output schemas are NOT documented, LLMs cannot predict response structure. Parameter descriptions are adequate but lack dependency hints and format guidance. No error handling guidance visible in tool definitions. Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present, which is good. Missing: pagination guidance, response field documentation, recovery hints for failures.
Get the current playback state of Apple Music. Returns track info, player state, volume, shuffle, repeat, and position.
Browse and search your music library: tracks, albums, artists, genres, recently added, recently played.
Control Music.app playback. Actions: open, play, pause, toggle, stop, next, previous, restart_current, seek_absolute, seek_relative, play_track, play_album, play_artist, play_playlist, play_url, reveal.
Manage Music playlists: list, get, create, rename, delete, add/remove tracks, copy, folders.
Get or set Music.app preferences: volume, shuffle, repeat, and AirPlay output.
Search your Music library for tracks, albums, artists, or playlists.
Output schemas not documented. LLMs cannot predict response structure, fields, or types. Forces agents to guess what data is returned and risk parsing failures.
No error handling guidance in tool descriptions. When a tool fails (e.g., track not found, playback error), LLM has no recovery path. Descriptions should include 'If X fails, try Y' hints.
music_search and music_library lack pagination guidance. No mention of limit behavior, result caps, or how to fetch additional results. Baseline: tools returning lists should document pagination.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | <=2025-11-25 | v2 |
Parameter descriptions lack format/constraint details. E.g., 'target_id' in music_playback says 'Persistent ID' but does not explain format, length, or how to obtain it. Should reference search tools.
music_library 'action' parameter has 7 enum values but no guidance on which to use when. Descriptions should clarify: 'Use search for keyword lookup, recently_added for new tracks, list_* for full browsing.'