saveOrRemoveAlbumForUser
Add or delete albums from your Spotify "Your Music" library. Manage your saved albums by specifying album IDs and choosing save or remove actions.
Instructions
Save or remove albums from the user's "Your Music" library
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| albumIds | Yes | Array of Spotify album IDs (max 20) | |
| action | Yes | Action to perform: save or remove albums |
Implementation Reference
- src/albums.ts:192-237 (handler)The async handler function that destructures args, validates albumIds, calls Spotify API to save or remove albums based on action, and returns success or error messages.handler: async (args, _extra: SpotifyHandlerExtra) => { const { albumIds, action } = args; if (albumIds.length === 0) { return { content: [ { type: 'text', text: 'Error: No album IDs provided', }, ], }; } try { await handleSpotifyRequest(async (spotifyApi) => { return action === 'save' ? await spotifyApi.currentUser.albums.saveAlbums(albumIds) : await spotifyApi.currentUser.albums.removeSavedAlbums(albumIds); }); const actionPastTense = action === 'save' ? 'saved' : 'removed'; const preposition = action === 'save' ? 'to' : 'from'; return { content: [ { type: 'text', text: `Successfully ${actionPastTense} ${albumIds.length} album${albumIds.length === 1 ? '' : 's'} ${preposition} your library`, }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error ${action === 'save' ? 'saving' : 'removing'} albums: ${ error instanceof Error ? error.message : String(error) }`, }, ], }; } }, };
- src/albums.ts:183-191 (schema)Zod schema validating the input parameters: albumIds as array of strings (max 20) and action as 'save' or 'remove'.schema: { albumIds: z .array(z.string()) .max(20) .describe('Array of Spotify album IDs (max 20)'), action: z .enum(['save', 'remove']) .describe('Action to perform: save or remove albums'), },
- src/albums.ts:299-304 (registration)Local registration of the tool in the albumTools array which is exported for use in main index.export const albumTools = [ getAlbums, getAlbumTracks, saveOrRemoveAlbumForUser, checkUsersSavedAlbums, ];
- src/index.ts:12-14 (registration)Global registration where all tools including albumTools are registered to the MCP server via server.tool() calls.[...readTools, ...playTools, ...albumTools].forEach((tool) => { server.tool(tool.name, tool.description, tool.schema, tool.handler); });