Skip to content

Commit 13b4d1d

Browse files
authored
Merge pull request #100 from neo4j-contrib/memory-updates
Memory updates
2 parents 52b2217 + 7769800 commit 13b4d1d

File tree

6 files changed

+222
-228
lines changed

6 files changed

+222
-228
lines changed

servers/mcp-neo4j-memory/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@
22

33
### Fixed
44
* Fix bug in `search_nodes` method where query arg wasn't passed properly
5+
* Fix bug where stdio transport was always selected
6+
* Fixed argument parsing in server init
57

68
### Changed
79
* Implement FastMCP with function decorators to simplify server code
810
* Add HTTP transport option
911
* Migrate to FastMCP v2.x
12+
* rename tools to be more clear - `search_nodes` into `search_memories` and `find_nodes` into `find_memories_by_name`
13+
* Update underlying Pydantic class `ObservationAddition` to have `observations` field to be consistent with `ObservationDeletion` class
14+
* Update Dockerfile to include `NEO4J_DATABASE`, `NEO4J_TRANSPORT`, `NEO4J_MCP_SERVER_HOST`, `NEO4J_MCP_SERVER_PORT` and `NEO4J_MCP_SERVER_PATH` env variables
1015

1116
### Added
17+
* Add compatibility for NEO4J_URI and NEO4J_URL env variables
18+
* Command in Makefile to easily build and deploy Docker image locally
1219

1320
## v0.1.5
1421

servers/mcp-neo4j-memory/Dockerfile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ RUN pip install --no-cache-dir hatchling
1010
COPY pyproject.toml /app/
1111

1212
# Install runtime dependencies
13-
RUN pip install --no-cache-dir mcp>=0.10.0 neo4j>=5.26.0
13+
RUN pip install --no-cache-dir fastmcp>=2.0.0 neo4j>=5.26.0
1414

1515
# Copy the source code
1616
COPY src/ /app/src/
@@ -23,6 +23,11 @@ RUN pip install --no-cache-dir -e .
2323
ENV NEO4J_URL="bolt://host.docker.internal:7687"
2424
ENV NEO4J_USERNAME="neo4j"
2525
ENV NEO4J_PASSWORD="password"
26+
ENV NEO4J_DATABASE="neo4j"
27+
ENV NEO4J_TRANSPORT="http"
28+
ENV NEO4J_MCP_SERVER_HOST="0.0.0.0"
29+
ENV NEO4J_MCP_SERVER_PORT="8000"
30+
ENV NEO4J_MCP_SERVER_PATH="/api/mcp/"
2631

2732
# Command to run the server using the package entry point
28-
CMD ["sh", "-c", "mcp-neo4j-memory --db-url ${NEO4J_URL} --username ${NEO4J_USERNAME} --password ${NEO4J_PASSWORD}"]
33+
CMD ["sh", "-c", "mcp-neo4j-memory"]

servers/mcp-neo4j-memory/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
docker-local-build-run:
2+
docker build -t mcp-neo4j-memory .
3+
docker run -p 8000:8000 mcp-neo4j-memory:latest
4+
15
install-dev:
26
uv run python3 -m uv pip install -e .
37

servers/mcp-neo4j-memory/src/mcp_neo4j_memory/__init__.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,21 @@
77
def main():
88
"""Main entry point for the package."""
99
parser = argparse.ArgumentParser(description='Neo4j Memory MCP Server')
10-
parser.add_argument('--db-url',
11-
default=os.getenv("NEO4J_URL", "bolt://localhost:7687"),
12-
help='Neo4j connection URL')
13-
parser.add_argument('--username',
14-
default=os.getenv("NEO4J_USERNAME", "neo4j"),
15-
help='Neo4j username')
16-
parser.add_argument('--password',
17-
default=os.getenv("NEO4J_PASSWORD", "password"),
18-
help='Neo4j password')
19-
parser.add_argument("--database",
20-
default=os.getenv("NEO4J_DATABASE", "neo4j"),
21-
help="Neo4j database name")
22-
parser.add_argument("--transport", default="stdio", help="Transport type (stdio, sse, http)")
10+
parser.add_argument('--db-url', default=None, help='Neo4j connection URL')
11+
parser.add_argument('--username', default=None, help='Neo4j username')
12+
parser.add_argument('--password', default=None, help='Neo4j password')
13+
parser.add_argument("--database", default=None, help="Neo4j database name")
14+
parser.add_argument("--transport", default=None, help="Transport type (stdio, sse, http)")
2315
parser.add_argument("--server-host", default=None, help="HTTP host (default: 127.0.0.1)")
2416
parser.add_argument("--server-port", type=int, default=None, help="HTTP port (default: 8000)")
2517
parser.add_argument("--server-path", default=None, help="HTTP path (default: /mcp/)")
2618

2719
args = parser.parse_args()
2820
asyncio.run(server.main(
29-
args.db_url,
30-
args.username,
31-
args.password,
32-
args.database,
21+
args.db_url or os.getenv("NEO4J_URL") or os.getenv("NEO4J_URI", "bolt://localhost:7687"),
22+
args.username or os.getenv("NEO4J_USERNAME", "neo4j"),
23+
args.password or os.getenv("NEO4J_PASSWORD", "password"),
24+
args.database or os.getenv("NEO4J_DATABASE", "neo4j"),
3325
args.transport or os.getenv("NEO4J_TRANSPORT", "stdio"),
3426
args.server_host or os.getenv("NEO4J_MCP_SERVER_HOST", "127.0.0.1"),
3527
args.server_port or int(os.getenv("NEO4J_MCP_SERVER_PORT", "8000")),

0 commit comments

Comments
 (0)