UNPKG

mcp-booster

Version:

Servidor MCP com CoConuT (Continuous Chain of Thought) para uso com Cursor IDE - Pacote Global NPM

250 lines (249 loc) 8.77 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.readMcpConfig = readMcpConfig; exports.createMcpBoosterConfig = createMcpBoosterConfig; exports.mergeMcpConfig = mergeMcpConfig; exports.writeMcpConfig = writeMcpConfig; exports.installMcpBoosterConfig = installMcpBoosterConfig; exports.validateMcpConfig = validateMcpConfig; exports.backupMcpConfig = backupMcpConfig; exports.uninstallMcpBoosterConfig = uninstallMcpBoosterConfig; const fs = __importStar(require("fs")); const path = __importStar(require("path")); /** * Shows support information when errors occur */ function showSupportInfo() { console.log(''); console.log('🆘 Precisa de ajuda?'); console.log(' Nossa equipe de suporte está pronta para ajudar!'); console.log(' 📧 Entre em contato: https://llmbooster.com/suporte'); console.log(' ⏰ Horário de atendimento: Segunda a Sexta, 9h às 18h'); console.log(''); } /** * Lê o arquivo mcp.json existente ou retorna configuração vazia */ function readMcpConfig(configPath) { const mcpJsonPath = path.join(configPath, 'mcp.json'); try { if (fs.existsSync(mcpJsonPath)) { const content = fs.readFileSync(mcpJsonPath, 'utf8'); const config = JSON.parse(content); // Garante que mcpServers existe if (!config.mcpServers) { config.mcpServers = {}; } return config; } } catch (error) { console.warn(`⚠️ Erro ao ler arquivo mcp.json existente: ${error}`); } // Retorna configuração vazia se arquivo não existe ou há erro return { mcpServers: {} }; } /** * Cria a configuração do servidor MCP-Booster */ function createMcpBoosterConfig(apiKey) { return { command: "mcp-booster", args: [ "--api-key", apiKey ] }; } /** * Mescla a configuração do MCP-Booster com configuração existente */ function mergeMcpConfig(existingConfig, apiKey) { const boosterConfig = createMcpBoosterConfig(apiKey); return { ...existingConfig, mcpServers: { ...existingConfig.mcpServers, "llm-booster": boosterConfig } }; } /** * Escreve a configuração MCP no arquivo mcp.json */ function writeMcpConfig(configPath, config) { const mcpJsonPath = path.join(configPath, 'mcp.json'); try { // Cria o diretório se não existir if (!fs.existsSync(configPath)) { fs.mkdirSync(configPath, { recursive: true }); } // Converte para JSON com formatação bonita const jsonContent = JSON.stringify(config, null, 2); // Escreve o arquivo fs.writeFileSync(mcpJsonPath, jsonContent, 'utf8'); return { success: true, message: `✅ Configuração MCP instalada com sucesso em: ${mcpJsonPath}`, configPath: mcpJsonPath }; } catch (error) { return { success: false, message: `❌ Erro ao escrever arquivo de configuração`, error: error instanceof Error ? error.message : String(error) }; } } /** * Instala a configuração MCP-Booster no arquivo mcp.json */ function installMcpBoosterConfig(configPath, apiKey) { try { // Lê configuração existente const existingConfig = readMcpConfig(configPath); // Verifica se já existe configuração do llm-booster const hasExistingBooster = existingConfig.mcpServers['llm-booster']; // Mescla com nova configuração const mergedConfig = mergeMcpConfig(existingConfig, apiKey); // Escreve arquivo atualizado const result = writeMcpConfig(configPath, mergedConfig); if (result.success) { if (hasExistingBooster) { result.message = `✅ Configuração llm-booster atualizada com sucesso em: ${result.configPath}`; } else { result.message = `✅ Configuração llm-booster adicionada com sucesso em: ${result.configPath}`; } } return result; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); console.error('❌ Erro crítico na configuração MCP:', errorMessage); showSupportInfo(); return { success: false, message: '❌ Erro ao instalar configuração MCP', error: errorMessage }; } } /** * Valida se a estrutura do arquivo mcp.json está correta */ function validateMcpConfig(config) { try { // Verifica se tem a estrutura básica if (!config || typeof config !== 'object') { return false; } // Verifica se tem mcpServers if (!config.mcpServers || typeof config.mcpServers !== 'object') { return false; } // Valida cada servidor for (const [serverName, serverConfig] of Object.entries(config.mcpServers)) { const server = serverConfig; // Verifica se tem command if (!server.command || typeof server.command !== 'string') { console.warn(`⚠️ Servidor '${serverName}' não tem comando válido`); return false; } // Verifica se args é array (se existir) if (server.args && !Array.isArray(server.args)) { console.warn(`⚠️ Servidor '${serverName}' tem args inválido`); return false; } } return true; } catch (error) { console.warn('⚠️ Erro ao validar configuração MCP:', error); return false; } } /** * Faz backup do arquivo mcp.json existente */ function backupMcpConfig(configPath) { const mcpJsonPath = path.join(configPath, 'mcp.json'); if (!fs.existsSync(mcpJsonPath)) { return null; // Não há arquivo para fazer backup } try { const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); const backupPath = path.join(configPath, `mcp.json.backup.${timestamp}`); fs.copyFileSync(mcpJsonPath, backupPath); console.log(`📋 Backup criado: ${backupPath}`); return backupPath; } catch (error) { console.warn('⚠️ Erro ao criar backup:', error); return null; } } /** * Remove a configuração do MCP-Booster do arquivo mcp.json */ function uninstallMcpBoosterConfig(configPath) { try { const existingConfig = readMcpConfig(configPath); if (!existingConfig.mcpServers['llm-booster']) { return { success: false, message: '⚠️ Configuração llm-booster não encontrada' }; } // Remove a configuração delete existingConfig.mcpServers['llm-booster']; // Escreve arquivo atualizado return writeMcpConfig(configPath, existingConfig); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); console.error('❌ Erro ao remover configuração MCP:', errorMessage); showSupportInfo(); return { success: false, message: '❌ Erro ao remover configuração MCP', error: errorMessage }; } }