Skip to main content
Glama

playMusic

Start playing Spotify music by specifying tracks, albums, artists, or playlists using Spotify URIs or IDs. Control playback on specific devices through the Spotify MCP Server.

Instructions

Start playing a Spotify track, album, artist, or playlist

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
uriNoThe Spotify URI to play (overrides type and id)
typeNoThe type of item to play
idNoThe Spotify ID of the item to play
deviceIdNoThe Spotify device ID to play on

Implementation Reference

  • Handler function for playMusic tool that constructs Spotify URI from inputs and calls Spotify API to start/resume playback on specified device.
    handler: async (args, _extra: SpotifyHandlerExtra) => { const { uri, type, id, deviceId } = args; if (!(uri || (type && id))) { return { content: [ { type: 'text', text: 'Error: Must provide either a URI or both a type and ID', isError: true, }, ], }; } let spotifyUri = uri; if (!spotifyUri && type && id) { spotifyUri = `spotify:${type}:${id}`; } await handleSpotifyRequest(async (spotifyApi) => { const device = deviceId || ''; if (!spotifyUri) { await spotifyApi.player.startResumePlayback(device); return; } if (type === 'track') { await spotifyApi.player.startResumePlayback(device, undefined, [ spotifyUri, ]); } else { await spotifyApi.player.startResumePlayback(device, spotifyUri); } }); return { content: [ { type: 'text', text: `Started playing ${type || 'music'} ${id ? `(ID: ${id})` : ''}`, }, ], }; },
  • Zod input schema for playMusic tool defining optional parameters: uri, type, id, deviceId.
    schema: { uri: z .string() .optional() .describe('The Spotify URI to play (overrides type and id)'), type: z .enum(['track', 'album', 'artist', 'playlist']) .optional() .describe('The type of item to play'), id: z.string().optional().describe('The Spotify ID of the item to play'), deviceId: z .string() .optional() .describe('The Spotify device ID to play on'), },
  • src/index.ts:12-14 (registration)
    Registers the playMusic tool (via playTools array) with the MCP server by calling server.tool() for each tool in the imported arrays.
    [...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/makesh-kumar/spotify-mcp-server'

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