Skip to main content
Glama
playback-tool.ts2.07 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; import { SpotifyClient } from "../../spotify-client.js"; import { controlPlayback, getPlaybackState, formatPlaybackState, } from "../playback.js"; export function registerPlaybackTools(server: McpServer, spotifyClient: SpotifyClient) { // Playback Control Tool server.tool( "control_playback", "Control Spotify playback (play, pause, next, previous, seek)", { action: z .enum(["play", "pause", "next", "previous", "seek"]) .describe("Playback action to perform"), uri: z .string() .optional() .describe("Spotify URI to play (for 'play' action)"), position_ms: z .number() .optional() .describe("Position in milliseconds (for 'seek' action)"), }, async ({ action, uri, position_ms }) => { try { const result = await controlPlayback(spotifyClient, { action, uri, position_ms, }); return { content: [{ type: "text", text: result }], }; } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown error"; return { content: [{ type: "text", text: `Error controlling playback: ${errorMessage}` }], isError: true, }; } } ); // Get Playback State Tool server.tool( "get_playback_state", "Get current Spotify playback state and now playing information", {}, async () => { try { const state = await getPlaybackState(spotifyClient); const formatted = formatPlaybackState(state); return { content: [{ type: "text", text: formatted }], }; } catch (error) { const errorMessage = error instanceof Error ? error.message : "Unknown error"; return { content: [{ type: "text", text: `Error getting playback state: ${errorMessage}` }], isError: true, }; } } ); }

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/nicklaustrup/mcp-spotify'

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