From 7dfab2022f4678f7435ea6858033cd5886c5c052 Mon Sep 17 00:00:00 2001 From: Daniel Chalef <131175+danielchalef@users.noreply.github.com> Date: Thu, 30 Oct 2025 21:58:57 -0700 Subject: [PATCH] refactor: Unified standalone image with both Neo4j and FalkorDB drivers - Modified Dockerfile.standalone to install both neo4j and falkordb extras - Both compose files now use the same standalone image - Config file determines which database to connect to at runtime - Added build-standalone.sh script for building and pushing to DockerHub - Image tags: standalone, {version}-standalone, {version}-graphiti-{core}-standalone --- mcp_server/docker/Dockerfile.standalone | 9 +--- mcp_server/docker/build-standalone.sh | 50 +++++++++++++++++++ mcp_server/docker/docker-compose-falkordb.yml | 4 +- mcp_server/docker/docker-compose-neo4j.yml | 4 +- 4 files changed, 54 insertions(+), 13 deletions(-) create mode 100755 mcp_server/docker/build-standalone.sh diff --git a/mcp_server/docker/Dockerfile.standalone b/mcp_server/docker/Dockerfile.standalone index 699de11a..aecb4909 100644 --- a/mcp_server/docker/Dockerfile.standalone +++ b/mcp_server/docker/Dockerfile.standalone @@ -29,19 +29,14 @@ WORKDIR /app/mcp # Accept graphiti-core version as build argument ARG GRAPHITI_CORE_VERSION=0.22.0 -ARG DATABASE_PROVIDER=neo4j # Copy project files for dependency installation COPY pyproject.toml uv.lock ./ # Remove the local path override for graphiti-core in Docker builds -# Install with appropriate database extra +# Install with BOTH neo4j and falkordb extras for maximum flexibility RUN sed -i '/\[tool\.uv\.sources\]/,/graphiti-core/d' pyproject.toml && \ - if [ "${DATABASE_PROVIDER}" = "neo4j" ]; then \ - sed -i "s/graphiti-core\[falkordb\]>=0\.16\.0/graphiti-core[neo4j]==${GRAPHITI_CORE_VERSION}/" pyproject.toml; \ - else \ - sed -i "s/graphiti-core\[falkordb\]>=0\.16\.0/graphiti-core[falkordb]==${GRAPHITI_CORE_VERSION}/" pyproject.toml; \ - fi + sed -i "s/graphiti-core\[falkordb\]>=0\.16\.0/graphiti-core[neo4j,falkordb]==${GRAPHITI_CORE_VERSION}/" pyproject.toml # Install Python dependencies RUN --mount=type=cache,target=/root/.cache/uv \ diff --git a/mcp_server/docker/build-standalone.sh b/mcp_server/docker/build-standalone.sh new file mode 100755 index 00000000..6938bd0d --- /dev/null +++ b/mcp_server/docker/build-standalone.sh @@ -0,0 +1,50 @@ +#!/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 "zepai/knowledge-graph-mcp:standalone" \ + -t "zepai/knowledge-graph-mcp:${MCP_VERSION}-standalone" \ + -t "zepai/knowledge-graph-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 " - zepai/knowledge-graph-mcp:standalone" +echo " - zepai/knowledge-graph-mcp:${MCP_VERSION}-standalone" +echo " - zepai/knowledge-graph-mcp:${MCP_VERSION}-graphiti-${GRAPHITI_CORE_VERSION}-standalone" +echo "" +echo "To push to DockerHub:" +echo " docker push zepai/knowledge-graph-mcp:standalone" +echo " docker push zepai/knowledge-graph-mcp:${MCP_VERSION}-standalone" +echo " docker push zepai/knowledge-graph-mcp:${MCP_VERSION}-graphiti-${GRAPHITI_CORE_VERSION}-standalone" +echo "" +echo "Or push all tags:" +echo " docker push --all-tags zepai/knowledge-graph-mcp" diff --git a/mcp_server/docker/docker-compose-falkordb.yml b/mcp_server/docker/docker-compose-falkordb.yml index f7566f3a..3f8d96cd 100644 --- a/mcp_server/docker/docker-compose-falkordb.yml +++ b/mcp_server/docker/docker-compose-falkordb.yml @@ -16,12 +16,10 @@ services: start_period: 10s graphiti-mcp: - image: zepai/knowledge-graph-mcp:standalone-falkordb + image: zepai/knowledge-graph-mcp:standalone build: context: .. dockerfile: docker/Dockerfile.standalone - args: - DATABASE_PROVIDER: falkordb env_file: - path: ../.env required: false diff --git a/mcp_server/docker/docker-compose-neo4j.yml b/mcp_server/docker/docker-compose-neo4j.yml index 100cec44..d382200b 100644 --- a/mcp_server/docker/docker-compose-neo4j.yml +++ b/mcp_server/docker/docker-compose-neo4j.yml @@ -20,12 +20,10 @@ services: start_period: 30s graphiti-mcp: - image: zepai/knowledge-graph-mcp:standalone-neo4j + image: zepai/knowledge-graph-mcp:standalone build: context: .. dockerfile: docker/Dockerfile.standalone - args: - DATABASE_PROVIDER: neo4j env_file: - path: ../.env required: false