#!/usr/bin/env node
/**
* Docker healthcheck script for Neo4j MCP Server
*
* This script verifies that the MCP server can connect to Neo4j
* and is ready to accept requests.
*/
import neo4j, { Driver } from 'neo4j-driver';
async function healthCheck(): Promise<void> {
let driver: Driver | null = null;
try {
// Get configuration from environment
const uri = process.env.NEO4J_URI || 'bolt://localhost:7687';
const user = process.env.NEO4J_USER || 'neo4j';
const password = process.env.NEO4J_PASSWORD || 'password';
// Create driver
driver = neo4j.driver(
uri,
neo4j.auth.basic(user, password),
{
maxConnectionLifetime: 3000, // 3 seconds for health check
connectionTimeout: 2000, // 2 second timeout
}
);
// Verify connectivity
await driver.getServerInfo();
// Run a simple query to ensure database is responsive
const session = driver.session();
try {
await session.run('RETURN 1 as health');
} finally {
await session.close();
}
// Health check passed
console.log('[Health] Neo4j MCP Server is healthy');
process.exit(0);
} catch (error) {
const errorMessage = error instanceof Error ? error.message : String(error);
console.error('[Health] Health check failed:', errorMessage);
process.exit(1);
} finally {
if (driver) {
await driver.close();
}
}
}
// Run health check
healthCheck().catch((error) => {
const errorMessage = error instanceof Error ? error.message : String(error);
console.error('[Health] Unexpected error:', errorMessage);
process.exit(1);
});