cast-code 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/modules/repl/services/commands/mcp-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { Colors, colorize, Box, Icons } from '../../utils/theme';\nimport { McpRegistryService } from '../../../mcp/services/mcp-registry.service';\nimport { McpClientService } from '../../../mcp/services/mcp-client.service';\nimport {\n selectWithEsc,\n inputWithEsc,\n confirmWithEsc,\n CancelledPromptError,\n} from '../../utils/prompts-with-esc';\nimport { getAllTemplates, getTemplatesByCategory, getTemplate, McpCategory } from '../../../mcp/catalog/mcp-templates';\n\ninterface SmartInput {\n askChoice: (question: string, choices: { key: string; label: string; description: string }[]) => Promise<string>;\n question: (prompt: string) => Promise<string>;\n}\n\n@Injectable()\nexport class McpCommandsService {\n constructor(\n private readonly mcpRegistry: McpRegistryService,\n private readonly mcpClient: McpClientService,\n ) {}\n\n async cmdMcp(args: string[], smartInput: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const sub = args[0] || 'menu';\n const w = (s: string) => process.stdout.write(s);\n \n smartInput.pause();\n\n try {\n switch (sub) {\n case 'menu':\n await this.showMcpMenu(smartInput);\n break;\n\n case 'list': {\n await this.listServers();\n break;\n }\n\n case 'tools': {\n await this.listTools();\n break;\n }\n\n case 'add': {\n await this.addMcpWizard(smartInput);\n break;\n }\n\n case 'remove': {\n await this.removeMcpWizard(smartInput);\n break;\n }\n\n case 'test': {\n await this.testMcpTool(smartInput);\n break;\n }\n\n case 'what':\n case 'about':\n this.printWhatIsMcp();\n break;\n\n case 'help':\n default:\n this.printMcpHelp();\n break;\n }\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n return;\n }\n throw error;\n } finally {\n smartInput.resume();\n }\n }\n\n private async showMcpMenu(smartInput: SmartInput): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n\n while (true) {\n w(`\\n${colorize('☁️ MCP Hub', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(30), 'subtle')}\\n\\n`);\n\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w(`${colorize('Servidores:', 'muted')} ${summaries.length} `);\n w(`${colorize('Ferramentas:', 'muted')} ${totalTools}\\n\\n`);\n\n console.log(colorize('(pressione ESC para voltar ao chat)\\n', 'muted'));\n\n const action = await this.withEsc(() => smartInput.askChoice('O que deseja fazer?', [\n { key: '1', label: 'Ver servidores', description: 'Listar MCPs configurados' },\n { key: '2', label: 'Ver ferramentas', description: 'Todas as tools disponíveis' },\n { key: '3', label: 'Adicionar servidor', description: 'Configurar novo MCP' },\n { key: '4', label: 'Remover servidor', description: 'Desconectar MCP' },\n { key: '5', label: 'O que é MCP?', description: 'Entenda o protocolo' },\n { key: '6', label: 'Como criar um MCP', description: 'Guia de desenvolvimento' },\n { key: 'q', label: 'Voltar', description: 'Sair do MCP Hub' },\n ]));\n\n if (action === null) {\n console.log(colorize('\\nSaindo do MCP Hub...\\n', 'muted'));\n return;\n }\n\n switch (action) {\n case '1':\n await this.listServers();\n break;\n case '2':\n await this.listTools();\n break;\n case '3':\n await this.addMcpWizard(smartInput);\n break;\n case '4':\n await this.removeMcpWizard(smartInput);\n break;\n case '5':\n this.printWhatIsMcp();\n break;\n case '6':\n this.printHowToCreate();\n break;\n case 'q':\n return;\n }\n }\n }\n\n private async withEsc<T>(fn: () => Promise<T>): Promise<T | null> {\n try {\n return await fn();\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error.name === 'CancelledPromptError') {\n return null;\n }\n throw error;\n }\n }\n\n private async listServers(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('MCP Servers', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor MCP configurado', 'muted')}\\r\\n\\n`);\n w(` ${colorize('O que é MCP?', 'cyan')} → /mcp what\\r\\n`);\n w(` ${colorize('Como adicionar?', 'cyan')} → /mcp add\\r\\n\\n`);\n return;\n }\n\n for (const s of summaries) {\n const statusIcon = s.status === 'connected' ? colorize('●', 'success') : colorize('○', 'error');\n const statusText = s.status === 'connected' ? colorize('conectado', 'success') : colorize(s.status, 'error');\n \n w(` ${statusIcon} ${colorize(s.name, 'cyan')} ${colorize(`(${s.transport})`, 'muted')}\\r\\n`);\n w(` Status: ${statusText} | Ferramentas: ${s.toolCount}\\r\\n`);\n \n if (s.toolCount > 0) {\n const toolNames = s.toolDescriptions.slice(0, 3).map(t => t.name.split('_').pop()).join(', ');\n const more = s.toolCount > 3 ? ` +${s.toolCount - 3} mais` : '';\n w(` Tools: ${colorize(toolNames + more, 'muted')}\\r\\n`);\n }\n w('\\r\\n');\n }\n }\n\n private async listTools(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w('\\r\\n');\n w(colorize(Icons.tool + ' ', 'accent') + colorize(`MCP Tools (${totalTools})`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n');\n\n if (totalTools === 0) {\n w(`\\n ${colorize('Nenhuma ferramenta disponível', 'muted')}\\r\\n\\n`);\n return;\n }\n\n for (const server of summaries) {\n if (server.toolCount === 0) continue;\n \n w(`\\n ${colorize(server.name, 'bold')} ${colorize(`(${server.transport}, ${server.status})`, 'muted')}\\r\\n`);\n w(` ${colorize(Box.horizontal.repeat(30), 'subtle')}\\r\\n`);\n \n for (const td of server.toolDescriptions) {\n const shortName = td.name.replace(`${server.name}_`, '');\n w(` ${colorize('•', 'primary')} ${colorize(shortName, 'cyan')}\\r\\n`);\n const desc = td.description.length > 70 \n ? td.description.slice(0, 67) + '...' \n : td.description;\n w(` ${colorize(desc, 'muted')}\\r\\n`);\n }\n }\n w('\\r\\n');\n }\n\n private async addMcpWizard(smartInput: SmartInput): Promise<void> {\n const fs = require('fs');\n const path = require('path');\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n fs.mkdirSync(mcpDir, { recursive: true });\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Adicionar Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(30), 'subtle') + '\\r\\n\\r\\n');\n\n console.log(colorize('(pressione ESC para cancelar a qualquer momento)\\r\\n', 'muted'));\n\n const category = await selectWithEsc<McpCategory | 'custom'>({\n message: 'Escolha uma categoria:',\n choices: [\n { name: '🔧 Dev Tools (GitHub, Linear, Jira, Sentry, Docker)', value: 'dev' as McpCategory },\n { name: '🎨 Design (Figma)', value: 'design' as McpCategory },\n { name: '🗄️ Data (PostgreSQL, MongoDB, Redis, Supabase)', value: 'data' as McpCategory },\n { name: '🔍 Search (Brave, Exa, Perplexity, Context7)', value: 'search' as McpCategory },\n { name: '☁️ Cloud (Vercel, Cloudflare, AWS S3)', value: 'cloud' as McpCategory },\n { name: '📋 Productivity (Slack, Notion, Google Drive, Maps)', value: 'productivity' as McpCategory },\n { name: '💳 Payments (Stripe, Twilio)', value: 'payments' as McpCategory },\n { name: '🌐 Browser (Puppeteer)', value: 'browser' as McpCategory },\n { name: '📁 Filesystem', value: 'filesystem' as McpCategory },\n { name: '➕ Configuração manual', value: 'custom' },\n ],\n });\n\n if (category === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n let config: Record<string, any> = {};\n let name: string;\n\n if (category !== 'custom') {\n const templates = getTemplatesByCategory(category);\n const templateId = await selectWithEsc<string>({\n message: 'Escolha um servidor:',\n choices: templates.map(t => ({\n name: `${t.name} - ${t.description}`,\n value: t.id,\n })),\n });\n\n if (templateId === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n const template = getTemplate(templateId);\n if (!template) {\n w(colorize('\\r\\n ❌ Template não encontrado.\\r\\n\\r\\n', 'error'));\n return;\n }\n\n name = template.id;\n config = JSON.parse(JSON.stringify(template.config)); // Deep clone\n\n if (template.credentials.length > 0) {\n w(`\\r\\n${colorize('📝 Configuração:', 'bold')}\\r\\n`);\n\n for (const cred of template.credentials) {\n if (cred.isArg) {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n config.args.push(value.trim());\n }\n } else {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n if (!config.env) config.env = {};\n config.env[cred.envVar] = value.trim();\n }\n }\n }\n }\n\n const filePath = path.join(mcpDir, `${name}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name]: config }, null, 2));\n w(`\\r\\n${colorize('✓', 'success')} MCP configurado: ${colorize(filePath, 'accent')}\\r\\n`);\n\n if (template.config.type === 'http') {\n w(colorize('\\r\\n ⚠️ Servidor HTTP/OAuth detectado!\\r\\n', 'warning'));\n w(colorize(' Autenticação pode ser necessária após conectar.\\r\\n\\r\\n', 'muted'));\n }\n\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n return;\n }\n\n const nameInput = await inputWithEsc({\n message: colorize(' Nome do servidor: ', 'cyan'),\n });\n if (nameInput === null || !nameInput.trim()) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n name = nameInput;\n\n const typeChoice = await smartInput.askChoice(' Tipo de transporte:', [\n { key: 'stdio', label: 'stdio', description: 'Processo local (npx, node, python)' },\n { key: 'http', label: 'http', description: 'Endpoint HTTP' },\n ]);\n\n config.type = typeChoice;\n\n if (typeChoice === 'stdio') {\n const command = await inputWithEsc({\n message: colorize(' Comando: ', 'cyan'),\n });\n if (command === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n const argsInput = await inputWithEsc({\n message: colorize(' Argumentos (separados por vírgula): ', 'cyan'),\n });\n if (argsInput === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n config.command = command.trim();\n config.args = argsInput.trim() ? argsInput.split(',').map((a: string) => a.trim()) : [];\n \n const hasEnv = await confirmWithEsc({ message: 'Precisa de variáveis de ambiente?', default: false });\n if (hasEnv === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (hasEnv) {\n config.env = {};\n while (true) {\n const key = await inputWithEsc({\n message: colorize(' Nome da variável (ou vazio para parar): ', 'cyan'),\n });\n if (key === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (!key) break;\n \n const value = await inputWithEsc({\n message: colorize(` Valor para ${key}: `, 'cyan'),\n });\n if (value === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.env[key] = value;\n }\n }\n } else {\n const endpoint = await inputWithEsc({\n message: colorize(' URL do endpoint: ', 'cyan'),\n });\n if (endpoint === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.endpoint = endpoint.trim();\n }\n\n const filePath = path.join(mcpDir, `${name.trim().toLowerCase()}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name.trim()]: config }, null, 2));\n\n w(`\\r\\n${colorize('✓', 'success')} Config salva: ${colorize(filePath, 'accent')}\\r\\n`);\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n }\n\n private async removeMcpWizard(smartInput: SmartInput): Promise<void> {\n const fs = require('fs');\n const path = require('path');\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const files = fs.readdirSync(mcpDir).filter((f: string) => f.endsWith('.json'));\n if (files.length === 0) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Remover Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(25), 'subtle') + '\\r\\n\\n');\n\n const toRemove = await select<string>({\n message: 'Qual servidor remover?',\n choices: files.map((f: string) => ({ \n name: f.replace('.json', ''), \n value: f \n })),\n });\n\n const confirmRemove = await confirm({\n message: `Tem certeza que deseja remover \"${toRemove.replace('.json', '')}\"?`,\n default: false,\n });\n\n if (confirmRemove) {\n fs.unlinkSync(path.join(mcpDir, toRemove));\n console.log(colorize(`\\n✓ Servidor removido\\n`, 'success'));\n }\n }\n\n private async testMcpTool(smartInput: SmartInput): Promise<void> {\n console.log(colorize('\\nEm breve!\\n', 'muted'));\n }\n\n private printWhatIsMcp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ O que é MCP?', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Model Context Protocol (MCP)', 'cyan')} é um protocolo aberto\\n`);\n w(`que permite que assistentes de IA se conectem a fontes de dados\\n`);\n w(`e ferramentas externas de forma padronizada.\\n\\n`);\n\n w(`${colorize('Como funciona:', 'bold')}\\n`);\n w(` ${colorize('1.', 'primary')} Um servidor MCP expõe ferramentas (tools)\\n`);\n w(` ${colorize('2.', 'primary')} O Cast se conecta a esse servidor\\n`);\n w(` ${colorize('3.', 'primary')} A IA pode chamar essas ferramentas automaticamente\\n\\n`);\n\n w(`${colorize('Exemplos de uso:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} GitHub: criar issues, ler PRs, fazer commits\\n`);\n w(` ${colorize('•', 'muted')} Filesystem: acessar arquivos fora do projeto\\n`);\n w(` ${colorize('•', 'muted')} PostgreSQL: consultar bancos de dados\\n`);\n w(` ${colorize('•', 'muted')} Brave: buscar informações atualizadas na web\\n\\n`);\n\n w(`${colorize('Vantagens:', 'bold')}\\n`);\n w(` ${colorize('✓', 'success')} Segurança: o usuário controla o acesso\\n`);\n w(` ${colorize('✓', 'success')} Flexibilidade: qualquer linguagem/framework\\n`);\n w(` ${colorize('✓', 'success')} Padrão aberto: não é vendor lock-in\\n\\n`);\n\n w(`${colorize('Quer criar seu próprio MCP?', 'accent')}\\n`);\n w(` → /mcp help (guia completo)\\n`);\n w(` → https://modelcontextprotocol.io\\n\\n`);\n }\n\n private printHowToCreate(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('🛠️ Como Criar um Servidor MCP', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Opção 1: TypeScript/JavaScript (mais fácil)', 'bold')}\\n\\n`);\n w(`${colorize('1.', 'primary')} Crie um projeto:\\n`);\n w(` ${colorize('mkdir meu-mcp && cd meu-mcp', 'muted')}\\n`);\n w(` ${colorize('npm init -y', 'muted')}\\n`);\n w(` ${colorize('npm install @modelcontextprotocol/sdk zod', 'muted')}\\n\\n`);\n\n w(`${colorize('2.', 'primary')} Crie o servidor (index.ts):\\n`);\n w(colorize(` import { Server } from '@modelcontextprotocol/sdk/server/index.js';\\n`, 'muted'));\n w(colorize(` import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const server = new Server(\\n`, 'muted'));\n w(colorize(` { name: 'meu-mcp', version: '1.0.0' },\\n`, 'muted'));\n w(colorize(` { capabilities: { tools: {} } }\\n`, 'muted'));\n w(colorize(` );\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(ListToolsRequestSchema, async () => ({\\n`, 'muted'));\n w(colorize(` tools: [{\\n`, 'muted'));\n w(colorize(` name: 'minha_tool',\\n`, 'muted'));\n w(colorize(` description: 'Faz algo útil',\\n`, 'muted'));\n w(colorize(` inputSchema: {\\n`, 'muted'));\n w(colorize(` type: 'object',\\n`, 'muted'));\n w(colorize(` properties: { nome: { type: 'string' } },\\n`, 'muted'));\n w(colorize(` required: ['nome']\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }]\\n`, 'muted'));\n w(colorize(` }));\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(CallToolRequestSchema, async (req) => {\\n`, 'muted'));\n w(colorize(` const args = req.params.arguments;\\n`, 'muted'));\n w(colorize(` return { content: [{ type: 'text', text: 'Resultado!' }] };\\n`, 'muted'));\n w(colorize(` });\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const transport = new StdioServerTransport();\\n`, 'muted'));\n w(colorize(` await server.connect(transport);\\n`, 'muted'));\n w(`\\n`);\n\n w(`${colorize('Opção 2: Python', 'bold')}\\n\\n`);\n w(` ${colorize('pip install mcp', 'muted')}\\n\\n`);\n w(` Veja: ${colorize('https://github.com/modelcontextprotocol/python-sdk', 'accent')}\\n\\n`);\n\n w(`${colorize('3.', 'primary')} Publique no npm (opcional):\\n`);\n w(` Outros poderão usar: ${colorize('npx -y seu-mcp-server', 'muted')}\\n\\n`);\n\n w(`${colorize('Recursos:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} Documentação: https://modelcontextprotocol.io\\n`);\n w(` ${colorize('•', 'muted')} SDK TypeScript: @modelcontextprotocol/sdk\\n`);\n w(` ${colorize('•', 'muted')} Exemplos: github.com/modelcontextprotocol/servers\\n\\n`);\n }\n\n private printMcpHelp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ MCP - Guia Rápido', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(40), 'subtle')}\\n\\n`);\n\n w(`${colorize('Comandos:', 'bold')}\\n`);\n w(` ${colorize('/mcp', 'cyan')} → Menu interativo\\n`);\n w(` ${colorize('/mcp list', 'cyan')} → Ver servidores\\n`);\n w(` ${colorize('/mcp tools', 'cyan')} → Ver ferramentas\\n`);\n w(` ${colorize('/mcp add', 'cyan')} → Adicionar servidor\\n`);\n w(` ${colorize('/mcp remove', 'cyan')} → Remover servidor\\n`);\n w(` ${colorize('/mcp what', 'cyan')} → O que é MCP?\\n\\n`);\n\n w(`${colorize('Servidores populares:', 'bold')}\\n`);\n w(` ${colorize('@modelcontextprotocol/server-github', 'muted')}\\n`);\n w(` Acesse repositórios, issues, PRs\\n\\n`);\n w(` ${colorize('@figma/mcp-server (HTTP)', 'muted')}\\n`);\n w(` Acesse designs e componentes (requer OAuth)\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-filesystem', 'muted')}\\n`);\n w(` Leia/escrita de arquivos locais\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-postgres', 'muted')}\\n`);\n w(` Consulte bancos PostgreSQL\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-brave-search', 'muted')}\\n`);\n w(` Busca na web via Brave\\n\\n`);\n\n w(`${colorize('Servidores HTTP (OAuth):', 'bold')}\\n`);\n w(` Alguns servidores como Figma usam HTTP + OAuth.\\n`);\n w(` Após adicionar, a autenticação será solicitada.\\n\\n`);\n\n w(`${colorize('Configuração manual:', 'bold')}\\n`);\n w(` Crie: ${colorize('.cast/mcp/nome.json', 'cyan')}\\n\\n`);\n w(colorize(` {\\n`, 'muted'));\n w(colorize(` \"meu-mcp\": {\\n`, 'muted'));\n w(colorize(` \"type\": \"stdio\",\\n`, 'muted'));\n w(colorize(` \"command\": \"npx\",\\n`, 'muted'));\n w(colorize(` \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\\n`, 'muted'));\n w(colorize(` \"env\": { \"GITHUB_TOKEN\": \"...\" }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(`\\n`);\n }\n}\n"],"names":["McpCommandsService","cmdMcp","args","smartInput","sub","w","s","process","stdout","write","pause","showMcpMenu","listServers","listTools","addMcpWizard","removeMcpWizard","testMcpTool","printWhatIsMcp","printMcpHelp","error","CancelledPromptError","name","console","log","colorize","resume","Box","horizontal","repeat","summaries","mcpRegistry","getServerSummaries","totalTools","reduce","sum","toolCount","length","action","withEsc","askChoice","key","label","description","printHowToCreate","fn","Icons","cloud","statusIcon","status","statusText","transport","toolNames","toolDescriptions","slice","map","t","split","pop","join","more","tool","server","td","shortName","replace","desc","fs","require","path","mcpDir","cwd","existsSync","mkdirSync","recursive","category","selectWithEsc","message","choices","value","config","templates","getTemplatesByCategory","templateId","id","template","getTemplate","JSON","parse","stringify","credentials","cred","isArg","question","placeholder","trim","required","push","env","envVar","filePath","writeFileSync","type","nameInput","inputWithEsc","typeChoice","command","argsInput","a","hasEnv","confirmWithEsc","default","endpoint","toLowerCase","files","readdirSync","filter","f","endsWith","toRemove","select","confirmRemove","confirm","unlinkSync","mcpClient"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/modules/repl/services/commands/mcp-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Colors, colorize, Box, Icons } from '../../utils/theme';\nimport { McpRegistryService } from '../../../mcp/services/mcp-registry.service';\nimport { McpClientService } from '../../../mcp/services/mcp-client.service';\nimport {\n selectWithEsc,\n inputWithEsc,\n confirmWithEsc,\n CancelledPromptError,\n} from '../../utils/prompts-with-esc';\nimport { getAllTemplates, getTemplatesByCategory, getTemplate, McpCategory } from '../../../mcp/catalog/mcp-templates';\n\ninterface SmartInput {\n askChoice: (question: string, choices: { key: string; label: string; description: string }[]) => Promise<string>;\n question: (prompt: string) => Promise<string>;\n}\n\n@Injectable()\nexport class McpCommandsService {\n constructor(\n private readonly mcpRegistry: McpRegistryService,\n private readonly mcpClient: McpClientService,\n ) {}\n\n async cmdMcp(args: string[], smartInput: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const sub = args[0] || 'menu';\n\n // 'menu' uses SmartInput directly — must NOT pause before it\n if (sub === 'menu') {\n try {\n await this.showMcpMenu(smartInput);\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n } else {\n throw error;\n }\n }\n return;\n }\n\n // Other sub-commands use inquirer and need pause/resume\n smartInput.pause();\n try {\n switch (sub) {\n case 'list':\n await this.listServers();\n break;\n case 'tools':\n await this.listTools();\n break;\n case 'add':\n await this.addMcpWizard(smartInput);\n break;\n case 'remove':\n await this.removeMcpWizard(smartInput);\n break;\n case 'test':\n await this.testMcpTool(smartInput);\n break;\n case 'what':\n case 'about':\n this.printWhatIsMcp();\n break;\n case 'help':\n default:\n this.printMcpHelp();\n break;\n }\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n return;\n }\n throw error;\n } finally {\n smartInput.resume();\n }\n }\n\n private async showMcpMenu(smartInput: SmartInput): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n\n while (true) {\n w(`\\n${colorize('☁️ MCP Hub', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(30), 'subtle')}\\n\\n`);\n\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w(`${colorize('Servidores:', 'muted')} ${summaries.length} `);\n w(`${colorize('Ferramentas:', 'muted')} ${totalTools}\\n\\n`);\n\n console.log(colorize('(pressione ESC para voltar ao chat)\\n', 'muted'));\n\n const action = await this.withEsc(() => smartInput.askChoice('O que deseja fazer?', [\n { key: '1', label: 'Ver servidores', description: 'Listar MCPs configurados' },\n { key: '2', label: 'Ver ferramentas', description: 'Todas as tools disponíveis' },\n { key: '3', label: 'Conectar servidores', description: 'Conectar/reconectar MCPs configurados' },\n { key: '4', label: 'Adicionar servidor', description: 'Configurar novo MCP' },\n { key: '5', label: 'Remover servidor', description: 'Desconectar MCP' },\n { key: '6', label: 'O que é MCP?', description: 'Entenda o protocolo' },\n { key: 'q', label: 'Voltar', description: 'Sair do MCP Hub' },\n ]));\n\n if (action === null) {\n console.log(colorize('\\nSaindo do MCP Hub...\\n', 'muted'));\n return;\n }\n\n let pause = true;\n switch (action) {\n case '1':\n await this.listServers();\n break;\n case '2':\n await this.listTools();\n break;\n case '3':\n await this.connectServers(smartInput as any);\n break;\n case '4':\n await this.addMcpWizard(smartInput);\n pause = false;\n break;\n case '5':\n await this.removeMcpWizard(smartInput);\n pause = false;\n break;\n case '6':\n this.printWhatIsMcp();\n break;\n case 'q':\n return;\n }\n\n if (pause) {\n await smartInput.question(colorize('\\nEnter para continuar...', 'muted'));\n }\n }\n }\n\n private async withEsc<T>(fn: () => Promise<T>): Promise<T | null> {\n try {\n return await fn();\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error.name === 'CancelledPromptError') {\n return null;\n }\n throw error;\n }\n }\n\n private async connectServers(smartInput?: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Conectar Servidores MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor configurado. Use a opção Adicionar servidor.', 'muted')}\\r\\n\\n`);\n return;\n }\n\n w(` ${colorize('Conectando ' + summaries.length + ' servidor(es)...', 'muted')}\\r\\n\\n`);\n\n const results = await this.mcpRegistry.connectAll();\n\n for (const [name, ok] of results.entries()) {\n const icon = ok ? colorize('●', 'success') : colorize('○', 'error');\n const status = ok ? colorize('conectado', 'success') : colorize('falhou', 'error');\n w(` ${icon} ${colorize(name, 'cyan')} — ${status}\\r\\n`);\n\n if (!ok) {\n const config = this.mcpRegistry.getConfig(name);\n\n // OAuth/HTTP: the SDK already ran the full flow. Failure = server blocked DCR\n if (config?.type === 'http') {\n w(`\\r\\n ${colorize('⚠️ ' + name + ': OAuth bloqueado pelo servidor', 'warning')}\\r\\n`);\n w(` Este servidor só aceita clientes pré-aprovados (ex: VS Code, Cursor).\\r\\n`);\n w(` Alternativa: use o proxy mcp-remote para redirecionar via cliente aprovado.\\r\\n\\r\\n`);\n\n // stdio server — check for missing credentials\n } else if (config?.type === 'stdio' && smartInput) {\n const template = getTemplate(name);\n if (template?.credentials?.length) {\n const missing = template.credentials.filter(cred => {\n if (cred.isArg) return false; // args are set at add time\n return !config.env?.[cred.envVar];\n });\n\n if (missing.length > 0) {\n w(`\\r\\n ${colorize('🔑 Credenciais necessárias para ' + name, 'warning')}\\r\\n\\r\\n`);\n\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n const filePath = path.join(mcpDir, `${name}.json`);\n const updatedConfig = JSON.parse(JSON.stringify(config));\n if (!updatedConfig.env) updatedConfig.env = {};\n\n for (const cred of missing) {\n const value = await smartInput.question(\n colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'),\n );\n if (value.trim()) {\n updatedConfig.env[cred.envVar] = value.trim();\n }\n }\n\n // Save updated config\n fs.writeFileSync(filePath, JSON.stringify({ [name]: updatedConfig }, null, 2));\n this.mcpRegistry.registerMcp(name, updatedConfig);\n\n // Retry connection\n w(`\\r\\n ${colorize('Reconectando ' + name + '...', 'muted')}\\r\\n`);\n const retryOk = await this.mcpRegistry.connectMcp(name);\n const retryIcon = retryOk ? colorize('●', 'success') : colorize('○', 'error');\n const retryStatus = retryOk ? colorize('conectado', 'success') : colorize('falhou — verifique a credencial', 'error');\n w(` ${retryIcon} ${colorize(name, 'cyan')} — ${retryStatus}\\r\\n\\r\\n`);\n } else {\n w(` ${colorize('Verifique se o servidor está disponível e tente novamente.', 'muted')}\\r\\n\\r\\n`);\n }\n }\n }\n }\n }\n\n const finalResults = await this.mcpRegistry.connectAll();\n const connected = [...finalResults.values()].filter(Boolean).length;\n w(` ${colorize(`${connected}/${finalResults.size} conectado(s)`, connected === finalResults.size ? 'success' : 'warning')}\\r\\n\\r\\n`);\n }\n\n private async listServers(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('MCP Servers', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor MCP configurado', 'muted')}\\r\\n\\n`);\n w(` ${colorize('O que é MCP?', 'cyan')} → /mcp what\\r\\n`);\n w(` ${colorize('Como adicionar?', 'cyan')} → /mcp add\\r\\n\\n`);\n return;\n }\n\n for (const s of summaries) {\n const statusIcon = s.status === 'connected' ? colorize('●', 'success') : colorize('○', 'error');\n const statusText = s.status === 'connected' ? colorize('conectado', 'success') : colorize(s.status, 'error');\n \n w(` ${statusIcon} ${colorize(s.name, 'cyan')} ${colorize(`(${s.transport})`, 'muted')}\\r\\n`);\n w(` Status: ${statusText} | Ferramentas: ${s.toolCount}\\r\\n`);\n \n if (s.toolCount > 0) {\n const toolNames = s.toolDescriptions.slice(0, 3).map(t => t.name.split('_').pop()).join(', ');\n const more = s.toolCount > 3 ? ` +${s.toolCount - 3} mais` : '';\n w(` Tools: ${colorize(toolNames + more, 'muted')}\\r\\n`);\n }\n w('\\r\\n');\n }\n }\n\n private async listTools(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w('\\r\\n');\n w(colorize(Icons.tool + ' ', 'accent') + colorize(`MCP Tools (${totalTools})`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n');\n\n if (totalTools === 0) {\n w(`\\n ${colorize('Nenhuma ferramenta disponível', 'muted')}\\r\\n\\n`);\n return;\n }\n\n for (const server of summaries) {\n if (server.toolCount === 0) continue;\n \n w(`\\n ${colorize(server.name, 'bold')} ${colorize(`(${server.transport}, ${server.status})`, 'muted')}\\r\\n`);\n w(` ${colorize(Box.horizontal.repeat(30), 'subtle')}\\r\\n`);\n \n for (const td of server.toolDescriptions) {\n const shortName = td.name.replace(`${server.name}_`, '');\n w(` ${colorize('•', 'primary')} ${colorize(shortName, 'cyan')}\\r\\n`);\n const desc = td.description.length > 70 \n ? td.description.slice(0, 67) + '...' \n : td.description;\n w(` ${colorize(desc, 'muted')}\\r\\n`);\n }\n }\n w('\\r\\n');\n }\n\n private async addMcpWizard(smartInput: SmartInput): Promise<void> {\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n fs.mkdirSync(mcpDir, { recursive: true });\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Adicionar Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(30), 'subtle') + '\\r\\n\\r\\n');\n\n console.log(colorize('(pressione ESC para cancelar a qualquer momento)\\r\\n', 'muted'));\n\n const category = await selectWithEsc<McpCategory | 'custom'>({\n message: 'Escolha uma categoria:',\n choices: [\n { name: '🔧 Dev Tools (GitHub, Linear, Jira, Sentry, Docker)', value: 'dev' as McpCategory },\n { name: '🎨 Design (Figma)', value: 'design' as McpCategory },\n { name: '🗄️ Data (PostgreSQL, MongoDB, Redis, Supabase)', value: 'data' as McpCategory },\n { name: '🔍 Search (Brave, Exa, Perplexity, Context7)', value: 'search' as McpCategory },\n { name: '☁️ Cloud (Vercel, Cloudflare, AWS S3)', value: 'cloud' as McpCategory },\n { name: '📋 Productivity (Slack, Notion, Google Drive, Maps)', value: 'productivity' as McpCategory },\n { name: '💳 Payments (Stripe, Twilio)', value: 'payments' as McpCategory },\n { name: '🌐 Browser (Puppeteer)', value: 'browser' as McpCategory },\n { name: '📁 Filesystem', value: 'filesystem' as McpCategory },\n { name: '➕ Configuração manual', value: 'custom' },\n ],\n });\n\n if (category === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n let config: Record<string, any> = {};\n let name: string;\n\n if (category !== 'custom') {\n const templates = getTemplatesByCategory(category);\n const templateId = await selectWithEsc<string>({\n message: 'Escolha um servidor:',\n choices: templates.map(t => ({\n name: `${t.name} - ${t.description}`,\n value: t.id,\n })),\n });\n\n if (templateId === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n const template = getTemplate(templateId);\n if (!template) {\n w(colorize('\\r\\n ❌ Template não encontrado.\\r\\n\\r\\n', 'error'));\n return;\n }\n\n name = template.id;\n config = JSON.parse(JSON.stringify(template.config)); // Deep clone\n\n if (template.credentials.length > 0) {\n w(`\\r\\n${colorize('📝 Configuração:', 'bold')}\\r\\n`);\n\n for (const cred of template.credentials) {\n if (cred.isArg) {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n config.args.push(value.trim());\n }\n } else {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n if (!config.env) config.env = {};\n config.env[cred.envVar] = value.trim();\n }\n }\n }\n }\n\n const filePath = path.join(mcpDir, `${name}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name]: config }, null, 2));\n w(`\\r\\n${colorize('✓', 'success')} MCP configurado: ${colorize(filePath, 'accent')}\\r\\n`);\n\n if (name === 'figma') {\n w('\\r\\n');\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w(colorize(' Tutorial — Figma Desktop MCP\\r\\n', 'bold'));\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w('\\r\\n');\n w(colorize(' Passo 1: ', 'accent') + 'Instale o Figma Desktop\\r\\n');\n w(colorize(' https://www.figma.com/downloads/\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 2: ', 'accent') + 'Abra qualquer arquivo de Design no Figma\\r\\n');\n w('\\r\\n');\n w(colorize(' Passo 3: ', 'accent') + 'Ative o Dev Mode\\r\\n');\n w(colorize(' Clique no botão \"<>\" no canto superior direito\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 4: ', 'accent') + 'Habilite o servidor MCP\\r\\n');\n w(colorize(' Painel Inspect → seção MCP\\r\\n', 'muted'));\n w(colorize(' Ative \"Enable desktop MCP server\"\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 5: ', 'accent') + 'Conecte via Cast\\r\\n');\n w(colorize(' Reinicie o Cast e use /mcp → Conectar servidores\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w('\\r\\n');\n } else if (template.config.type === 'http') {\n w(colorize('\\r\\n ⚠️ Servidor HTTP/OAuth detectado!\\r\\n', 'warning'));\n w(colorize(' Autenticação pode ser necessária após conectar.\\r\\n\\r\\n', 'muted'));\n }\n\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n return;\n }\n\n const nameInput = await inputWithEsc({\n message: colorize(' Nome do servidor: ', 'cyan'),\n });\n if (nameInput === null || !nameInput.trim()) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n name = nameInput;\n\n const typeChoice = await smartInput.askChoice(' Tipo de transporte:', [\n { key: 'stdio', label: 'stdio', description: 'Processo local (npx, node, python)' },\n { key: 'http', label: 'http', description: 'Endpoint HTTP' },\n ]);\n\n config.type = typeChoice;\n\n if (typeChoice === 'stdio') {\n const command = await inputWithEsc({\n message: colorize(' Comando: ', 'cyan'),\n });\n if (command === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n const argsInput = await inputWithEsc({\n message: colorize(' Argumentos (separados por vírgula): ', 'cyan'),\n });\n if (argsInput === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n config.command = command.trim();\n config.args = argsInput.trim() ? argsInput.split(',').map((a: string) => a.trim()) : [];\n \n const hasEnv = await confirmWithEsc({ message: 'Precisa de variáveis de ambiente?', default: false });\n if (hasEnv === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (hasEnv) {\n config.env = {};\n while (true) {\n const key = await inputWithEsc({\n message: colorize(' Nome da variável (ou vazio para parar): ', 'cyan'),\n });\n if (key === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (!key) break;\n \n const value = await inputWithEsc({\n message: colorize(` Valor para ${key}: `, 'cyan'),\n });\n if (value === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.env[key] = value;\n }\n }\n } else {\n const endpoint = await inputWithEsc({\n message: colorize(' URL do endpoint: ', 'cyan'),\n });\n if (endpoint === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.endpoint = endpoint.trim();\n }\n\n const filePath = path.join(mcpDir, `${name.trim().toLowerCase()}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name.trim()]: config }, null, 2));\n\n w(`\\r\\n${colorize('✓', 'success')} Config salva: ${colorize(filePath, 'accent')}\\r\\n`);\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n }\n\n private async removeMcpWizard(smartInput: SmartInput): Promise<void> {\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const files = fs.readdirSync(mcpDir).filter((f: string) => f.endsWith('.json'));\n if (files.length === 0) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Remover Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(25), 'subtle') + '\\r\\n\\n');\n\n const toRemove = await select<string>({\n message: 'Qual servidor remover?',\n choices: files.map((f: string) => ({ \n name: f.replace('.json', ''), \n value: f \n })),\n });\n\n const confirmRemove = await confirm({\n message: `Tem certeza que deseja remover \"${toRemove.replace('.json', '')}\"?`,\n default: false,\n });\n\n if (confirmRemove) {\n fs.unlinkSync(path.join(mcpDir, toRemove));\n console.log(colorize(`\\n✓ Servidor removido\\n`, 'success'));\n }\n }\n\n private async testMcpTool(smartInput: SmartInput): Promise<void> {\n console.log(colorize('\\nEm breve!\\n', 'muted'));\n }\n\n private printWhatIsMcp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ O que é MCP?', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Model Context Protocol (MCP)', 'cyan')} é um protocolo aberto\\n`);\n w(`que permite que assistentes de IA se conectem a fontes de dados\\n`);\n w(`e ferramentas externas de forma padronizada.\\n\\n`);\n\n w(`${colorize('Como funciona:', 'bold')}\\n`);\n w(` ${colorize('1.', 'primary')} Um servidor MCP expõe ferramentas (tools)\\n`);\n w(` ${colorize('2.', 'primary')} O Cast se conecta a esse servidor\\n`);\n w(` ${colorize('3.', 'primary')} A IA pode chamar essas ferramentas automaticamente\\n\\n`);\n\n w(`${colorize('Exemplos de uso:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} GitHub: criar issues, ler PRs, fazer commits\\n`);\n w(` ${colorize('•', 'muted')} Filesystem: acessar arquivos fora do projeto\\n`);\n w(` ${colorize('•', 'muted')} PostgreSQL: consultar bancos de dados\\n`);\n w(` ${colorize('•', 'muted')} Brave: buscar informações atualizadas na web\\n\\n`);\n\n w(`${colorize('Vantagens:', 'bold')}\\n`);\n w(` ${colorize('✓', 'success')} Segurança: o usuário controla o acesso\\n`);\n w(` ${colorize('✓', 'success')} Flexibilidade: qualquer linguagem/framework\\n`);\n w(` ${colorize('✓', 'success')} Padrão aberto: não é vendor lock-in\\n\\n`);\n\n w(`${colorize('Quer criar seu próprio MCP?', 'accent')}\\n`);\n w(` → /mcp help (guia completo)\\n`);\n w(` → https://modelcontextprotocol.io\\n\\n`);\n }\n\n private printHowToCreate(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('🛠️ Como Criar um Servidor MCP', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Opção 1: TypeScript/JavaScript (mais fácil)', 'bold')}\\n\\n`);\n w(`${colorize('1.', 'primary')} Crie um projeto:\\n`);\n w(` ${colorize('mkdir meu-mcp && cd meu-mcp', 'muted')}\\n`);\n w(` ${colorize('npm init -y', 'muted')}\\n`);\n w(` ${colorize('npm install @modelcontextprotocol/sdk zod', 'muted')}\\n\\n`);\n\n w(`${colorize('2.', 'primary')} Crie o servidor (index.ts):\\n`);\n w(colorize(` import { Server } from '@modelcontextprotocol/sdk/server/index.js';\\n`, 'muted'));\n w(colorize(` import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const server = new Server(\\n`, 'muted'));\n w(colorize(` { name: 'meu-mcp', version: '1.0.0' },\\n`, 'muted'));\n w(colorize(` { capabilities: { tools: {} } }\\n`, 'muted'));\n w(colorize(` );\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(ListToolsRequestSchema, async () => ({\\n`, 'muted'));\n w(colorize(` tools: [{\\n`, 'muted'));\n w(colorize(` name: 'minha_tool',\\n`, 'muted'));\n w(colorize(` description: 'Faz algo útil',\\n`, 'muted'));\n w(colorize(` inputSchema: {\\n`, 'muted'));\n w(colorize(` type: 'object',\\n`, 'muted'));\n w(colorize(` properties: { nome: { type: 'string' } },\\n`, 'muted'));\n w(colorize(` required: ['nome']\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }]\\n`, 'muted'));\n w(colorize(` }));\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(CallToolRequestSchema, async (req) => {\\n`, 'muted'));\n w(colorize(` const args = req.params.arguments;\\n`, 'muted'));\n w(colorize(` return { content: [{ type: 'text', text: 'Resultado!' }] };\\n`, 'muted'));\n w(colorize(` });\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const transport = new StdioServerTransport();\\n`, 'muted'));\n w(colorize(` await server.connect(transport);\\n`, 'muted'));\n w(`\\n`);\n\n w(`${colorize('Opção 2: Python', 'bold')}\\n\\n`);\n w(` ${colorize('pip install mcp', 'muted')}\\n\\n`);\n w(` Veja: ${colorize('https://github.com/modelcontextprotocol/python-sdk', 'accent')}\\n\\n`);\n\n w(`${colorize('3.', 'primary')} Publique no npm (opcional):\\n`);\n w(` Outros poderão usar: ${colorize('npx -y seu-mcp-server', 'muted')}\\n\\n`);\n\n w(`${colorize('Recursos:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} Documentação: https://modelcontextprotocol.io\\n`);\n w(` ${colorize('•', 'muted')} SDK TypeScript: @modelcontextprotocol/sdk\\n`);\n w(` ${colorize('•', 'muted')} Exemplos: github.com/modelcontextprotocol/servers\\n\\n`);\n }\n\n private printMcpHelp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ MCP - Guia Rápido', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(40), 'subtle')}\\n\\n`);\n\n w(`${colorize('Comandos:', 'bold')}\\n`);\n w(` ${colorize('/mcp', 'cyan')} → Menu interativo\\n`);\n w(` ${colorize('/mcp list', 'cyan')} → Ver servidores\\n`);\n w(` ${colorize('/mcp tools', 'cyan')} → Ver ferramentas\\n`);\n w(` ${colorize('/mcp add', 'cyan')} → Adicionar servidor\\n`);\n w(` ${colorize('/mcp remove', 'cyan')} → Remover servidor\\n`);\n w(` ${colorize('/mcp what', 'cyan')} → O que é MCP?\\n\\n`);\n\n w(`${colorize('Servidores populares:', 'bold')}\\n`);\n w(` ${colorize('@modelcontextprotocol/server-github', 'muted')}\\n`);\n w(` Acesse repositórios, issues, PRs\\n\\n`);\n w(` ${colorize('@figma/mcp-server (HTTP)', 'muted')}\\n`);\n w(` Acesse designs e componentes (requer OAuth)\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-filesystem', 'muted')}\\n`);\n w(` Leia/escrita de arquivos locais\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-postgres', 'muted')}\\n`);\n w(` Consulte bancos PostgreSQL\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-brave-search', 'muted')}\\n`);\n w(` Busca na web via Brave\\n\\n`);\n\n w(`${colorize('Servidores HTTP (OAuth):', 'bold')}\\n`);\n w(` Alguns servidores como Figma usam HTTP + OAuth.\\n`);\n w(` Após adicionar, a autenticação será solicitada.\\n\\n`);\n\n w(`${colorize('Configuração manual:', 'bold')}\\n`);\n w(` Crie: ${colorize('.cast/mcp/nome.json', 'cyan')}\\n\\n`);\n w(colorize(` {\\n`, 'muted'));\n w(colorize(` \"meu-mcp\": {\\n`, 'muted'));\n w(colorize(` \"type\": \"stdio\",\\n`, 'muted'));\n w(colorize(` \"command\": \"npx\",\\n`, 'muted'));\n w(colorize(` \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\\n`, 'muted'));\n w(colorize(` \"env\": { \"GITHUB_TOKEN\": \"...\" }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(`\\n`);\n }\n}\n"],"names":["McpCommandsService","cmdMcp","args","smartInput","sub","showMcpMenu","error","CancelledPromptError","name","console","log","colorize","pause","listServers","listTools","addMcpWizard","removeMcpWizard","testMcpTool","printWhatIsMcp","printMcpHelp","resume","w","s","process","stdout","write","Box","horizontal","repeat","summaries","mcpRegistry","getServerSummaries","totalTools","reduce","sum","toolCount","length","action","withEsc","askChoice","key","label","description","connectServers","question","fn","Icons","cloud","results","connectAll","ok","entries","icon","status","config","getConfig","type","template","getTemplate","credentials","missing","filter","cred","isArg","env","envVar","mcpDir","path","join","cwd","filePath","updatedConfig","JSON","parse","stringify","value","placeholder","trim","fs","writeFileSync","registerMcp","retryOk","connectMcp","retryIcon","retryStatus","finalResults","connected","values","Boolean","size","statusIcon","statusText","transport","toolNames","toolDescriptions","slice","map","t","split","pop","more","tool","server","td","shortName","replace","desc","existsSync","mkdirSync","recursive","category","selectWithEsc","message","choices","templates","getTemplatesByCategory","templateId","id","required","push","nameInput","inputWithEsc","typeChoice","command","argsInput","a","hasEnv","confirmWithEsc","default","endpoint","toLowerCase","files","readdirSync","f","endsWith","toRemove","select","confirmRemove","confirm","unlinkSync","printHowToCreate","mcpClient"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cast-code",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Multi-agent CLI system powered by DeepAgents",
5
5
  "main": "dist/main.js",
6
6
  "bin": {
@@ -42,6 +42,7 @@
42
42
  "@langchain/langgraph": "latest",
43
43
  "@langchain/ollama": "^1.2.2",
44
44
  "@langchain/openai": "latest",
45
+ "@modelcontextprotocol/sdk": "^1.26.0",
45
46
  "@nestjs/common": "^10.0.0",
46
47
  "@nestjs/core": "^10.0.0",
47
48
  "@nestjs/platform-express": "^10.0.0",