Audius MCP Server

// Music discovery prompt export const discoverMusicPrompt = { name: 'discover-music', description: 'Get personalized music recommendations based on your preferences', arguments: [ { name: 'genre', description: 'Music genre(s) you enjoy (e.g., Electronic, Hip-Hop, Jazz)', required: true, }, { name: 'artist', description: 'Artist(s) you like (optional)', required: false, }, { name: 'mood', description: 'Current mood (e.g., Energetic, Relaxing, Focused, Ambient)', required: false, }, { name: 'bpmRange', description: 'Preferred BPM range (e.g., "70-90" for downtempo, "120-140" for dance)', required: false, }, { name: 'underground', description: 'Whether to include underground tracks from emerging artists', required: false, type: 'boolean' }, { name: 'discoveryMode', description: 'Type of discovery: trending, new, or similar (based on artist)', required: false, enum: ['trending', 'new', 'similar'] } ], }; // Handler for discover-music prompt export const handleDiscoverMusicPrompt = (args: { genre: string; artist?: string; mood?: string; bpmRange?: string; underground?: boolean; discoveryMode?: 'trending' | 'new' | 'similar'; }) => { // Parse BPM range if provided let bpmMin: number | undefined; let bpmMax: number | undefined; if (args.bpmRange) { const parts = args.bpmRange.split('-'); if (parts.length === 2) { bpmMin = parseInt(parts[0], 10); bpmMax = parseInt(parts[1], 10); if (isNaN(bpmMin)) bpmMin = undefined; if (isNaN(bpmMax)) bpmMax = undefined; } } // Build a user query for discovery let userMessage = `I'm looking for music recommendations on Audius. `; userMessage += `I enjoy ${args.genre} music. `; if (args.artist) { userMessage += `Some artists I like are ${args.artist}. `; } if (args.mood) { userMessage += `I'm in a ${args.mood} mood right now. `; } if (args.bpmRange) { userMessage += `I prefer music with a tempo in the ${args.bpmRange} BPM range. `; } if (args.underground) { userMessage += `I'm interested in discovering underground or emerging artists. `; } if (args.discoveryMode) { switch (args.discoveryMode) { case 'trending': userMessage += `I'd like to hear what's trending right now. `; break; case 'new': userMessage += `I'd like to discover new releases. `; break; case 'similar': userMessage += `I'd like to find artists similar to the ones I mentioned. `; break; } } userMessage += `Can you recommend some tracks or artists on Audius that I might enjoy? Please provide specific recommendations I can listen to.`; // Add instructions on tools to use const systemMessage = ` To fulfill this request, use these tools to provide personalized music recommendations: - If specific artists were mentioned, use the 'similar-artists' tool to find related artists - Use 'advanced-search' to find tracks matching the user's genre and mood preferences - Use 'trending-discovery' to find popular tracks in the user's preferred genre - For underground music discovery, use 'trending-discovery' with underground=true - Use 'get-track' to get detailed information about specific tracks - Use 'get-user' to get information about artists Make recommendations specific and varied. Include track names, artist names, and brief descriptions of why they match the user's preferences. `; // Create messages for the prompt const messages = [ { role: 'system', content: { type: 'text', text: systemMessage, }, }, { role: 'user', content: { type: 'text', text: userMessage, }, }, ]; return { messages, }; };