UNPKG

@coretext-ai/qa-greenhouse-b9c0d1e2-f3a4-4567-a890-901234567890

Version:
107 lines 4.38 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 { GreenhouseTools } from './tools/greenhouse-tools.js'; import { GreenhouseClient } from './clients/greenhouse-client.js'; class GreenhouseMcpServerServer { constructor() { // Initialize logging first this.initializeLogging(); this.server = new Server({ name: 'greenhouse-mcp-server', version: '1.0.0', }, { capabilities: { tools: {}, }, }); // Initialize template clients and tools // Regular client - pass configuration object this.greenhouseClient = new GreenhouseClient({ authToken: process.env.GREENHOUSE_API_KEY, gREENHOUSEAPIKEY: process.env.GREENHOUSE_API_KEY, gREENHOUSEEMAIL: process.env.GREENHOUSE_EMAIL, logger: this.logger }); this.greenhouseTools = new GreenhouseTools(this.greenhouseClient); 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: 'greenhouse-mcp-server', logShipper: this.logShipper }); this.logger.info('SERVER_INIT', 'MCP server initializing', { serverName: 'greenhouse-mcp-server', logShippingEnabled: config.logShipping.enabled, logLevel: config.logShipping.logLevel }); } setupHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, async () => { const tools = []; // Add greenhouse tools tools.push(...this.greenhouseTools.getToolDefinitions()); return { tools }; }); this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { // Handle greenhouse tools if (this.greenhouseTools.canHandle(name)) { return await this.greenhouseTools.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: 'greenhouse-mcp-server', transport: 'stdio' }); console.error('greenhouse-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: 'greenhouse-mcp-server' }); if (this.logShipper) { await this.logShipper.shutdown(); } process.exit(0); }; process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); } } const server = new GreenhouseMcpServerServer(); server.run().catch(console.error); //# sourceMappingURL=index.js.map