Skip to main content
Glama
server.ts5.17 kB
import { McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js'; import { z } from 'zod'; import { config } from './config.js'; import { initToolsets, registerResources } from './toolsets/index.js'; // Import resource handlers import { handleTrackResource } from './resources/tracks.js'; import { handleUserResource } from './resources/users.js'; import { handlePlaylistResource, handleAlbumResource } from './resources/playlists.js'; // Import prompt handlers import { handleDiscoverMusicPrompt } from './prompts/music-search.js'; import { handleTrackAnalysisPrompt } from './prompts/track-info.js'; import { handleArtistProfilePrompt } from './prompts/artist-profile.js'; import { handleMusicCreationPrompt } from './prompts/music-creation.js'; import { handlePlaylistCreationPrompt } from './prompts/playlist-creation.js'; import { handleMessagingPrompt } from './prompts/messaging.js'; import { handleAnalyticsPrompt } from './prompts/analytics.js'; import { handleBlockchainPrompt } from './prompts/blockchain.js'; import { handleMonetizationPrompt } from './prompts/monetization.js'; import { handleNotificationsPrompt } from './prompts/notifications.js'; /** * Create and configure the MCP server */ export const createServer = (options = { enabledToolsets: ['all'], readOnly: false }) => { // Initialize server with McpServer const server = new McpServer({ name: config.server.name, version: config.server.version, }); // Register Resources // Track resource server.resource( 'track', new ResourceTemplate('audius://track/{id}', { list: undefined }), handleTrackResource ); // User resource server.resource( 'user', new ResourceTemplate('audius://user/{id}', { list: undefined }), handleUserResource ); // Playlist resource server.resource( 'playlist', new ResourceTemplate('audius://playlist/{id}', { list: undefined }), handlePlaylistResource ); // Album resource server.resource( 'album', new ResourceTemplate('audius://album/{id}', { list: undefined }), handleAlbumResource ); // Initialize and register toolsets const toolsetGroup = initToolsets( options.enabledToolsets || ['all'], options.readOnly || false ); // Register all enabled tools with the server toolsetGroup.registerTools(server); // Register Prompts server.prompt( 'discover-music', { query: z.string(), artist: z.string().optional(), mood: z.string().optional(), bpmRange: z.string().optional(), underground: z.string().optional(), // Convert boolean to string discoveryMode: z.string().optional() // Convert enum to string }, handleDiscoverMusicPrompt ); server.prompt( 'track-analysis', { trackId: z.string() }, handleTrackAnalysisPrompt ); server.prompt( 'artist-profile', { userId: z.string(), includeConnections: z.string().optional(), // Convert boolean to string includePopularContent: z.string().optional() // Convert boolean to string }, handleArtistProfilePrompt ); server.prompt( 'music-creation', { trackTitle: z.string(), userId: z.string(), genre: z.string().optional(), mood: z.string().optional(), creationGoal: z.string().optional() // Convert enum to string }, handleMusicCreationPrompt ); server.prompt( 'playlist-creation', { userId: z.string(), playlistName: z.string().optional(), playlistId: z.string().optional(), isAlbum: z.string().optional(), // Convert boolean to string genre: z.string().optional(), action: z.string().optional() // Convert enum to string }, handlePlaylistCreationPrompt ); server.prompt( 'messaging', { userId: z.string(), recipientId: z.string().optional(), initialMessage: z.string().optional(), purpose: z.string().optional() // Convert enum to string }, handleMessagingPrompt ); server.prompt( 'analytics', { userId: z.string().optional(), trackId: z.string().optional(), insightType: z.string().optional(), // Convert enum to string timePeriod: z.string().optional() // Convert enum to string }, handleAnalyticsPrompt ); server.prompt( 'blockchain', { userId: z.string().optional(), walletAddress: z.string().optional(), blockchain: z.string().optional(), // Convert enum to string focus: z.string().optional() // Convert enum to string }, handleBlockchainPrompt ); server.prompt( 'monetization', { userId: z.string().optional(), trackId: z.string().optional(), walletAddress: z.string().optional(), monetizationType: z.string().optional() // Convert enum to string }, handleMonetizationPrompt ); server.prompt( 'notifications', { userId: z.string(), notificationType: z.string().optional(), limit: z.string().optional(), markAsRead: z.string().optional() }, handleNotificationsPrompt ); return server; };

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/glassBead-tc/audius-mcp-atris'

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