UNPKG

mcp-styledbook

Version:

Model Context Protocol para criação de ebooks estilizados com pesquisa profunda e formatação visual impactante

164 lines (143 loc) 6.23 kB
#!/usr/bin/env node const path = require('path'); const fs = require('fs-extra'); const { spawn } = require('child_process'); // Caminho para o index.js principal const serverPath = path.join(__dirname, '..', 'index.js'); // Banner console.log('\n'); console.log('███████╗████████╗██╗ ██╗██╗ ███████╗██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗'); console.log('██╔════╝╚══██╔══╝╚██╗ ██╔╝██║ ██╔════╝██╔══██╗██╔══██╗██╔═══██╗██╔═══██╗██║ ██╔╝'); console.log('███████╗ ██║ ╚████╔╝ ██║ █████╗ ██║ ██║██████╔╝██║ ██║██║ ██║█████╔╝ '); console.log('╚════██║ ██║ ╚██╔╝ ██║ ██╔══╝ ██║ ██║██╔══██╗██║ ██║██║ ██║██╔═██╗ '); console.log('███████║ ██║ ██║ ███████╗███████╗██████╔╝██████╔╝╚██████╔╝╚██████╔╝██║ ██╗'); console.log('╚══════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝'); console.log('\n🚀 MCP para criação de ebooks estilizados e revolucionários - v1.0.3\n'); // Verifica os argumentos da linha de comando const args = process.argv.slice(2); const helpArg = args.find(arg => arg === '--help' || arg === '-h'); const versionArg = args.find(arg => arg === '--version' || arg === '-v'); const portArg = args.find(arg => arg.startsWith('--port=')); const transportArg = args.find(arg => arg.startsWith('--transport=')); const jsonOutput = args.find(arg => arg === '--json'); // Verifica se é modo de ajuda if (helpArg) { console.log('Uso: mcp-styledbook [opções]'); console.log('\nOpções:'); console.log(' --port=NÚMERO Porta para o servidor (padrão: 3001)'); console.log(' --transport=TIPO Tipo de transporte (http, stdio) (padrão: http)'); console.log(' --version, -v Mostra a versão do MCP StyledBook'); console.log(' --help, -h Mostra esta ajuda'); console.log(' --json Saída em formato JSON (para integração com ferramentas)'); process.exit(0); } // Verifica se é pedido de versão if (versionArg) { console.log('MCP StyledBook v1.0.3'); process.exit(0); } // Verifica se a pasta "ebook" existe, se não, cria const ebookDir = path.join(process.cwd(), 'ebook'); if (!fs.existsSync(ebookDir)) { console.log('📁 Criando diretório de ebooks...'); fs.mkdirSync(ebookDir); } // Pega argumento de porta let port = 3001; if (portArg) { port = parseInt(portArg.split('=')[1]); } // Tipo de transporte let transport = 'http'; if (transportArg) { transport = transportArg.split('=')[1].toLowerCase(); if (transport !== 'http' && transport !== 'stdio') { console.error('❌ Tipo de transporte inválido. Use http ou stdio.'); process.exit(1); } } // Define porta como variável de ambiente process.env.PORT = port; process.env.TRANSPORT = transport; if (!jsonOutput) { console.log(`🌐 Iniciando MCP StyledBook na porta ${port}...`); console.log(`💡 Tipo de transporte: ${transport}`); console.log('\n📚 Configuração para uso com ferramentas de IA:'); if (transport === 'http') { console.log('\n==== CURSOR ===='); console.log('1. Cursor → Configurações → Features → MCP Servers'); console.log('2. Adicione um novo servidor: http'); console.log(`3. URL: http://localhost:${port}/mcp`); console.log('\n==== TRAE ===='); console.log('1. Trae → Configurações → MCP'); console.log(`2. Adicione: http://localhost:${port}/mcp`); console.log('\n==== WINDSURF ===='); console.log('1. Windsurf → Configurações → MCP'); console.log(`2. Adicione: http://localhost:${port}/mcp`); console.log('\n==== CONFIGURAÇÃO JSON (.cursor/mcp.json) ===='); console.log(`{ "mcpServers": { "styledbook": { "url": "http://localhost:${port}/mcp" } } }\n`); } else { console.log('\n==== CONFIGURAÇÃO JSON (.cursor/mcp.json) ===='); console.log(`{ "mcpServers": { "styledbook": { "command": "npx", "args": ["-y", "mcp-styledbook", "--transport=stdio"] } } }\n`); } console.log('💡 DICA: Digite Ctrl+C para parar o servidor'); console.log(''); } else { // Saída JSON para ferramentas console.log(JSON.stringify({ name: "MCP StyledBook", version: "1.0.3", port: port, transport: transport, status: "starting", config: { http: `http://localhost:${port}/mcp`, stdio: "npx -y mcp-styledbook --transport=stdio" } })); } // Executa o servidor const serverProcess = spawn('node', [serverPath], { stdio: transport === 'stdio' ? 'inherit' : 'pipe', env: process.env }); if (transport !== 'stdio') { serverProcess.stdout.on('data', (data) => { if (!jsonOutput) { process.stdout.write(data); } }); serverProcess.stderr.on('data', (data) => { if (!jsonOutput) { process.stderr.write(data); } }); } serverProcess.on('close', (code) => { if (code !== 0 && !jsonOutput) { console.error(`\n❌ Servidor encerrado com código ${code}`); } else if (!jsonOutput) { console.log('\n👋 Servidor encerrado.'); } process.exit(code); }); // Captura CTRL+C para fechar o servidor graciosamente process.on('SIGINT', () => { if (!jsonOutput) { console.log('\n🛑 Recebido sinal de interrupção, encerrando servidor...'); } serverProcess.kill('SIGINT'); });