Skip to main content
Glama
jar285

MCP-Discord

by jar285

discord_read_messages

Retrieve messages from Discord text channels to monitor conversations, analyze discussions, or gather information with configurable limits.

Instructions

Retrieves messages from a Discord text channel with a configurable limit

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
channelIdYes
limitNo

Implementation Reference

  • Handler function that fetches messages from a specified Discord channel using the discord.js client, validates input with ReadMessagesSchema, formats message details including author, timestamp, attachments, embeds, and replies, sorts them chronologically, and returns formatted JSON response.
    case "discord_read_messages": { const { channelId, limit } = ReadMessagesSchema.parse(args); try { if (!client.isReady()) { return { content: [{ type: "text", text: "Discord client not logged in. Please use discord_login tool first." }], isError: true }; } const channel = await client.channels.fetch(channelId); if (!channel) { return { content: [{ type: "text", text: `Cannot find channel with ID: ${channelId}` }], isError: true }; } // Check if channel has messages (text channel, thread, etc.) if (!channel.isTextBased() || !('messages' in channel)) { return { content: [{ type: "text", text: `Channel type does not support reading messages` }], isError: true }; } // Fetch messages const messages = await channel.messages.fetch({ limit }); if (messages.size === 0) { return { content: [{ type: "text", text: `No messages found in channel` }] }; } // Format messages const formattedMessages = messages.map(msg => ({ id: msg.id, content: msg.content, author: { id: msg.author.id, username: msg.author.username, bot: msg.author.bot }, timestamp: msg.createdAt, attachments: msg.attachments.size, embeds: msg.embeds.length, replyTo: msg.reference ? msg.reference.messageId : null })).sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime()); return { content: [{ type: "text", text: JSON.stringify({ channelId, messageCount: formattedMessages.length, messages: formattedMessages }, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Failed to read messages: ${error}` }], isError: true }; } }
  • Zod schema used for input validation in the discord_read_messages handler, defining channelId as required string and limit as optional number between 1-100 defaulting to 50.
    const ReadMessagesSchema = z.object({ channelId: z.string(), limit: z.number().min(1).max(100).optional().default(50) });
  • JSON schema for input validation exposed via the MCP ListTools endpoint for the discord_read_messages tool.
    inputSchema: { type: "object", properties: { channelId: { type: "string" }, limit: { type: "number", minimum: 1, maximum: 100, default: 50 } }, required: ["channelId"] }
  • src/index.ts:303-319 (registration)
    Tool registration in the ListTools response array, defining name, description, and input schema for discord_read_messages.
    { name: "discord_read_messages", description: "Retrieves messages from a Discord text channel with a configurable limit", inputSchema: { type: "object", properties: { channelId: { type: "string" }, limit: { type: "number", minimum: 1, maximum: 100, default: 50 } }, required: ["channelId"] } },

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/jar285/mcp-discord'

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