@mseep/atlas-mcp-server
Version:
A Model Context Protocol (MCP) server for ATLAS, a Neo4j-powered task management system for LLM Agents - implementing a three-tier architecture (Projects, Tasks, Knowledge) to manage complex workflows.
68 lines (58 loc) • 2.33 kB
text/typescript
import { importDatabase } from '../src/services/neo4j/backupRestoreService.js';
import { closeNeo4jConnection } from '../src/services/neo4j/index.js';
import { logger } from '../src/utils/logger.js';
import { existsSync, lstatSync } from 'fs';
import path from 'path';
/**
* Validates the provided backup directory path.
* @param backupDir Path to the backup directory.
* @returns True if valid, false otherwise.
*/
const isValidBackupDir = (backupDir: string): boolean => {
if (!existsSync(backupDir) || !lstatSync(backupDir).isDirectory()) {
logger.error(`Invalid backup directory: Path does not exist or is not a directory: ${backupDir}`);
return false;
}
// Check for expected JSON files (optional, but good practice)
const expectedFiles = ['projects.json', 'tasks.json', 'knowledge.json'];
for (const file of expectedFiles) {
const filePath = path.join(backupDir, file);
if (!existsSync(filePath)) {
// Log a warning but don't necessarily fail, maybe some are empty
logger.warn(`Expected backup file not found: ${filePath}. Import might be incomplete.`);
}
}
return true;
};
/**
* Manual import script entry point.
*/
const runManualImport = async () => {
const args = process.argv.slice(2); // Get command line arguments, excluding node and script path
if (args.length !== 1) {
logger.error('Usage: npm run db:import <path_to_backup_directory>');
process.exit(1);
}
const backupDir = path.resolve(args[0]); // Resolve to absolute path
logger.info(`Starting manual database import from: ${backupDir}`);
logger.warn('!!! THIS WILL OVERWRITE ALL EXISTING DATA IN THE DATABASE !!!');
if (!isValidBackupDir(backupDir)) {
process.exit(1);
}
try {
await importDatabase(backupDir);
logger.info(`Manual import from ${backupDir} completed successfully.`);
// Removed the warning about relationships not being restored.
} catch (error) {
logger.error('Manual database import failed:', { error });
process.exitCode = 1; // Indicate failure
} finally {
// Ensure the Neo4j connection is closed after the script runs
logger.info('Closing Neo4j connection...');
await closeNeo4jConnection();
logger.info('Neo4j connection closed.');
}
};
// Execute the import process
runManualImport();