Skip to main content
Glama

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

NameRequiredDescriptionDefault
actionYesAction to perform: save or remove albums
albumIdsYesArray 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

  • 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) }`, }, ], }; } }, };
  • 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); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/marcelmarais/spotify-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server