Skip to content

Commit ddc8e4b

Browse files
authored
Merge pull request #70 from neo4j-contrib/memory-remove-dynamic-label-and-relationships
remove dynamic node labels and rel types, tested with neo4j v5.24
2 parents 854a31c + 6dc3085 commit ddc8e4b

File tree

1 file changed

+26
-25
lines changed
  • servers/mcp-neo4j-memory/src/mcp_neo4j_memory

1 file changed

+26
-25
lines changed

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

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -108,32 +108,32 @@ async def load_graph(self, filter_query="*"):
108108
return KnowledgeGraph(entities=entities, relations=relations)
109109

110110
async def create_entities(self, entities: List[Entity]) -> List[Entity]:
111-
query = """
112-
UNWIND $entities as entity
113-
MERGE (e:Memory { name: entity.name })
114-
SET e += entity {.type, .observations}
115-
SET e:$(entity.type)
116-
"""
117-
118-
entities_data = [entity.model_dump() for entity in entities]
119-
self.neo4j_driver.execute_query(query, {"entities": entities_data})
111+
for entity in entities:
112+
query = f"""
113+
WITH $entity as entity
114+
MERGE (e:Memory {{ name: entity.name }})
115+
SET e += entity {{ .type, .observations }}
116+
SET e:{entity.type}
117+
"""
118+
self.neo4j_driver.execute_query(query, {"entity": entity.model_dump()})
119+
120120
return entities
121121

122122
async def create_relations(self, relations: List[Relation]) -> List[Relation]:
123123
for relation in relations:
124-
query = """
125-
UNWIND $relations as relation
124+
query = f"""
125+
WITH $relation as relation
126126
MATCH (from:Memory),(to:Memory)
127127
WHERE from.name = relation.source
128128
AND to.name = relation.target
129-
MERGE (from)-[r:$(relation.relationType)]->(to)
129+
MERGE (from)-[r:{relation.relationType}]->(to)
130130
"""
131131

132132
self.neo4j_driver.execute_query(
133133
query,
134-
{"relations": [relation.model_dump() for relation in relations]}
134+
{"relation": relation.model_dump()}
135135
)
136-
136+
137137
return relations
138138

139139
async def add_observations(self, observations: List[ObservationAddition]) -> List[Dict[str, Any]]:
@@ -176,17 +176,18 @@ async def delete_observations(self, deletions: List[ObservationDeletion]) -> Non
176176
)
177177

178178
async def delete_relations(self, relations: List[Relation]) -> None:
179-
query = """
180-
UNWIND $relations as relation
181-
MATCH (source:Memory)-[r:$(relation.relationType)]->(target:Memory)
182-
WHERE source.name = relation.source
183-
AND target.name = relation.target
184-
DELETE r
185-
"""
186-
self.neo4j_driver.execute_query(
187-
query,
188-
{"relations": [relation.model_dump() for relation in relations]}
189-
)
179+
for relation in relations:
180+
query = f"""
181+
WITH $relation as relation
182+
MATCH (source:Memory)-[r:{relation.relationType}]->(target:Memory)
183+
WHERE source.name = relation.source
184+
AND target.name = relation.target
185+
DELETE r
186+
"""
187+
self.neo4j_driver.execute_query(
188+
query,
189+
{"relation": relation.model_dump()}
190+
)
190191

191192
async def read_graph(self) -> KnowledgeGraph:
192193
return await self.load_graph()

0 commit comments

Comments
 (0)