Skip to main content
Glama
index.ts2.31 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { Logger } from "./logger.js"; import { AuthManager } from "./auth.js"; import { SpotifyClient } from "./spotify-client.js"; import { registerAllTools } from "./tools/declarations/index.js"; import { registerAllPrompts } from "./prompts/declarations/index.js"; // Global instances let logger: Logger; let authManager: AuthManager; let spotifyClient: SpotifyClient; const SPOTIFY_CLIENT_ID = process.env.SPOTIFY_CLIENT_ID; const SPOTIFY_CLIENT_SECRET = process.env.SPOTIFY_CLIENT_SECRET; const SPOTIFY_REDIRECT_URI = process.env.SPOTIFY_REDIRECT_URI || "http://127.0.0.1:15732/callback"; if (!SPOTIFY_CLIENT_ID) { console.error("Error: SPOTIFY_CLIENT_ID environment variable is required"); process.exit(1); } if (!SPOTIFY_CLIENT_SECRET) { console.error("Error: SPOTIFY_CLIENT_SECRET environment variable is required"); process.exit(1); } // Create server instance const server = new McpServer({ name: "mcp-spotify", version: "1.0.0", }); // Start the server async function main() { // Initialize logger logger = await Logger.create(); await logger.info("Spotify MCP Server starting..."); // Initialize auth manager (both CLIENT_ID and CLIENT_SECRET are checked above) authManager = new AuthManager( SPOTIFY_CLIENT_ID!, SPOTIFY_CLIENT_SECRET!, SPOTIFY_REDIRECT_URI, logger ); await authManager.initialize(); // Check if authorization is needed if (!authManager.hasValidToken()) { await logger.info("No valid token found. Starting authorization flow..."); await authManager.authorize(); } // Initialize Spotify client spotifyClient = new SpotifyClient(authManager, logger); // Register all tools and prompts registerAllTools(server, spotifyClient); registerAllPrompts(server); // Start MCP server const transport = new StdioServerTransport(); await server.connect(transport); await logger.info("Spotify MCP Server running on stdio"); } main().catch(async (error) => { if (logger) { await logger.error(`Fatal error in main(): ${error.message}`); } else { console.error("Fatal error in main():", error); } process.exit(1); });

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