UNPKG

@coretext-ai/qa-google-contacts-a58500d5-8331-4ce9-a140-d204a9fae815

Version:
102 lines 4.27 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 { GoogleContactsTools } from './tools/google-contacts-tools.js'; import { GoogleContactsClient } from './clients/google-contacts-client.js'; class GoogleContactsMcpServerServer { constructor() { // Initialize logging first this.initializeLogging(); this.server = new Server({ name: 'google-contacts-mcp-server', version: '1.0.0', }, { capabilities: { tools: {}, }, }); // Initialize template clients and tools // OAuth client - no constructor arguments needed this.googleContactsClient = new GoogleContactsClient(); this.googleContactsTools = new GoogleContactsTools(this.googleContactsClient); 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: 'google-contacts-mcp-server', logShipper: this.logShipper }); this.logger.info('SERVER_INIT', 'MCP server initializing', { serverName: 'google-contacts-mcp-server', logShippingEnabled: config.logShipping.enabled, logLevel: config.logShipping.logLevel }); } setupHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, async () => { const tools = []; // Add google-contacts tools tools.push(...this.googleContactsTools.getToolDefinitions()); return { tools }; }); this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { // Handle google-contacts tools if (this.googleContactsTools.canHandle(name)) { return await this.googleContactsTools.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: 'google-contacts-mcp-server', transport: 'stdio' }); console.error('google-contacts-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: 'google-contacts-mcp-server' }); if (this.logShipper) { await this.logShipper.shutdown(); } process.exit(0); }; process.on('SIGINT', shutdown); process.on('SIGTERM', shutdown); } } const server = new GoogleContactsMcpServerServer(); server.run().catch(console.error); //# sourceMappingURL=index.js.map