@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
JavaScript
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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