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
JavaScript
;
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
};
}
}