UNPKG

@utaba/ucm-mcp-server

Version:

Universal Context Manager MCP Server - AI-native artifact management

49 lines 2.1 kB
import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import { McpHandler } from './McpHandler.js'; import { UcmApiClient } from '../clients/UcmApiClient.js'; import { ToolRegistry } from './ToolRegistry.js'; export class McpServer { config; logger; server; handler; ucmClient; toolRegistry; constructor(config, logger) { this.config = config; this.logger = logger; this.ucmClient = new UcmApiClient(config.ucmApiUrl, config.authToken, config.requestTimeout, config.authorId); this.toolRegistry = new ToolRegistry(this.ucmClient, this.logger, config.trustedAuthors, config.authorId, config.ucmApiUrl); this.handler = new McpHandler(this.toolRegistry, this.logger, config.authorId); this.server = new Server({ name: 'ucm-mcp-server', version: '1.0.0', description: 'UCM Model Context Protocol Server - https://ucm.utaba.ai' }, { capabilities: { tools: {}, logging: {} } }); this.setupHandlers(); } setupHandlers() { this.server.setRequestHandler(ListToolsRequestSchema, this.handler.handleToolsList.bind(this.handler)); this.server.setRequestHandler(CallToolRequestSchema, this.handler.handleToolCall.bind(this.handler)); } async start() { const transport = new StdioServerTransport(); await this.server.connect(transport); this.logger.info('MCP-Server', 'MCP Server connected via stdio transport'); } async stop() { // Cleanup HTTP client to prevent memory leaks from AbortSignal listeners this.ucmClient.cleanup(); this.logger.info('MCP-Server', 'UCM API client cleaned up'); await this.server.close(); this.logger.info('MCP-Server', 'MCP Server stopped'); } } //# sourceMappingURL=McpServer.js.map