From d4a92772ecdcb4730234f97824db0a6cf4b885a9 Mon Sep 17 00:00:00 2001 From: Daniel Chalef <131175+danielchalef@users.noreply.github.com> Date: Sun, 9 Nov 2025 09:47:43 -0800 Subject: [PATCH] Bump graphiti-core to v0.23.1 in mcp_server (#1060) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump graphiti-core to v0.23.1 in mcp_server and consolidate dev dependencies - Updated graphiti-core from 0.23.0 to 0.23.1 in pyproject.toml and dockerfiles - Moved all dev dependencies to [dependency-groups].dev (uv's preferred approach) - Removed redundant [project.optional-dependencies].dev section - Eliminated duplicate graphiti-core and mcp entries from dev dependencies 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Fix dev dependencies being installed in Docker containers Added --no-group dev flag to uv sync in Dockerfiles. The --no-dev flag only excludes [project.optional-dependencies].dev, but doesn't exclude [dependency-groups].dev which we now use. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Add --no-sync flag to uv run in Dockerfiles The uv run command was re-syncing dependencies at runtime and installing dev groups despite uv sync --no-group dev. Using --no-sync tells uv to use the already-synced dependencies without re-checking. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Make sed pattern version-agnostic in Dockerfiles Changed hardcoded version pattern from >=0\.23\.1 to >=[0-9.]\+ so the Dockerfiles don't need to be updated every time graphiti-core version is bumped in pyproject.toml. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Remove redundant --no-dev flag from uv sync Since we removed [project.optional-dependencies].dev, the --no-dev flag no longer has any effect. Only --no-group dev is needed to exclude dev dependency-groups. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Use more precise semver regex in sed patterns Changed from [0-9.]\+ to [0-9]\+\.[0-9]\+\.[0-9]\+ to match proper semantic versions (e.g., 0.23.1) and avoid matching invalid patterns like .... or 1.2.3.4.5. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude * Fix version inconsistencies and add regex end anchor - Updated MCP_SERVER_VERSION from 1.0.0rc0/1.0.0 to 1.0.1 to match pyproject.toml - Added $ end-of-line anchor to sed patterns to prevent matching partial strings 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --------- Co-authored-by: Claude --- mcp_server/docker/Dockerfile | 12 +++++----- mcp_server/docker/Dockerfile.standalone | 12 +++++----- mcp_server/pyproject.toml | 16 +++++-------- mcp_server/uv.lock | 32 ++++++++++--------------- uv.lock | 2 +- 5 files changed, 32 insertions(+), 42 deletions(-) diff --git a/mcp_server/docker/Dockerfile b/mcp_server/docker/Dockerfile index 4b37e16c..936a16a0 100644 --- a/mcp_server/docker/Dockerfile +++ b/mcp_server/docker/Dockerfile @@ -33,7 +33,7 @@ ENV UV_COMPILE_BYTECODE=1 \ WORKDIR /app/mcp # Accept graphiti-core version as build argument -ARG GRAPHITI_CORE_VERSION=0.23.0 +ARG GRAPHITI_CORE_VERSION=0.23.1 # Copy project files for dependency installation COPY pyproject.toml uv.lock ./ @@ -42,15 +42,15 @@ COPY pyproject.toml uv.lock ./ # and regenerate lock file to match the PyPI version RUN sed -i '/\[tool\.uv\.sources\]/,/graphiti-core/d' pyproject.toml && \ if [ -n "${GRAPHITI_CORE_VERSION}" ]; then \ - sed -i "s/graphiti-core\[falkordb\]>=0\.23\.0/graphiti-core[falkordb]==${GRAPHITI_CORE_VERSION}/" pyproject.toml; \ + sed -i "s/graphiti-core\[falkordb\]>=[0-9]\+\.[0-9]\+\.[0-9]\+$/graphiti-core[falkordb]==${GRAPHITI_CORE_VERSION}/" pyproject.toml; \ fi && \ echo "Regenerating lock file for PyPI graphiti-core..." && \ rm -f uv.lock && \ uv lock -# Install Python dependencies +# Install Python dependencies (exclude dev dependency group) RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-group dev # Store graphiti-core version RUN echo "${GRAPHITI_CORE_VERSION}" > /app/mcp/.graphiti-core-version @@ -106,13 +106,13 @@ fi # Start MCP server in foreground echo "Starting MCP server..." cd /app/mcp -exec /root/.local/bin/uv run main.py +exec /root/.local/bin/uv run --no-sync main.py EOF RUN chmod +x /start-services.sh # Add Docker labels with version information -ARG MCP_SERVER_VERSION=1.0.0rc0 +ARG MCP_SERVER_VERSION=1.0.1 ARG BUILD_DATE ARG VCS_REF LABEL org.opencontainers.image.title="FalkorDB + Graphiti MCP Server" \ diff --git a/mcp_server/docker/Dockerfile.standalone b/mcp_server/docker/Dockerfile.standalone index 042d22d5..be16f7fa 100644 --- a/mcp_server/docker/Dockerfile.standalone +++ b/mcp_server/docker/Dockerfile.standalone @@ -28,7 +28,7 @@ ENV UV_COMPILE_BYTECODE=1 \ WORKDIR /app/mcp # Accept graphiti-core version as build argument -ARG GRAPHITI_CORE_VERSION=0.23.0 +ARG GRAPHITI_CORE_VERSION=0.23.1 # Copy project files for dependency installation COPY pyproject.toml uv.lock ./ @@ -37,14 +37,14 @@ COPY pyproject.toml uv.lock ./ # Install with BOTH neo4j and falkordb extras for maximum flexibility # and regenerate lock file to match the PyPI version RUN sed -i '/\[tool\.uv\.sources\]/,/graphiti-core/d' pyproject.toml && \ - sed -i "s/graphiti-core\[falkordb\]>=0\.23\.0/graphiti-core[neo4j,falkordb]==${GRAPHITI_CORE_VERSION}/" pyproject.toml && \ + sed -i "s/graphiti-core\[falkordb\]>=[0-9]\+\.[0-9]\+\.[0-9]\+$/graphiti-core[neo4j,falkordb]==${GRAPHITI_CORE_VERSION}/" pyproject.toml && \ echo "Regenerating lock file for PyPI graphiti-core..." && \ rm -f uv.lock && \ uv lock -# Install Python dependencies +# Install Python dependencies (exclude dev dependency group) RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --no-dev + uv sync --no-group dev # Store graphiti-core version RUN echo "${GRAPHITI_CORE_VERSION}" > /app/mcp/.graphiti-core-version @@ -58,7 +58,7 @@ COPY config/ ./config/ RUN mkdir -p /var/log/graphiti # Add Docker labels with version information -ARG MCP_SERVER_VERSION=1.0.0 +ARG MCP_SERVER_VERSION=1.0.1 ARG BUILD_DATE ARG VCS_REF LABEL org.opencontainers.image.title="Graphiti MCP Server (Standalone)" \ @@ -78,4 +78,4 @@ HEALTHCHECK --interval=10s --timeout=5s --start-period=15s --retries=3 \ CMD curl -f http://localhost:8000/health || exit 1 # Run the MCP server -CMD ["uv", "run", "main.py"] +CMD ["uv", "run", "--no-sync", "main.py"] diff --git a/mcp_server/pyproject.toml b/mcp_server/pyproject.toml index 0370fd3c..ac5b4d97 100644 --- a/mcp_server/pyproject.toml +++ b/mcp_server/pyproject.toml @@ -7,7 +7,7 @@ requires-python = ">=3.10,<4" dependencies = [ "mcp>=1.9.4", "openai>=1.91.0", - "graphiti-core[falkordb]>=0.23.0", + "graphiti-core[falkordb]>=0.23.1", "pydantic-settings>=2.0.0", "pyyaml>=6.0", "typing-extensions>=4.0.0", @@ -24,15 +24,6 @@ providers = [ "voyageai>=0.2.3", "sentence-transformers>=2.0.0", ] -dev = [ - "graphiti-core>=0.23.0", - "httpx>=0.28.1", - "mcp>=1.9.4", - "pyright>=1.1.404", - "pytest>=8.0.0", - "pytest-asyncio>=0.21.0", - "ruff>=0.7.1", -] [tool.pyright] include = ["src", "tests"] @@ -74,7 +65,12 @@ graphiti-core = { path = "../", editable = true } [dependency-groups] dev = [ "faker>=37.12.0", + "httpx>=0.28.1", "psutil>=7.1.2", + "pyright>=1.1.404", + "pytest>=8.0.0", + "pytest-asyncio>=0.21.0", "pytest-timeout>=2.4.0", "pytest-xdist>=3.8.0", + "ruff>=0.7.1", ] diff --git a/mcp_server/uv.lock b/mcp_server/uv.lock index 77450508..3cf9af91 100644 --- a/mcp_server/uv.lock +++ b/mcp_server/uv.lock @@ -648,7 +648,7 @@ wheels = [ [[package]] name = "graphiti-core" -version = "0.22.1rc2" +version = "0.23.1" source = { editable = "../" } dependencies = [ { name = "diskcache" }, @@ -1074,7 +1074,7 @@ wheels = [ [[package]] name = "mcp-server" -version = "1.0.0" +version = "1.0.1" source = { virtual = "." } dependencies = [ { name = "graphiti-core", extra = ["falkordb"] }, @@ -1089,15 +1089,6 @@ dependencies = [ azure = [ { name = "azure-identity" }, ] -dev = [ - { name = "graphiti-core" }, - { name = "httpx" }, - { name = "mcp" }, - { name = "pyright" }, - { name = "pytest" }, - { name = "pytest-asyncio" }, - { name = "ruff" }, -] providers = [ { name = "anthropic" }, { name = "google-genai" }, @@ -1109,9 +1100,14 @@ providers = [ [package.dev-dependencies] dev = [ { name = "faker" }, + { name = "httpx" }, { name = "psutil" }, + { name = "pyright" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, { name = "pytest-timeout" }, { name = "pytest-xdist" }, + { name = "ruff" }, ] [package.metadata] @@ -1119,31 +1115,29 @@ requires-dist = [ { name = "anthropic", marker = "extra == 'providers'", specifier = ">=0.49.0" }, { name = "azure-identity", marker = "extra == 'azure'", specifier = ">=1.21.0" }, { name = "google-genai", marker = "extra == 'providers'", specifier = ">=1.8.0" }, - { name = "graphiti-core", marker = "extra == 'dev'", editable = "../" }, { name = "graphiti-core", extras = ["falkordb"], editable = "../" }, { name = "groq", marker = "extra == 'providers'", specifier = ">=0.2.0" }, - { name = "httpx", marker = "extra == 'dev'", specifier = ">=0.28.1" }, { name = "mcp", specifier = ">=1.9.4" }, - { name = "mcp", marker = "extra == 'dev'", specifier = ">=1.9.4" }, { name = "openai", specifier = ">=1.91.0" }, { name = "pydantic-settings", specifier = ">=2.0.0" }, - { name = "pyright", marker = "extra == 'dev'", specifier = ">=1.1.404" }, - { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0.0" }, - { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.21.0" }, { name = "pyyaml", specifier = ">=6.0" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.7.1" }, { name = "sentence-transformers", marker = "extra == 'providers'", specifier = ">=2.0.0" }, { name = "typing-extensions", specifier = ">=4.0.0" }, { name = "voyageai", marker = "extra == 'providers'", specifier = ">=0.2.3" }, ] -provides-extras = ["azure", "providers", "dev"] +provides-extras = ["azure", "providers"] [package.metadata.requires-dev] dev = [ { name = "faker", specifier = ">=37.12.0" }, + { name = "httpx", specifier = ">=0.28.1" }, { name = "psutil", specifier = ">=7.1.2" }, + { name = "pyright", specifier = ">=1.1.404" }, + { name = "pytest", specifier = ">=8.0.0" }, + { name = "pytest-asyncio", specifier = ">=0.21.0" }, { name = "pytest-timeout", specifier = ">=2.4.0" }, { name = "pytest-xdist", specifier = ">=3.8.0" }, + { name = "ruff", specifier = ">=0.7.1" }, ] [[package]] diff --git a/uv.lock b/uv.lock index 67241c23..74c3238e 100644 --- a/uv.lock +++ b/uv.lock @@ -783,7 +783,7 @@ wheels = [ [[package]] name = "graphiti-core" -version = "0.22.1rc2" +version = "0.23.1" source = { editable = "." } dependencies = [ { name = "diskcache" },