Skip to content

Commit 854555e

Browse files
Support orientation in degree centrality
1 parent 4dfdb89 commit 854555e

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

mcp_server/src/mcp_server_neo4j_gds/centrality_algorithm_handlers.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import logging
22
from typing import Any, Dict
33

4-
54
from .algorithm_handler import AlgorithmHandler
65
from .gds import projected_graph
76

@@ -17,7 +16,7 @@ def article_rank(self, **kwargs):
1716
k: v
1817
for k, v in kwargs.items()
1918
if v is not None
20-
and k not in ["nodes", "nodeIdentifierProperty", "sourceNodes"]
19+
and k not in ["nodes", "nodeIdentifierProperty", "sourceNodes"]
2120
}
2221
node_names = kwargs.get("nodes", None)
2322
node_identifier_property = kwargs.get("nodeIdentifierProperty")
@@ -292,7 +291,13 @@ def execute(self, arguments: Dict[str, Any]) -> Any:
292291
class DegreeCentralityHandler(AlgorithmHandler):
293292
def degree_centrality(self, **kwargs):
294293
with projected_graph(self.gds) as G:
295-
centrality = self.gds.degree.stream(G)
294+
params = {
295+
k: v
296+
for k, v in kwargs.items()
297+
if v is not None and k not in ["nodes", "nodeIdentifierProperty"]
298+
}
299+
logger.info(f"Degree centrality parameters: {params}")
300+
centrality = self.gds.degree.stream(G, **params)
296301

297302
# Add node names to the results if nodeIdentifierProperty is provided
298303
node_identifier_property = kwargs.get("nodeIdentifierProperty")
@@ -332,6 +337,7 @@ def execute(self, arguments: Dict[str, Any]) -> Any:
332337
return self.degree_centrality(
333338
nodes=arguments.get("nodes"),
334339
nodeIdentifierProperty=arguments.get("nodeIdentifierProperty"),
340+
orientation=arguments.get("orientation"),
335341
)
336342

337343

@@ -342,7 +348,7 @@ def eigenvector_centrality(self, **kwargs):
342348
k: v
343349
for k, v in kwargs.items()
344350
if v is not None
345-
and k not in ["nodes", "nodeIdentifierProperty", "sourceNodes"]
351+
and k not in ["nodes", "nodeIdentifierProperty", "sourceNodes"]
346352
}
347353
node_identifier_property = kwargs.get("nodeIdentifierProperty")
348354
source_nodes = kwargs.get("sourceNodes", None)
@@ -440,7 +446,7 @@ def pagerank(self, **kwargs):
440446
k: v
441447
for k, v in kwargs.items()
442448
if v is not None
443-
and k not in ["nodes", "nodeIdentifierProperty", "sourceNodes"]
449+
and k not in ["nodes", "nodeIdentifierProperty", "sourceNodes"]
444450
}
445451
node_identifier_property = kwargs.get("nodeIdentifierProperty")
446452
source_nodes = kwargs.get("sourceNodes", None)

mcp_server/src/mcp_server_neo4j_gds/centrality_algorithm_specs.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,10 @@
186186
"type": "string",
187187
"description": "Property name to use for identifying nodes (e.g., 'name', 'Name', 'title'). Use get_node_properties_keys to find available properties.",
188188
},
189+
"orientation": {
190+
"type": "string",
191+
"description": "The orientation used to compute node degrees. Supported orientations are NATURAL (for out-degree), REVERSE (for in-degree) and UNDIRECTED (for both in-degree and out-degree) ",
192+
},
189193
},
190194
"required": [],
191195
},

0 commit comments

Comments
 (0)