UNPKG

discord-mcp

Version:
88 lines 3.06 kB
#!/usr/bin/env node import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { logger } from './utils/logger.js'; import { config } from './config.js'; import { DiscordService } from './discord/service.js'; import { SessionManager } from './session.js'; import { tools as messageTools } from './tools/messages.js'; import { tools as fileTools } from './tools/files.js'; import { tools as channelTools } from './tools/channels.js'; import { tools as relationshipTools } from './tools/relationships.js'; import { tools as presenceTools } from './tools/presence.js'; // Create MCP server using the modern API const server = new McpServer({ name: 'discord-mcp', version: '2.4.0', }); // Initialize services const sessionManager = new SessionManager(); let discordService = null; // Helper to get or create Discord service function getDiscordService() { const token = process.env.DISCORD_BOT_TOKEN || config.discord.token; if (!token) { throw new Error('Discord token not provided. Set DISCORD_BOT_TOKEN environment variable.'); } if (!discordService) { discordService = new DiscordService(token); } return discordService; } // Collect all tools from each module const allTools = [ ...messageTools, ...fileTools, ...channelTools, ...relationshipTools, ...presenceTools, ]; // Register each tool using the modern server.tool() API allTools.forEach(tool => { server.tool(tool.name, tool.description, tool.parameters.shape, async (args) => { try { // Validate parameters with the tool's schema const validatedArgs = tool.parameters.parse(args || {}); // Create a context object that matches what the tools expect const toolContext = { discord: getDiscordService(), discordService: getDiscordService(), sessionManager, }; const result = await tool.execute(validatedArgs, toolContext); const resultText = typeof result === 'string' ? result : JSON.stringify(result, null, 2); return { content: [ { type: 'text', text: resultText, }, ], }; } catch (error) { logger.error({ msg: 'Tool execution error', tool: tool.name, error }); throw error; } }); }); // Start the server async function main() { const transport = new StdioServerTransport(); logger.info({ msg: 'Discord MCP server starting', tools: allTools.length, toolNames: allTools.map(t => t.name), version: '2.4.0', }); await server.connect(transport); } main().catch(error => { logger.error({ msg: 'Failed to start server', error }); process.exit(1); }); //# sourceMappingURL=index.js.map