graph-memory-mcp-server
Version:
Graphiti Memory Graph MCP Server - Search and explore knowledge graphs using Graphiti
115 lines (94 loc) • 3.78 kB
JavaScript
import path from 'path';
import { fileURLToPath } from 'url';
import { spawn } from 'child_process';
import fs from 'fs';
import os from 'os';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const packageRoot = path.resolve(__dirname, '..');
// Check for configuration from env or args
const args = process.argv.slice(2);
let zepApiKey = process.env.ZEP_API_KEY || '';
let zepBaseUrl = process.env.ZEP_API_BASE_URL || 'https://api.getzep.com';
let mongoUri = process.env.MONGO_URI || process.env.MONGODB_URI || '';
let dbName = process.env.MONGO_DB_NAME || process.env.DB_NAME || '';
for (let i = 0; i < args.length; i++) {
const arg = args[i];
if ((arg === '--zep-api-key' || arg === '--api-key' || arg === '-k') && i + 1 < args.length) {
zepApiKey = args[++i];
} else if ((arg === '--zep-base-url' || arg === '--base-url' || arg === '-u') && i + 1 < args.length) {
zepBaseUrl = args[++i];
} else if ((arg === '--mongo-uri' || arg === '--mongodb-uri') && i + 1 < args.length) {
mongoUri = args[++i];
} else if ((arg === '--db-name' || arg === '--database-name') && i + 1 < args.length) {
dbName = args[++i];
} else if (arg === '--help' || arg === '-h') {
console.log(`
Graphiti Memory Graph MCP Server
Usage: graph-memory-mcp-server [options]
Options:
--zep-api-key, -k <key> Your Zep API key (or set ZEP_API_KEY env var)
--zep-base-url, -u <url> Zep API base URL (or set ZEP_API_BASE_URL env var, default: https://api.getzep.com)
--mongo-uri <uri> MongoDB connection URI (or set MONGO_URI/MONGODB_URI env var)
--db-name <name> Database name (or set MONGO_DB_NAME/DB_NAME env var, default: graphiti-memory)
--help, -h Show this help message
Environment Variables:
ZEP_API_KEY Your Zep API key
ZEP_API_BASE_URL Zep API base URL
MONGO_URI / MONGODB_URI MongoDB connection string
MONGO_DB_NAME / DB_NAME Database name
Example:
graph-memory-mcp-server --zep-api-key your-key --mongo-uri mongodb://localhost:27017
`);
process.exit(0);
}
}
if (!zepApiKey) {
console.error('Error: Zep API key is required. Use --zep-api-key argument or set ZEP_API_KEY environment variable.');
process.exit(1);
}
if (!mongoUri) {
console.error('Error: MongoDB URI is required. Use --mongo-uri argument or set MONGO_URI environment variable.');
process.exit(1);
}
function startServer(zepApiKey, zepBaseUrl, mongoUri, dbName) {
const logFile = path.join(os.tmpdir(), 'graphiti-memory-mcp.log');
console.error(`Log file: ${logFile}`);
const indexPath = path.join(packageRoot, 'dist', 'index.js');
if (!fs.existsSync(indexPath)) {
console.error(`Error: Server file not found at ${indexPath}`);
console.error('Please run "npm run build" first.');
process.exit(1);
}
// Set environment variables for the server process
const serverEnv = {
...process.env,
ZEP_API_KEY: zepApiKey,
ZEP_API_BASE_URL: zepBaseUrl,
MONGO_URI: mongoUri
};
if (dbName) {
serverEnv.MONGO_DB_NAME = dbName;
}
const serverProcess = spawn(process.execPath, [indexPath], {
stdio: 'inherit',
env: serverEnv
});
serverProcess.on('error', (err) => {
console.error('Failed to start server:', err);
process.exit(1);
});
serverProcess.on('exit', (code) => {
if (code !== 0) {
console.error(`Server exited with code ${code}`);
process.exit(code);
}
});
process.on('SIGINT', () => {
console.log('\nShutting down server...');
serverProcess.kill('SIGINT');
process.exit(0);
});
}
startServer(zepApiKey, zepBaseUrl, mongoUri, dbName);