UNPKG

@chinchillaenterprises/mcp-discord

Version:

Modular Discord MCP server with 45+ tools for comprehensive server management, featuring clean architecture and discord_ prefixed tools

87 lines • 7.96 kB
import { ChannelType } from "discord.js"; export const toolDefinition = { name: "discord_get_server_info", description: "Get detailed server information", inputSchema: { type: "object", properties: { includeChannels: { type: "boolean", description: "Include channel list in response", }, includeRoles: { type: "boolean", description: "Include role list in response", }, }, } }; export const handler = async (args, services) => { const { includeChannels = true, includeRoles = true } = args; const guild = await services.getGuild(); try { let response = `**${guild.name}** Server Information\n\n`; response += `šŸ“Š **Basic Info:**\n`; response += `Server ID: ${guild.id}\n`; response += `Owner: <@${guild.ownerId}>\n`; response += `Created: ${guild.createdAt.toISOString()}\n`; response += `Members: ${guild.memberCount}\n`; response += `Verification Level: ${guild.verificationLevel}\n`; response += `Boost Level: ${guild.premiumTier}\n`; response += `Boost Count: ${guild.premiumSubscriptionCount || 0}\n\n`; if (includeChannels) { const channels = guild.channels.cache; const textChannels = channels.filter(ch => ch.type === ChannelType.GuildText).size; const voiceChannels = channels.filter(ch => ch.type === ChannelType.GuildVoice).size; const categories = channels.filter(ch => ch.type === ChannelType.GuildCategory).size; response += `šŸ“ **Channels:** ${channels.size} total\n`; response += `• Text: ${textChannels}\n`; response += `• Voice: ${voiceChannels}\n`; response += `• Categories: ${categories}\n\n`; } if (includeRoles) { const roles = guild.roles.cache.filter(role => role.name !== '@everyone'); response += `šŸ‘‘ **Roles:** ${roles.size} total\n`; // Show top 5 roles by member count const topRoles = Array.from(roles.values()) .sort((a, b) => b.members.size - a.members.size) .slice(0, 5); response += `Top roles by members:\n`; topRoles.forEach(role => { response += `• @${role.name} - ${role.members.size} members\n`; }); response += '\n'; } // Features if (guild.features.length > 0) { response += `✨ **Server Features:**\n`; guild.features.forEach(feature => { response += `• ${feature.replace(/_/g, ' ').toLowerCase().replace(/\b\w/g, l => l.toUpperCase())}\n`; }); response += '\n'; } // Emojis const emojis = guild.emojis.cache.size; if (emojis > 0) { response += `šŸ˜„ **Custom Emojis:** ${emojis}\n`; } // Description if (guild.description) { response += `\nšŸ“ **Description:**\n${guild.description}`; } return { content: [ { type: "text", text: response, }, ], }; } catch (error) { console.error(`[GetServerInfo] Error getting server info:`, error); throw new Error(`Failed to get server info: ${error.message}`); } }; export { GetServerInfoArgsSchema as schema } from "../../schemas/server.js"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXNlcnZlci1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL3NlcnZlci9nZXQtc2VydmVyLWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVM7SUFDbEMsSUFBSSxFQUFFLHlCQUF5QjtJQUMvQixXQUFXLEVBQUUsaUNBQWlDO0lBQzlDLFdBQVcsRUFBRTtRQUNYLElBQUksRUFBRSxRQUFRO1FBQ2QsVUFBVSxFQUFFO1lBQ1YsZUFBZSxFQUFFO2dCQUNmLElBQUksRUFBRSxTQUFTO2dCQUNmLFdBQVcsRUFBRSxrQ0FBa0M7YUFDaEQ7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsV0FBVyxFQUFFLCtCQUErQjthQUM3QztTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxJQUF1QixFQUFFLFFBQTBCLEVBQUUsRUFBRTtJQUNuRixNQUFNLEVBQUUsZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBRTdELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRXhDLElBQUksQ0FBQztRQUNILElBQUksUUFBUSxHQUFHLEtBQUssS0FBSyxDQUFDLElBQUksMkJBQTJCLENBQUM7UUFDMUQsUUFBUSxJQUFJLHNCQUFzQixDQUFDO1FBQ25DLFFBQVEsSUFBSSxjQUFjLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztRQUN2QyxRQUFRLElBQUksWUFBWSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUM7UUFDM0MsUUFBUSxJQUFJLFlBQVksS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO1FBQzFE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