feat: Add helpful error message for database connection failures

- Catch Redis/database connection errors during initialization
- Provide clear, formatted error messages with startup instructions
- Include provider-specific guidance (FalkorDB vs Neo4j)
- Improves developer experience when database is not running
This commit is contained in:
Daniel Chalef 2025-10-30 21:28:34 -07:00
parent 008678dc49
commit 6b716d57d2

View file

@ -209,6 +209,7 @@ class GraphitiService:
self.entity_types = custom_types self.entity_types = custom_types
# Initialize Graphiti client with appropriate driver # Initialize Graphiti client with appropriate driver
try:
if self.config.database.provider.lower() == 'falkordb': if self.config.database.provider.lower() == 'falkordb':
# For FalkorDB, create a FalkorDriver instance directly # For FalkorDB, create a FalkorDriver instance directly
from graphiti_core.driver.falkordb_driver import FalkorDriver from graphiti_core.driver.falkordb_driver import FalkorDriver
@ -236,6 +237,33 @@ class GraphitiService:
embedder=embedder_client, embedder=embedder_client,
max_coroutines=self.semaphore_limit, max_coroutines=self.semaphore_limit,
) )
except Exception as db_error:
# Check for connection errors
error_msg = str(db_error).lower()
if 'connection refused' in error_msg or 'could not connect' in error_msg:
db_provider = self.config.database.provider
if db_provider.lower() == 'falkordb':
raise RuntimeError(
f"\n{'='*70}\n"
f"Database Connection Error: FalkorDB is not running\n"
f"{'='*70}\n\n"
f"FalkorDB at {db_config['host']}:{db_config['port']} is not accessible.\n\n"
f"To start FalkorDB:\n"
f" - Using Docker Compose: cd mcp_server && docker compose up\n"
f" - Or run FalkorDB manually: docker run -p 6379:6379 falkordb/falkordb\n\n"
f"{'='*70}\n"
) from db_error
else:
raise RuntimeError(
f"\n{'='*70}\n"
f"Database Connection Error: {db_provider} is not running\n"
f"{'='*70}\n\n"
f"{db_provider} at {db_config.get('uri', 'unknown')} is not accessible.\n\n"
f"Please ensure {db_provider} is running and accessible.\n\n"
f"{'='*70}\n"
) from db_error
# Re-raise other errors
raise
# Build indices # Build indices
await self.client.build_indices_and_constraints() await self.client.build_indices_and_constraints()