#!/usr/bin/env node /** * Project Mind MCP - Validation Script * * Tests MCP server functionality without requiring Claude Desktop. */ import * as fs from 'fs'; import * as path from 'path'; console.log('๐Ÿงช Project Mind MCP - Validation Test\n'); // Test 1: Build Output console.log('Test 1: Checking build output...'); const distPath = path.resolve(process.cwd(), 'dist', 'index.js'); if (fs.existsSync(distPath)) { console.log('โœ… dist/index.js exists\n'); } else { console.log('โŒ dist/index.js not found'); console.log(' Run: npm run build\n'); process.exit(1); } // Test 2: Data Directory console.log('Test 2: Checking data directory...'); const dataDir = path.resolve(process.cwd(), 'data'); if (!fs.existsSync(dataDir)) { fs.mkdirSync(dataDir, { recursive: true }); console.log('โœ… Created data directory\n'); } else { console.log('โœ… Data directory exists\n'); } // Test 3: Dependencies console.log('Test 3: Checking dependencies...'); const nodeModules = path.resolve(process.cwd(), 'node_modules'); if (fs.existsSync(nodeModules)) { console.log('โœ… node_modules exists\n'); } else { console.log('โŒ node_modules not found'); console.log(' Run: npm install\n'); process.exit(1); } // Test 4: TypeScript Configuration console.log('Test 4: Checking TypeScript configuration...'); const tsconfigPath = path.resolve(process.cwd(), 'tsconfig.json'); if (fs.existsSync(tsconfigPath)) { try { const tsconfig = JSON.parse(fs.readFileSync(tsconfigPath, 'utf8')); if (tsconfig.compilerOptions && tsconfig.compilerOptions.outDir === './dist') { console.log('โœ… tsconfig.json valid\n'); } else { console.log('โš ๏ธ tsconfig.json missing outDir\n'); } } catch (error) { console.log('โŒ tsconfig.json invalid JSON\n'); process.exit(1); } } else { console.log('โŒ tsconfig.json not found\n'); process.exit(1); } // Test 5: Package.json console.log('Test 5: Checking package.json...'); const packagePath = path.resolve(process.cwd(), 'package.json'); if (fs.existsSync(packagePath)) { try { const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf8')); if (pkg.name === 'project-mind-mcp' && pkg.main === 'dist/index.js') { console.log('โœ… package.json valid\n'); } else { console.log('โš ๏ธ package.json configuration mismatch\n'); } } catch (error) { console.log('โŒ package.json invalid JSON\n'); process.exit(1); } } else { console.log('โŒ package.json not found\n'); process.exit(1); } // Test 6: Source Files console.log('Test 6: Checking source files...'); const srcDir = path.resolve(process.cwd(), 'src'); if (fs.existsSync(srcDir)) { const indexTs = path.join(srcDir, 'index.ts'); if (fs.existsSync(indexTs)) { console.log('โœ… Source files present\n'); } else { console.log('โŒ src/index.ts not found\n'); process.exit(1); } } else { console.log('โŒ src directory not found\n'); process.exit(1); } // Summary console.log('โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”'); console.log('โœ… All validation tests passed!'); console.log('โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”\n'); console.log('Next steps:'); console.log('1. Configure Claude Desktop:'); console.log(' npm run install:claude'); console.log(''); console.log('2. Restart Claude Desktop'); console.log(''); console.log('3. Test connection:'); console.log(' "Use Project Mind to check connection"'); console.log(''); console.log('๐Ÿ“š See docs/QUICK_START.md for detailed guide\n');