UNPKG

aios-core

Version:

Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework

165 lines (145 loc) 4.98 kB
/** * MCP Setup Command * * Creates the global ~/.aios/mcp/ directory structure. * * @module cli/commands/mcp/setup * @version 1.0.0 * @story 2.11 - MCP System Global */ const { Command } = require('commander'); const { createGlobalStructure, createGlobalConfig, globalConfigExists, getAvailableTemplates, getServerTemplate, } = require('../../../core/mcp/global-config-manager'); const { getGlobalAiosDir, getGlobalMcpDir, getGlobalConfigPath, } = require('../../../core/mcp/os-detector'); /** * Create the setup command * @returns {Command} Commander command instance */ function createSetupCommand() { const setup = new Command('setup'); setup .description('Create global MCP configuration structure at ~/.aios/') .option('--with-defaults', 'Include default server templates (context7, exa, github)') .option('--servers <servers>', 'Comma-separated list of servers to add (e.g., context7,exa,github)') .option('-f, --force', 'Force recreation even if exists') .option('-v, --verbose', 'Show detailed output') .action(async (options) => { await executeSetup(options); }); return setup; } /** * Execute the setup command * @param {Object} options - Command options */ async function executeSetup(options) { console.log('Creating global MCP configuration...\n'); // Check if already exists if (globalConfigExists() && !options.force) { console.log(`✓ Global config already exists at ${getGlobalConfigPath()}`); console.log(' Use --force to recreate\n'); return; } // Step 1: Create directory structure console.log('Step 1: Creating directory structure...'); const structureResult = createGlobalStructure(); if (structureResult.created.length > 0) { for (const dir of structureResult.created) { console.log(` ✓ Created ${dir}`); } } if (structureResult.errors.length > 0) { for (const err of structureResult.errors) { console.error(` ✗ Error: ${err.error}`); } process.exit(1); } // Step 2: Determine initial servers const initialServers = {}; if (options.withDefaults) { // Add default servers const defaultServers = ['context7', 'exa', 'github']; for (const server of defaultServers) { const template = getServerTemplate(server); if (template) { initialServers[server] = template; } } console.log('\nStep 2: Adding default servers...'); console.log(` ✓ Added ${Object.keys(initialServers).length} default servers`); } else if (options.servers) { // Add specified servers const serverNames = options.servers.split(',').map(s => s.trim()); console.log('\nStep 2: Adding specified servers...'); for (const server of serverNames) { const template = getServerTemplate(server); if (template) { initialServers[server] = template; console.log(` ✓ Added ${server}`); } else { console.log(` ⚠ No template for "${server}" - skipped`); } } } else { console.log('\nStep 2: Creating empty config (no servers)'); console.log(' Tip: Use --with-defaults or --servers to add servers'); } // Step 3: Create config file console.log('\nStep 3: Creating global config file...'); const configResult = createGlobalConfig(initialServers); if (configResult.success) { console.log(` ✓ Created ${configResult.configPath}`); } else if (configResult.error === 'Config already exists' && options.force) { // Overwrite for force mode const fs = require('fs'); const config = { version: '1.0', servers: initialServers, defaults: { timeout: 30000, retries: 3, }, }; fs.writeFileSync(configResult.configPath, JSON.stringify(config, null, 2), 'utf8'); console.log(` ✓ Overwrote ${configResult.configPath}`); } else { console.error(` ✗ ${configResult.error}`); process.exit(1); } // Summary console.log('\n✅ Global MCP setup complete!\n'); console.log('Structure created:'); console.log(` ${getGlobalAiosDir()}/`); console.log(' ├── mcp/'); console.log(' │ ├── global-config.json'); console.log(' │ ├── servers/'); console.log(' │ └── cache/'); console.log(' ├── config.yaml'); console.log(' └── credentials/'); if (Object.keys(initialServers).length > 0) { console.log(`\nServers configured: ${Object.keys(initialServers).join(', ')}`); } console.log('\nNext steps:'); console.log(' 1. Run "aios mcp link" in your project to use global config'); console.log(' 2. Run "aios mcp add <server>" to add more servers'); console.log(' 3. Run "aios mcp status" to check configuration'); if (options.verbose) { console.log('\nAvailable server templates:'); for (const name of getAvailableTemplates()) { console.log(` - ${name}`); } } } module.exports = { createSetupCommand, executeSetup, };