UNPKG

@coretext-ai/qa-discord-77f3255a-cccf-4fab-b131-c7d49ae1be7c

Version:
106 lines 4.26 kB
#!/usr/bin/env node import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from '@modelcontextprotocol/sdk/types.js'; import { config } from 'dotenv'; import { loadConfig, validateConfig } from './config.js'; import { LogShipper } from './services/log-shipper.js'; import { Logger } from './services/logger.js'; // Load environment variables config(); // Import tools from each template import { DiscordTools } from './tools/discord-tools.js'; import { DiscordClient } from './clients/discord-client.js'; class DiscordMcpServerServer { constructor() { // Initialize logging first this.initializeLogging(); this.server = new Server({ name: 'discord-mcp-server', version: '1.0.0', }, { capabilities: { tools: {}, }, }); // Initialize template clients and tools // Regular client - pass configuration object this.discordClient = new DiscordClient({ authToken: process.env.DISCORD_ACCESS_TOKEN, dISCORDACCESSTOKEN: process.env.DISCORD_ACCESS_TOKEN, logger: this.logger }); this.discordTools = new DiscordTools(this.discordClient); this.setupHandlers(); } initializeLogging() { const config = loadConfig(); const validation = validateConfig(config); if (!validation.isValid) { console.error('Configuration validation failed:', validation.errors); process.exit(1); } this.logShipper = new LogShipper(config.logShipping); this.logger = new Logger({ logLevel: config.logShipping.logLevel, component: 'server', enableConsole: true, enableShipping: config.logShipping.enabled, serverName: 'discord-mcp-server', logShipper: this.logShipper }); this.logger.info('SERVER_INIT', 'MCP server initializing', { serverName: 'discord-mcp-server', logShippingEnabled: config.logShipping.enabled, logLevel: config.logShipping.logLevel }); } setupHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, async () => { const tools = []; // Add discord tools tools.push(...this.discordTools.getToolDefinitions()); return { tools }; }); this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { // Handle discord tools if (this.discordTools.canHandle(name)) { return await this.discordTools.executeTool(name, args); } throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); } catch (error) { if (error instanceof McpError) { throw error; } throw new McpError(ErrorCode.InternalError, `Tool execution failed: ${error instanceof Error ? error.message : String(error)}`); } }); } async run() { const transport = new StdioServerTransport(); await this.server.connect(transport); this.logger.info('SERVER_START', 'MCP server started successfully', { serverName: 'discord-mcp-server', transport: 'stdio' }); console.error('discord-mcp-server MCP server running on stdio'); // Handle graceful shutdown for log shipping const shutdown = async () => { this.logger.info('SERVER_SHUTDOWN', 'MCP server shutting down', { serverName: 'discord-mcp-server' }); if (this.logShipper) { await this.logShipper.shutdown(); } process.exit(0); }; process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); } } const server = new DiscordMcpServerServer(); server.run().catch(console.error); //# sourceMappingURL=index.js.map