Skip to main content
Glama
index.ts22.4 kB
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { ToolsetGroup, Toolset, createServerTool, jsonSchemaToZod } from './core.js'; // Import all tools and schemas import { getTrack, getTrackSchema, searchTracks, searchTracksSchema, getTrendingTracks, getTrendingTracksSchema, getTrackComments, getTrackCommentsSchema, getTrackStreamUrl, getTrackStreamUrlSchema, streamTrack, streamTrackSchema, openTrackInDesktop, openTrackInDesktopSchema, getBulkTracks, getBulkTracksSchema, getTrackDownload, getTrackDownloadSchema, getTrackInspect, getTrackInspectSchema, getTrackStems, getTrackStemsSchema, } from '../tools/tracks.js'; import { getUser, getUserSchema, searchUsers, searchUsersSchema, getUserTracks, getUserTracksSchema, getBulkUsers, getBulkUsersSchema, getAIAttributedTracksByUserHandle, getAIAttributedTracksByUserHandleSchema, getLibraryTracks, getLibraryTracksSchema, getLibraryAlbums, getLibraryAlbumsSchema, getLibraryPlaylists, getLibraryPlaylistsSchema, getAuthorizedApps, getAuthorizedAppsSchema, getConnectedWallets, getConnectedWalletsSchema, getDeveloperApps, getDeveloperAppsSchema, getTrackPurchasers, getTrackPurchasersSchema, getTrackRemixers, getTrackRemixersSchema, getRelatedUsers, getRelatedUsersSchema, getUserTags, getUserTagsSchema } from '../tools/users.js'; import { getPlaylist, getPlaylistSchema, getAlbum, getAlbumSchema, getTrendingPlaylists, getTrendingPlaylistsSchema, getBulkPlaylists, getBulkPlaylistsSchema } from '../tools/playlists.js'; import { getAlbum as getAlbumDetails, getAlbumSchema as getAlbumDetailsSchema, getAlbumTracks, getAlbumTracksSchema, getUserAlbums, getUserAlbumsSchema } from '../tools/albums.js'; import { resolve, resolveSchema, getSdkVersion, getSdkVersionSchema } from '../tools/core.js'; import { initiateOAuth, initiateOAuthSchema, verifyToken, verifyTokenSchema, exchangeCode, exchangeCodeSchema } from '../tools/oauth.js'; import { searchAll, searchAllSchema, advancedSearch, advancedSearchSchema, trendingDiscovery, trendingDiscoverySchema, similarArtists, similarArtistsSchema } from '../tools/search.js'; import { getRecommendations, getRecommendationsSchema, getUserHistory, getUserHistorySchema, getTrendingByGenre, getTrendingByGenreSchema } from '../tools/discovery.js'; import { getUserFavorites, userFavoritesSchema, getUserReposts, userRepostsSchema, getUserFollowers, userFollowersSchema, getUserFollowing, userFollowingSchema, isFollowing, isFollowingSchema, getTrackFavorites, trackFavoritesSchema, getTrackReposts, trackRepostsSchema, followUser, followUserSchema, favoriteTrack, favoriteTrackSchema } from '../tools/social.js'; import { addTrackComment, addTrackCommentSchema, deleteTrackComment, deleteTrackCommentSchema } from '../tools/comments.js'; import { uploadTrack, uploadTrackSchema, updateTrack, updateTrackSchema, deleteTrack, deleteTrackSchema } from '../tools/track-management.js'; import { createPlaylist, createPlaylistSchema, updatePlaylist, updatePlaylistSchema, deletePlaylist, deletePlaylistSchema, addTracksToPlaylist, addTracksToPlaylistSchema, removeTrackFromPlaylist, removeTrackFromPlaylistSchema, reorderPlaylistTracks, reorderPlaylistTracksSchema } from '../tools/playlist-management.js'; import { sendMessage, sendMessageSchema, getMessages, getMessagesSchema, getMessageThreads, getMessageThreadsSchema, markMessageRead, markMessageReadSchema } from '../tools/messaging.js'; import { getTrackListenCounts, trackListenCountsSchema, getUserTrackListenCounts, userTrackListenCountsSchema, getTrackTopListeners, trackTopListenersSchema, getTrackListenerInsights, trackListenerInsightsSchema, getUserPlayMetrics, userPlayMetricsSchema, getTrackMonthlyTrending, trackMonthlyTrendingSchema, getUserSupporters, userSupportersSchema, getUserSupporting, userSupportingSchema } from '../tools/analytics.js'; import { getUserWallets, userWalletsSchema, getTransactionHistory, transactionHistorySchema, getAvailableChallenges, availableChallengesSchema, getUserClaimableTokens, userClaimableTokensSchema, claimTokens, claimTokensSchema, getTokenBalance, tokenBalanceSchema, sendTokens, sendTokensSchema } from '../tools/blockchain.js'; import { getTrackAccessGates, trackAccessGatesSchema, checkNftAccess, checkNftAccessSchema, getNftGatedSignature, nftGatedSignatureSchema, getPurchaseOptions, purchaseOptionsSchema, checkPurchaseAccess, checkPurchaseAccessSchema, getSupportedPaymentTokens, supportedPaymentTokensSchema, getUsdcGateInfo, usdcGateInfoSchema, sendTip, sendTipSchema, getSentTips, getSentTipsSchema, getReceivedTips, getReceivedTipsSchema, getUserTipStats, userTipStatsSchema, purchaseTrack, purchaseTrackSchema } from '../tools/monetization.js'; import { getNotifications, getNotificationsSchema, getNotificationSettings, notificationSettingsSchema, updateNotificationSettings, updateNotificationSettingsSchema, markNotificationsRead, markNotificationsReadSchema, markAllNotificationsRead, markAllNotificationsReadSchema, getAnnouncementNotifications, announcementNotificationsSchema, getMilestoneNotifications, milestoneNotificationsSchema, getNotificationCounts, notificationCountsSchema, getNotificationHistory, notificationHistorySchema, sendNotification, sendNotificationSchema } from '../tools/notifications.js'; // Default toolsets to enable export const DefaultToolsets = ['all']; /** * Initialize all toolsets and return the toolset group * @param enabledToolsets List of toolsets to enable * @param readOnly Whether to operate in read-only mode */ export function initToolsets(enabledToolsets: string[] = DefaultToolsets, readOnly: boolean = false): ToolsetGroup { // Create a new toolset group const toolsetGroup = new ToolsetGroup(readOnly); // 1. Tracks Toolset const trackTools = new Toolset('tracks', 'Audius Track-related tools'); // Read-only track tools trackTools.addReadTools( createServerTool('get-track', getTrackSchema, getTrack, true, 'Get track details by ID'), createServerTool('search-tracks', searchTracksSchema, searchTracks, true, 'Search for tracks by query'), createServerTool('get-trending-tracks', getTrendingTracksSchema, getTrendingTracks, true, 'Get trending tracks'), createServerTool('get-track-comments', getTrackCommentsSchema, getTrackComments, true, 'Get comments for a track'), createServerTool('get-track-stream-url', getTrackStreamUrlSchema, getTrackStreamUrl, true, 'Get stream URL for a track'), createServerTool("stream-track", streamTrackSchema, streamTrack, true, 'Stream audio data for a track'), createServerTool("open-track-in-desktop", openTrackInDesktopSchema, openTrackInDesktop, true, 'Open a track in Audius Desktop'), createServerTool('get-bulk-tracks', getBulkTracksSchema, getBulkTracks, true, 'Get multiple tracks by IDs'), createServerTool('get-track-download', getTrackDownloadSchema, getTrackDownload, true, 'Get download information for a track'), createServerTool('get-track-inspect', getTrackInspectSchema, getTrackInspect, true, 'Get technical inspection details for a track'), createServerTool('get-track-stems', getTrackStemsSchema, getTrackStems, true, 'Get stems/components for a track') ); // 2. Track Management Toolset (write operations) const trackManagementTools = new Toolset('track-management', 'Audius Track management tools'); trackManagementTools.addWriteTools( createServerTool('upload-track', uploadTrackSchema, uploadTrack, false, 'Upload a new track'), createServerTool('update-track', updateTrackSchema, updateTrack, false, 'Update an existing track'), createServerTool('delete-track', deleteTrackSchema, deleteTrack, false, 'Delete a track') ); // 3. Users Toolset const userTools = new Toolset('users', 'Audius User-related tools'); userTools.addReadTools( createServerTool('get-user', getUserSchema, getUser, true, 'Get user details by ID'), createServerTool('search-users', searchUsersSchema, searchUsers, true, 'Search for users'), createServerTool('get-user-tracks', getUserTracksSchema, getUserTracks, true, 'Get tracks for a user'), createServerTool('get-bulk-users', getBulkUsersSchema, getBulkUsers, true, 'Get multiple users by IDs'), createServerTool('get-ai-attributed-tracks-by-handle', getAIAttributedTracksByUserHandleSchema, getAIAttributedTracksByUserHandle, true, 'Get AI-attributed tracks by user handle'), createServerTool('get-library-tracks', getLibraryTracksSchema, getLibraryTracks, true, 'Get library tracks for a user'), createServerTool('get-library-albums', getLibraryAlbumsSchema, getLibraryAlbums, true, 'Get library albums for a user'), createServerTool('get-library-playlists', getLibraryPlaylistsSchema, getLibraryPlaylists, true, 'Get library playlists for a user'), createServerTool('get-authorized-apps', getAuthorizedAppsSchema, getAuthorizedApps, true, 'Get authorized apps for a user'), createServerTool('get-connected-wallets', getConnectedWalletsSchema, getConnectedWallets, true, 'Get connected wallets for a user'), createServerTool('get-developer-apps', getDeveloperAppsSchema, getDeveloperApps, true, 'Get developer apps for a user'), createServerTool('get-track-purchasers', getTrackPurchasersSchema, getTrackPurchasers, true, 'Get users who purchased a track'), createServerTool('get-track-remixers', getTrackRemixersSchema, getTrackRemixers, true, 'Get users who remixed a track'), createServerTool('get-related-users', getRelatedUsersSchema, getRelatedUsers, true, 'Get users related to a given user'), createServerTool('get-user-tags', getUserTagsSchema, getUserTags, true, 'Get tags associated with a user') ); // 4. Playlists Toolset const playlistTools = new Toolset('playlists', 'Audius Playlist-related tools'); playlistTools.addReadTools( createServerTool('get-playlist', getPlaylistSchema, getPlaylist, true, 'Get playlist details'), createServerTool('get-album', getAlbumSchema, getAlbum, true, 'Get album details'), createServerTool('get-trending-playlists', getTrendingPlaylistsSchema, getTrendingPlaylists, true, 'Get trending playlists'), createServerTool('get-bulk-playlists', getBulkPlaylistsSchema, getBulkPlaylists, true, 'Get multiple playlists by IDs') ); // 5. Albums Toolset const albumTools = new Toolset('albums', 'Audius Album-specific tools'); albumTools.addReadTools( createServerTool('get-album-details', getAlbumDetailsSchema, getAlbumDetails, true, 'Get album details'), createServerTool('get-album-tracks', getAlbumTracksSchema, getAlbumTracks, true, 'Get tracks in an album'), createServerTool('get-user-albums', getUserAlbumsSchema, getUserAlbums, true, 'Get albums for a user') ); // 6. Playlist Management Toolset const playlistManagementTools = new Toolset('playlist-management', 'Audius Playlist management tools'); playlistManagementTools.addWriteTools( createServerTool('create-playlist', createPlaylistSchema, createPlaylist, false, 'Create a new playlist'), createServerTool('update-playlist', updatePlaylistSchema, updatePlaylist, false, 'Update an existing playlist'), createServerTool('delete-playlist', deletePlaylistSchema, deletePlaylist, false, 'Delete a playlist'), createServerTool('add-tracks-to-playlist', addTracksToPlaylistSchema, addTracksToPlaylist, false, 'Add tracks to a playlist'), createServerTool('remove-track-from-playlist', removeTrackFromPlaylistSchema, removeTrackFromPlaylist, false, 'Remove a track from a playlist'), createServerTool('reorder-playlist-tracks', reorderPlaylistTracksSchema, reorderPlaylistTracks, false, 'Reorder tracks in a playlist') ); // 7. Search Toolset const searchTools = new Toolset('search', 'Audius Search tools'); searchTools.addReadTools( createServerTool('search-all', searchAllSchema, searchAll, true, 'Search across all Audius content'), createServerTool('advanced-search', advancedSearchSchema, advancedSearch, true, 'Advanced search with filters'), createServerTool('trending-discovery', trendingDiscoverySchema, trendingDiscovery, true, 'Discover trending content'), createServerTool('similar-artists', similarArtistsSchema, similarArtists, true, 'Find artists similar to a given artist'), createServerTool('get-recommendations', getRecommendationsSchema, getRecommendations, true, 'Get personalized recommendations for a user'), createServerTool('get-user-history', getUserHistorySchema, getUserHistory, true, 'Get user activity history'), createServerTool('get-trending-by-genre', getTrendingByGenreSchema, getTrendingByGenre, true, 'Get trending content filtered by genre') ); // 7. Social Toolset const socialTools = new Toolset('social', 'Audius Social interaction tools'); socialTools.addReadTools( createServerTool('user-favorites', userFavoritesSchema, getUserFavorites, true, 'Get user favorites'), createServerTool('user-reposts', userRepostsSchema, getUserReposts, true, 'Get user reposts'), createServerTool('user-followers', userFollowersSchema, getUserFollowers, true, 'Get user followers'), createServerTool('user-following', userFollowingSchema, getUserFollowing, true, 'Get users that a user follows'), createServerTool('is-following', isFollowingSchema, isFollowing, true, 'Check if a user follows another user'), createServerTool('track-favorites', trackFavoritesSchema, getTrackFavorites, true, 'Get users who favorited a track'), createServerTool('track-reposts', trackRepostsSchema, getTrackReposts, true, 'Get users who reposted a track') ); socialTools.addWriteTools( createServerTool('follow-user', followUserSchema, followUser, false, 'Follow a user'), createServerTool('favorite-track', favoriteTrackSchema, favoriteTrack, false, 'Favorite a track') ); // 8. Comments Toolset const commentTools = new Toolset('comments', 'Audius Comment tools'); commentTools.addWriteTools( createServerTool('add-track-comment', addTrackCommentSchema, addTrackComment, false, 'Add a comment to a track'), createServerTool('delete-track-comment', deleteTrackCommentSchema, deleteTrackComment, false, 'Delete a track comment') ); // 9. Messaging Toolset const messagingTools = new Toolset('messaging', 'Audius Messaging tools'); messagingTools.addReadTools( createServerTool('get-messages', getMessagesSchema, getMessages, true, 'Get messages between users'), createServerTool('get-message-threads', getMessageThreadsSchema, getMessageThreads, true, 'Get message threads for a user') ); messagingTools.addWriteTools( createServerTool('send-message', sendMessageSchema, sendMessage, false, 'Send a message to a user'), createServerTool('mark-message-read', markMessageReadSchema, markMessageRead, false, 'Mark a message as read') ); // 10. Analytics Toolset const analyticsTools = new Toolset('analytics', 'Audius Analytics tools'); analyticsTools.addReadTools( createServerTool('get-track-listen-counts', trackListenCountsSchema, getTrackListenCounts, true, 'Get listen counts for a track'), createServerTool('get-user-track-listen-counts', userTrackListenCountsSchema, getUserTrackListenCounts, true, 'Get listen counts for a user\'s tracks'), createServerTool('get-track-top-listeners', trackTopListenersSchema, getTrackTopListeners, true, 'Get top listeners for a track'), createServerTool('get-track-listener-insights', trackListenerInsightsSchema, getTrackListenerInsights, true, 'Get listener insights for a track'), createServerTool('get-user-play-metrics', userPlayMetricsSchema, getUserPlayMetrics, true, 'Get play metrics for a user'), createServerTool('get-track-monthly-trending', trackMonthlyTrendingSchema, getTrackMonthlyTrending, true, 'Get monthly trending data for a track'), createServerTool('get-user-supporters', userSupportersSchema, getUserSupporters, true, 'Get supporters for a user'), createServerTool('get-user-supporting', userSupportingSchema, getUserSupporting, true, 'Get users that a user is supporting') ); // 11. Blockchain Toolset const blockchainTools = new Toolset('blockchain', 'Audius Blockchain-related tools'); blockchainTools.addReadTools( createServerTool('get-user-wallets', userWalletsSchema, getUserWallets, true, 'Get wallets associated with a user'), createServerTool('get-transaction-history', transactionHistorySchema, getTransactionHistory, true, 'Get transaction history'), createServerTool('get-available-challenges', availableChallengesSchema, getAvailableChallenges, true, 'Get available challenges'), createServerTool('get-user-claimable-tokens', userClaimableTokensSchema, getUserClaimableTokens, true, 'Get claimable tokens for a user'), createServerTool('get-token-balance', tokenBalanceSchema, getTokenBalance, true, 'Get token balance') ); blockchainTools.addWriteTools( createServerTool('claim-tokens', claimTokensSchema, claimTokens, false, 'Claim tokens'), createServerTool('send-tokens', sendTokensSchema, sendTokens, false, 'Send tokens') ); // 12. Monetization Toolset const monetizationTools = new Toolset('monetization', 'Audius Monetization tools'); monetizationTools.addReadTools( createServerTool('get-track-access-gates', trackAccessGatesSchema, getTrackAccessGates, true, 'Get access gates for a track'), createServerTool('check-nft-access', checkNftAccessSchema, checkNftAccess, true, 'Check NFT access'), createServerTool('get-purchase-options', purchaseOptionsSchema, getPurchaseOptions, true, 'Get purchase options'), createServerTool('check-purchase-access', checkPurchaseAccessSchema, checkPurchaseAccess, true, 'Check purchase access'), createServerTool('get-supported-payment-tokens', supportedPaymentTokensSchema, getSupportedPaymentTokens, true, 'Get supported payment tokens'), createServerTool('get-usdc-gate-info', usdcGateInfoSchema, getUsdcGateInfo, true, 'Get USDC gate info'), createServerTool('get-sent-tips', getSentTipsSchema, getSentTips, true, 'Get sent tips'), createServerTool('get-received-tips', getReceivedTipsSchema, getReceivedTips, true, 'Get received tips'), createServerTool('get-user-tip-stats', userTipStatsSchema, getUserTipStats, true, 'Get tip stats for a user') ); monetizationTools.addWriteTools( createServerTool('get-nft-gated-signature', nftGatedSignatureSchema, getNftGatedSignature, false, 'Get NFT gated signature'), createServerTool('send-tip', sendTipSchema, sendTip, false, 'Send a tip'), createServerTool('purchase-track', purchaseTrackSchema, purchaseTrack, false, 'Purchase a track') ); // 13. Notifications Toolset const notificationTools = new Toolset('notifications', 'Audius Notification tools'); notificationTools.addReadTools( createServerTool('get-notifications', getNotificationsSchema, getNotifications, true, 'Get notifications'), createServerTool('get-notification-settings', notificationSettingsSchema, getNotificationSettings, true, 'Get notification settings'), createServerTool('get-announcement-notifications', announcementNotificationsSchema, getAnnouncementNotifications, true, 'Get announcement notifications'), createServerTool('get-milestone-notifications', milestoneNotificationsSchema, getMilestoneNotifications, true, 'Get milestone notifications'), createServerTool('get-notification-counts', notificationCountsSchema, getNotificationCounts, true, 'Get notification counts'), createServerTool('get-notification-history', notificationHistorySchema, getNotificationHistory, true, 'Get notification history') ); notificationTools.addWriteTools( createServerTool('update-notification-settings', updateNotificationSettingsSchema, updateNotificationSettings, false, 'Update notification settings'), createServerTool('mark-notifications-read', markNotificationsReadSchema, markNotificationsRead, false, 'Mark notifications as read'), createServerTool('mark-all-notifications-read', markAllNotificationsReadSchema, markAllNotificationsRead, false, 'Mark all notifications as read'), createServerTool('send-notification', sendNotificationSchema, sendNotification, false, 'Send a notification') ); // 14. Core Toolset const coreTools = new Toolset('core', 'Core Audius functionality'); coreTools.addReadTools( createServerTool('resolve', resolveSchema, resolve, true, 'Resolve Audius URLs to entities'), createServerTool('get-sdk-version', getSdkVersionSchema, getSdkVersion, true, 'Get SDK and server version info') ); // 15. OAuth Toolset const oauthTools = new Toolset('oauth', 'OAuth authentication tools'); oauthTools.addReadTools( createServerTool('initiate-oauth', initiateOAuthSchema, initiateOAuth, true, 'Start OAuth authorization flow'), createServerTool('verify-token', verifyTokenSchema, verifyToken, true, 'Verify JWT token from OAuth'), createServerTool('exchange-code', exchangeCodeSchema, exchangeCode, true, 'Exchange authorization code for token') ); // Add all toolsets to the group toolsetGroup.addToolset(trackTools); toolsetGroup.addToolset(trackManagementTools); toolsetGroup.addToolset(userTools); toolsetGroup.addToolset(playlistTools); toolsetGroup.addToolset(albumTools); toolsetGroup.addToolset(playlistManagementTools); toolsetGroup.addToolset(searchTools); toolsetGroup.addToolset(socialTools); toolsetGroup.addToolset(commentTools); toolsetGroup.addToolset(messagingTools); toolsetGroup.addToolset(analyticsTools); toolsetGroup.addToolset(blockchainTools); toolsetGroup.addToolset(monetizationTools); toolsetGroup.addToolset(notificationTools); toolsetGroup.addToolset(coreTools); toolsetGroup.addToolset(oauthTools); // Enable the requested toolsets toolsetGroup.enableToolsets(enabledToolsets); return toolsetGroup; } /** * Register all resources with the MCP server */ export function registerResources(server: McpServer): void { // These can be implemented from the existing resource registrations // For now, we'll keep this as a placeholder }

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