Skip to main content
Glama
messaging.ts7.02 kB
import { z } from 'zod'; import { AudiusClient } from '../sdk-client.js'; import { createTextResponse } from '../utils/response.js'; import { RequestHandlerExtra } from '../types/index.js'; // Schema for send-message tool export const sendMessageSchema = { type: 'object', properties: { fromUserId: { type: 'string', description: 'ID of the user sending the message', }, toUserId: { type: 'string', description: 'ID of the user receiving the message', }, message: { type: 'string', description: 'Message content to send', }, }, required: ['fromUserId', 'toUserId', 'message'], }; // Implementation of send-message tool export const sendMessage = async (args: { fromUserId: string; toUserId: string; message: string; }, extra: RequestHandlerExtra) => { try { const audiusClient = AudiusClient.getInstance(); // Verify the sender exists try { await audiusClient.getUser(args.fromUserId); } catch (error) { return createTextResponse(`Unable to verify sender. Please check the fromUserId.`, true); } // Verify the recipient exists try { await audiusClient.getUser(args.toUserId); } catch (error) { return createTextResponse(`Unable to verify recipient. Please check the toUserId.`, true); } // Send the message const messageResult = await audiusClient.sendMessage( args.fromUserId, args.toUserId, args.message ); if (!messageResult || !messageResult.messageId) { return createTextResponse(`Failed to send message. The service may be temporarily unavailable.`, true); } return createTextResponse(`Message sent successfully. Message ID: ${messageResult.messageId}`); } catch (error) { console.error('Error in send-message tool:', error); return createTextResponse( `Error sending message: ${error instanceof Error ? error.message : 'Unknown error'}`, true ); } }; // Schema for get-messages tool export const getMessagesSchema = { type: 'object', properties: { userId: { type: 'string', description: 'ID of the user retrieving messages', }, withUserId: { type: 'string', description: 'ID of the other user in the conversation', }, limit: { type: 'number', description: 'Maximum number of messages to return (default: 50)', }, }, required: ['userId', 'withUserId'], }; // Implementation of get-messages tool export const getMessages = async (args: { userId: string; withUserId: string; limit?: number; }, extra: RequestHandlerExtra) => { try { const audiusClient = AudiusClient.getInstance(); const limit = args.limit || 50; // Verify both users exist try { await Promise.all([ audiusClient.getUser(args.userId), audiusClient.getUser(args.withUserId) ]); } catch (error) { return createTextResponse(`Unable to verify users. Please check the provided user IDs.`, true); } // Get the messages const messages = await audiusClient.getMessages( args.userId, args.withUserId, limit ); if (!messages || messages.length === 0) { return createTextResponse(`No messages found between user ${args.userId} and user ${args.withUserId}.`); } // Format results const formattedResults = { userId: args.userId, withUserId: args.withUserId, limit, messageCount: messages.length, messages: messages, }; return createTextResponse(JSON.stringify(formattedResults, null, 2)); } catch (error) { console.error('Error in get-messages tool:', error); return createTextResponse(`Error getting messages: ${error instanceof Error ? error.message : 'Unknown error'}`, true); } }; // Schema for get-message-threads tool export const getMessageThreadsSchema = { type: 'object', properties: { userId: { type: 'string', description: 'ID of the user retrieving message threads', }, limit: { type: 'number', description: 'Maximum number of threads to return (default: 20)', }, }, required: ['userId'], }; // Implementation of get-message-threads tool export const getMessageThreads = async (args: { userId: string; limit?: number; }, extra: RequestHandlerExtra) => { try { const audiusClient = AudiusClient.getInstance(); const limit = args.limit || 20; // Verify user exists try { await audiusClient.getUser(args.userId); } catch (error) { return createTextResponse(`Unable to verify user. Please check the provided user ID.`, true); } // Get the message threads const threads = await audiusClient.getMessageThreads( args.userId, limit ); if (!threads || threads.length === 0) { return createTextResponse(`No message threads found for user ${args.userId}.`); } // Format results const formattedResults = { userId: args.userId, limit, threadCount: threads.length, threads: threads, }; return createTextResponse(JSON.stringify(formattedResults, null, 2)); } catch (error) { console.error('Error in get-message-threads tool:', error); return createTextResponse(`Error getting message threads: ${error instanceof Error ? error.message : 'Unknown error'}`, true); } }; // Schema for mark-message-read tool export const markMessageReadSchema = { type: 'object', properties: { userId: { type: 'string', description: 'ID of the user marking the message as read', }, messageId: { type: 'string', description: 'ID of the message to mark as read', }, }, required: ['userId', 'messageId'], }; // Implementation of mark-message-read tool export const markMessageRead = async (args: { userId: string; messageId: string; }, extra: RequestHandlerExtra) => { try { const audiusClient = AudiusClient.getInstance(); // Verify user exists try { await audiusClient.getUser(args.userId); } catch (error) { return createTextResponse(`Unable to verify user. Please check the provided user ID.`, true); } // Mark the message as read const result = await audiusClient.markMessageAsRead( args.userId, args.messageId ); if (!result) { return createTextResponse(`Failed to mark message ${args.messageId} as read for user ${args.userId}.`, true); } // Format results const formattedResults = { userId: args.userId, messageId: args.messageId, timestamp: new Date().toISOString(), status: 'read' }; return createTextResponse(JSON.stringify(formattedResults, null, 2)); } catch (error) { console.error('Error in mark-message-read tool:', error); return createTextResponse(`Error marking message as read: ${error instanceof Error ? error.message : 'Unknown error'}`, true); } };

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