Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 26 additions & 25 deletions servers/mcp-neo4j-memory/src/mcp_neo4j_memory/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,32 +108,32 @@ async def load_graph(self, filter_query="*"):
return KnowledgeGraph(entities=entities, relations=relations)

async def create_entities(self, entities: List[Entity]) -> List[Entity]:
query = """
UNWIND $entities as entity
MERGE (e:Memory { name: entity.name })
SET e += entity {.type, .observations}
SET e:$(entity.type)
"""

entities_data = [entity.model_dump() for entity in entities]
self.neo4j_driver.execute_query(query, {"entities": entities_data})
for entity in entities:
query = f"""
WITH $entity as entity
MERGE (e:Memory {{ name: entity.name }})
SET e += entity {{ .type, .observations }}
SET e:{entity.type}
"""
self.neo4j_driver.execute_query(query, {"entity": entity.model_dump()})

return entities

async def create_relations(self, relations: List[Relation]) -> List[Relation]:
for relation in relations:
query = """
UNWIND $relations as relation
query = f"""
WITH $relation as relation
MATCH (from:Memory),(to:Memory)
WHERE from.name = relation.source
AND to.name = relation.target
MERGE (from)-[r:$(relation.relationType)]->(to)
MERGE (from)-[r:{relation.relationType}]->(to)
"""

self.neo4j_driver.execute_query(
query,
{"relations": [relation.model_dump() for relation in relations]}
{"relation": relation.model_dump()}
)

return relations

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

async def delete_relations(self, relations: List[Relation]) -> None:
query = """
UNWIND $relations as relation
MATCH (source:Memory)-[r:$(relation.relationType)]->(target:Memory)
WHERE source.name = relation.source
AND target.name = relation.target
DELETE r
"""
self.neo4j_driver.execute_query(
query,
{"relations": [relation.model_dump() for relation in relations]}
)
for relation in relations:
query = f"""
WITH $relation as relation
MATCH (source:Memory)-[r:{relation.relationType}]->(target:Memory)
WHERE source.name = relation.source
AND target.name = relation.target
DELETE r
"""
self.neo4j_driver.execute_query(
query,
{"relation": relation.model_dump()}
)

async def read_graph(self) -> KnowledgeGraph:
return await self.load_graph()
Expand Down