saveOrRemoveAlbumForUser
Manage Spotify albums in the user's "Your Music" library by saving or removing up to 20 album IDs at a time. Specify the action (save/remove) to update the library directly.
Instructions
Save or remove albums from the user's "Your Music" library
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform: save or remove albums | |
| albumIds | Yes | Array of Spotify album IDs (max 20) |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"action": {
"description": "Action to perform: save or remove albums",
"enum": [
"save",
"remove"
],
"type": "string"
},
"albumIds": {
"description": "Array of Spotify album IDs (max 20)",
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
}
},
"required": [
"albumIds",
"action"
],
"type": "object"
}
Implementation Reference
- src/albums.ts:192-237 (handler)The handler function that destructures args, validates albumIds length, 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 defining the 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'), },
- src/albums.ts:299-304 (registration)Local registration of saveOrRemoveAlbumForUser within the albumTools export array.export const albumTools = [ getAlbums, getAlbumTracks, saveOrRemoveAlbumForUser, checkUsersSavedAlbums, ];
- src/index.ts:12-14 (registration)Top-level registration where tools from albumTools (including saveOrRemoveAlbumForUser) are registered to the MCP server using server.tool().[...readTools, ...playTools, ...albumTools].forEach((tool) => { server.tool(tool.name, tool.description, tool.schema, tool.handler); });