saveOrRemoveAlbumForUser
Add or delete albums from your Spotify library 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:177-237 (handler)Full tool object definition including the handler function that implements the logic to save or remove albums from the user's Spotify library.const saveOrRemoveAlbumForUser: tool<{ albumIds: z.ZodArray<z.ZodString>; action: z.ZodEnum<['save', 'remove']>; }> = { name: 'saveOrRemoveAlbumForUser', description: 'Save or remove albums from the user\'s "Your Music" library', 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'), }, 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:299-304 (registration)The saveOrRemoveAlbumForUser tool is included in the albumTools array for export.export const albumTools = [ getAlbums, getAlbumTracks, saveOrRemoveAlbumForUser, checkUsersSavedAlbums, ];
- src/index.ts:12-14 (registration)Registration of all tools, including saveOrRemoveAlbumForUser from albumTools, to the MCP server using server.tool().[...readTools, ...playTools, ...albumTools].forEach((tool) => { server.tool(tool.name, tool.description, tool.schema, tool.handler); });
- src/albums.ts:183-191 (schema)Zod schema defining input parameters: albumIds (array of strings, max 20) and action (enum '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'), },