UNPKG

@chinchillaenterprises/mcp-discord

Version:

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

89 lines 7.07 kB
import { ChannelType } from "discord.js"; export const toolDefinition = { name: "discord_create_channel", description: "Create a new channel in the Discord server", inputSchema: { type: "object", properties: { name: { type: "string", description: "Name for the new channel", }, type: { type: "string", enum: ["text", "voice", "category"], description: "Type of channel to create (default: text)", }, topic: { type: "string", description: "Topic/description for the channel", }, parent: { type: "string", description: "Category ID or name to place the channel in", }, }, required: ["name"], } }; export const handler = async (args, services) => { const { name, type = "text", topic, parent } = args; const client = await services.getActiveClient(); const guild = await services.getGuild(); try { let parentChannel = null; if (parent) { // Try to resolve parent category if (!/^\d+$/.test(parent)) { // Parent is a name, find the category parentChannel = guild.channels.cache.find(ch => ch.type === ChannelType.GuildCategory && ch.name.toLowerCase() === parent.toLowerCase()); if (!parentChannel) { throw new Error(`Category '${parent}' not found`); } } else { parentChannel = await guild.channels.fetch(parent); if (!parentChannel || parentChannel.type !== ChannelType.GuildCategory) { throw new Error(`Category ${parent} not found`); } } } const channelType = type === 'voice' ? ChannelType.GuildVoice : type === 'category' ? ChannelType.GuildCategory : ChannelType.GuildText; const channelOptions = { name, type: channelType, }; if (topic && channelType === ChannelType.GuildText) { channelOptions.topic = topic; } if (parentChannel) { channelOptions.parent = parentChannel.id; } const channel = await guild.channels.create(channelOptions); const channelTypeEmoji = type === 'voice' ? '🔊' : type === 'category' ? '📁' : '💬'; return { content: [ { type: "text", text: `${channelTypeEmoji} Created ${type} channel **${channel.name}**! Channel ID: ${channel.id} Type: ${type} ${topic ? `Topic: ${topic}` : ''} ${parentChannel ? `Parent category: ${parentChannel.name}` : ''} Position: ${channel.position} Created: ${channel.createdAt?.toISOString() || 'just now'}`, }, ], }; } catch (error) { console.error(`[CreateChannel] Error creating channel:`, error); throw new Error(`Failed to create channel: ${error.message}`); } }; export { CreateChannelArgsSchema as schema } from "../../schemas/server.js"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvc2VydmVyL2NyZWF0ZS1jaGFubmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFTO0lBQ2xDLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsV0FBVyxFQUFFLDRDQUE0QztJQUN6RCxXQUFXLEVBQUU7UUFDWCxJQUFJLEVBQUUsUUFBUTtRQUNkLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxXQUFXLEVBQUUsMEJBQTBCO2FBQ3hDO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDO2dCQUNuQyxXQUFXLEVBQUUsMkNBQTJDO2FBQ3pEO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRSxtQ0FBbUM7YUFDakQ7WUFDRCxNQUFNLEVBQUU7Z0JBQ04sSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFLDZDQUE2QzthQUMzRDtTQUNGO1FBQ0QsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsSUFBdUIsRUFBRSxRQUEwQixFQUFFLEVBQUU7SUFDbkYsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFFcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLENB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