CRITICAL FIX - Database Parameter (graphiti_core):
- Fixed graphiti_core/driver/neo4j_driver.py execute_query method
- database_ parameter was incorrectly added to params dict instead of kwargs
- Now correctly passed as keyword argument to Neo4j driver
- Impact: All queries now execute in configured database (not default 'neo4j')
- Root cause: Violated Neo4j Python driver API contract
Technical Details:
Previous code (BROKEN):
params.setdefault('database_', self._database) # Wrong - in params dict
result = await self.client.execute_query(cypher_query_, parameters_=params, **kwargs)
Fixed code (CORRECT):
kwargs.setdefault('database_', self._database) # Correct - in kwargs
result = await self.client.execute_query(cypher_query_, parameters_=params, **kwargs)
FIX - Index Creation Error Handling (MCP server):
- Added graceful handling for Neo4j IF NOT EXISTS bug
- Prevents MCP server crash when indices already exist
- Logs warning instead of failing initialization
- Handles EquivalentSchemaRuleAlreadyExists error gracefully
Files Modified:
- graphiti_core/driver/neo4j_driver.py (3 lines changed)
- mcp_server/src/graphiti_mcp_server.py (12 lines added error handling)
- mcp_server/pyproject.toml (version bump to 1.0.5)
Testing:
- Python syntax validation: PASSED
- Ruff formatting: PASSED
- Ruff linting: PASSED
Closes issues with:
- Data being stored in wrong Neo4j database
- MCP server crashing on startup with EquivalentSchemaRuleAlreadyExists
- NEO4J_DATABASE environment variable being ignored
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
50 lines
2.1 KiB
Bash
Executable file
50 lines
2.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# Script to build and push standalone Docker image with both Neo4j and FalkorDB drivers
|
|
# This script queries PyPI for the latest graphiti-core version and includes it in the image tag
|
|
|
|
set -e
|
|
|
|
# Get MCP server version from pyproject.toml
|
|
MCP_VERSION=$(grep '^version = ' ../pyproject.toml | sed 's/version = "\(.*\)"/\1/')
|
|
|
|
# Get latest graphiti-core version from PyPI
|
|
echo "Querying PyPI for latest graphiti-core version..."
|
|
GRAPHITI_CORE_VERSION=$(curl -s https://pypi.org/pypi/graphiti-core/json | python3 -c "import sys, json; print(json.load(sys.stdin)['info']['version'])")
|
|
echo "Latest graphiti-core version: ${GRAPHITI_CORE_VERSION}"
|
|
|
|
# Get build metadata
|
|
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
VCS_REF=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
|
|
# Build the standalone image with explicit graphiti-core version
|
|
echo "Building standalone Docker image..."
|
|
docker build \
|
|
--build-arg MCP_SERVER_VERSION="${MCP_VERSION}" \
|
|
--build-arg GRAPHITI_CORE_VERSION="${GRAPHITI_CORE_VERSION}" \
|
|
--build-arg BUILD_DATE="${BUILD_DATE}" \
|
|
--build-arg VCS_REF="${VCS_REF}" \
|
|
-f Dockerfile.standalone \
|
|
-t "lvarming/graphiti-mcp:standalone" \
|
|
-t "lvarming/graphiti-mcp:${MCP_VERSION}-standalone" \
|
|
-t "lvarming/graphiti-mcp:${MCP_VERSION}-graphiti-${GRAPHITI_CORE_VERSION}-standalone" \
|
|
..
|
|
|
|
echo ""
|
|
echo "Build complete!"
|
|
echo " MCP Server Version: ${MCP_VERSION}"
|
|
echo " Graphiti Core Version: ${GRAPHITI_CORE_VERSION}"
|
|
echo " Build Date: ${BUILD_DATE}"
|
|
echo " VCS Ref: ${VCS_REF}"
|
|
echo ""
|
|
echo "Image tags:"
|
|
echo " - lvarming/graphiti-mcp:standalone"
|
|
echo " - lvarming/graphiti-mcp:${MCP_VERSION}-standalone"
|
|
echo " - lvarming/graphiti-mcp:${MCP_VERSION}-graphiti-${GRAPHITI_CORE_VERSION}-standalone"
|
|
echo ""
|
|
echo "To push to DockerHub:"
|
|
echo " docker push lvarming/graphiti-mcp:standalone"
|
|
echo " docker push lvarming/graphiti-mcp:${MCP_VERSION}-standalone"
|
|
echo " docker push lvarming/graphiti-mcp:${MCP_VERSION}-graphiti-${GRAPHITI_CORE_VERSION}-standalone"
|
|
echo ""
|
|
echo "Or push all tags:"
|
|
echo " docker push --all-tags lvarming/graphiti-mcp"
|