Skip to main content
Glama
marcelmarais

Spotify MCP Server

by marcelmarais

getNowPlaying

Retrieve details about the currently playing Spotify track, including device and volume information, for real-time playback monitoring.

Instructions

Get information about the currently playing track on Spotify, including device and volume info

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Full definition of the getNowPlaying tool, including its name, description, empty input schema, and the handler function that fetches the current Spotify playback state, checks if it's a track, and returns formatted information about the track, device, volume, shuffle, and repeat status.
    const getNowPlaying: tool<Record<string, never>> = {
      name: 'getNowPlaying',
      description:
        'Get information about the currently playing track on Spotify, including device and volume info',
      schema: {},
      handler: async (_args, _extra: SpotifyHandlerExtra) => {
        try {
          const playback = await handleSpotifyRequest(async (spotifyApi) => {
            return await spotifyApi.player.getPlaybackState();
          });
    
          if (!playback?.item) {
            return {
              content: [
                {
                  type: 'text',
                  text: 'Nothing is currently playing on Spotify',
                },
              ],
            };
          }
    
          const item = playback.item;
    
          if (!isTrack(item)) {
            return {
              content: [
                {
                  type: 'text',
                  text: 'Currently playing item is not a track (might be a podcast episode)',
                },
              ],
            };
          }
    
          const artists = item.artists.map((a) => a.name).join(', ');
          const album = item.album.name;
          const duration = formatDuration(item.duration_ms);
          const progress = formatDuration(playback.progress_ms || 0);
          const isPlaying = playback.is_playing;
    
          const device = playback.device;
          const deviceInfo = device
            ? `${device.name} (${device.type})`
            : 'Unknown device';
          const volume =
            device?.volume_percent !== null && device?.volume_percent !== undefined
              ? `${device.volume_percent}%`
              : 'N/A';
          const shuffle = playback.shuffle_state ? 'On' : 'Off';
          const repeat = playback.repeat_state || 'off';
    
          return {
            content: [
              {
                type: 'text',
                text:
                  `# Currently ${isPlaying ? 'Playing' : 'Paused'}\n\n` +
                  `**Track**: "${item.name}"\n` +
                  `**Artist**: ${artists}\n` +
                  `**Album**: ${album}\n` +
                  `**Progress**: ${progress} / ${duration}\n` +
                  `**ID**: ${item.id}\n\n` +
                  `**Device**: ${deviceInfo}\n` +
                  `**Volume**: ${volume}\n` +
                  `**Shuffle**: ${shuffle} | **Repeat**: ${repeat}`,
              },
            ],
          };
        } catch (error) {
          return {
            content: [
              {
                type: 'text',
                text: `Error getting current track: ${
                  error instanceof Error ? error.message : String(error)
                }`,
              },
            ],
          };
        }
      },
    };
  • src/read.ts:603-612 (registration)
    Local registration: getNowPlaying is included in the exported readTools array, grouping read-related Spotify tools.
    export const readTools = [
      searchSpotify,
      getNowPlaying,
      getMyPlaylists,
      getPlaylistTracks,
      getRecentlyPlayed,
      getUsersSavedTracks,
      getQueue,
      getAvailableDevices,
    ];
  • src/index.ts:5-14 (registration)
    Main registration: Imports readTools (which includes getNowPlaying) and registers all tools (read, play, album) on the MCP server using server.tool() for each.
    import { readTools } from './read.js';
    
    const server = new McpServer({
      name: 'spotify-controller',
      version: '1.0.0',
    });
    
    [...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