@utaba/ucm-mcp-server
Version:
Universal Context Manager MCP Server - AI-native artifact management
49 lines • 2.1 kB
JavaScript
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