@graphite-atlas/mcp-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/EXAMPLES.md +501 -0
- package/LICENSE +21 -0
- package/README.md +440 -0
- package/dist/client.d.ts +272 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +335 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +124 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/analytics.d.ts +9 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +374 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/atlases.d.ts +7 -0
- package/dist/tools/atlases.d.ts.map +1 -0
- package/dist/tools/atlases.js +132 -0
- package/dist/tools/atlases.js.map +1 -0
- package/dist/tools/batch.d.ts +10 -0
- package/dist/tools/batch.d.ts.map +1 -0
- package/dist/tools/batch.js +154 -0
- package/dist/tools/batch.js.map +1 -0
- package/dist/tools/brain-dump.d.ts +7 -0
- package/dist/tools/brain-dump.d.ts.map +1 -0
- package/dist/tools/brain-dump.js +98 -0
- package/dist/tools/brain-dump.js.map +1 -0
- package/dist/tools/index.d.ts +18 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +29 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mage.d.ts +10 -0
- package/dist/tools/mage.d.ts.map +1 -0
- package/dist/tools/mage.js +531 -0
- package/dist/tools/mage.js.map +1 -0
- package/dist/tools/paths.d.ts +7 -0
- package/dist/tools/paths.d.ts.map +1 -0
- package/dist/tools/paths.js +245 -0
- package/dist/tools/paths.js.map +1 -0
- package/dist/tools/points.d.ts +7 -0
- package/dist/tools/points.d.ts.map +1 -0
- package/dist/tools/points.js +225 -0
- package/dist/tools/points.js.map +1 -0
- package/dist/tools/validation.d.ts +9 -0
- package/dist/tools/validation.d.ts.map +1 -0
- package/dist/tools/validation.js +323 -0
- package/dist/tools/validation.js.map +1 -0
- package/dist/tools/views.d.ts +9 -0
- package/dist/tools/views.d.ts.map +1 -0
- package/dist/tools/views.js +335 -0
- package/dist/tools/views.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MAGE (Memgraph Advanced Graph Extensions) Algorithm Tools
|
|
3
|
+
*
|
|
4
|
+
* Provides production-grade graph algorithms using Memgraph's MAGE library.
|
|
5
|
+
* https://memgraph.com/docs/advanced-algorithms
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export function createMAGETools(client) {
|
|
9
|
+
return [
|
|
10
|
+
// PageRank - Production grade
|
|
11
|
+
{
|
|
12
|
+
name: 'mage_pagerank',
|
|
13
|
+
description: `Calculate PageRank using Memgraph's MAGE library (production-grade implementation).
|
|
14
|
+
|
|
15
|
+
PageRank identifies the most influential nodes based on the quality and quantity of connections. A node is important if important nodes point to it.
|
|
16
|
+
|
|
17
|
+
Use cases:
|
|
18
|
+
- Find most influential people in the organization
|
|
19
|
+
- Identify critical processes
|
|
20
|
+
- Discover authoritative information sources
|
|
21
|
+
- Rank systems by importance
|
|
22
|
+
|
|
23
|
+
NOTE: Requires MAGE library to be installed in your Memgraph instance.
|
|
24
|
+
Install with: CALL mage.load("pagerank") or install MAGE query modules.`,
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
atlas_id: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
description: 'The atlas to analyze',
|
|
31
|
+
},
|
|
32
|
+
limit: {
|
|
33
|
+
type: 'number',
|
|
34
|
+
description: 'Number of top nodes to return (default: 20)',
|
|
35
|
+
minimum: 1,
|
|
36
|
+
maximum: 100,
|
|
37
|
+
},
|
|
38
|
+
damping_factor: {
|
|
39
|
+
type: 'number',
|
|
40
|
+
description: 'PageRank damping factor (default: 0.85)',
|
|
41
|
+
minimum: 0,
|
|
42
|
+
maximum: 1,
|
|
43
|
+
},
|
|
44
|
+
stop_epsilon: {
|
|
45
|
+
type: 'number',
|
|
46
|
+
description: 'Convergence threshold (default: 0.01)',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ['atlas_id'],
|
|
50
|
+
},
|
|
51
|
+
async execute(args) {
|
|
52
|
+
const schema = z.object({
|
|
53
|
+
atlas_id: z.string(),
|
|
54
|
+
limit: z.number().min(1).max(100).optional().default(20),
|
|
55
|
+
damping_factor: z.number().min(0).max(1).optional().default(0.85),
|
|
56
|
+
stop_epsilon: z.number().optional().default(0.01),
|
|
57
|
+
});
|
|
58
|
+
const { atlas_id, limit, damping_factor, stop_epsilon } = schema.parse(args);
|
|
59
|
+
// Run MAGE PageRank algorithm
|
|
60
|
+
// Note: Requires MAGE library installed in Memgraph
|
|
61
|
+
const query = `
|
|
62
|
+
CALL pagerank.rank() YIELD node, rank
|
|
63
|
+
WITH node, rank
|
|
64
|
+
WHERE node:Point AND node.atlasId = $atlasId AND node.deletedAt IS NULL
|
|
65
|
+
WITH node, rank
|
|
66
|
+
ORDER BY rank DESC
|
|
67
|
+
LIMIT $limit
|
|
68
|
+
RETURN node.id as id,
|
|
69
|
+
node.name as name,
|
|
70
|
+
node.type as type,
|
|
71
|
+
rank
|
|
72
|
+
`;
|
|
73
|
+
const results = await client.queryCypher(atlas_id, {
|
|
74
|
+
query,
|
|
75
|
+
parameters: { atlasId: atlas_id, limit },
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
nodes: results.map((r, index) => ({
|
|
79
|
+
rank: index + 1,
|
|
80
|
+
id: r.id,
|
|
81
|
+
name: r.name,
|
|
82
|
+
type: r.type,
|
|
83
|
+
pagerank_score: r.rank,
|
|
84
|
+
})),
|
|
85
|
+
count: results.length,
|
|
86
|
+
algorithm: 'pagerank_mage',
|
|
87
|
+
parameters: { damping_factor, stop_epsilon },
|
|
88
|
+
interpretation: 'Higher PageRank = more influential/authoritative node',
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
// Betweenness Centrality - Production grade
|
|
93
|
+
{
|
|
94
|
+
name: 'mage_betweenness_centrality',
|
|
95
|
+
description: `Calculate betweenness centrality using MAGE (production-grade).
|
|
96
|
+
|
|
97
|
+
Identifies nodes that act as bridges in the network. High betweenness = critical connector that many paths go through.
|
|
98
|
+
|
|
99
|
+
Use cases:
|
|
100
|
+
- Find key people connecting different teams
|
|
101
|
+
- Identify bottleneck processes
|
|
102
|
+
- Detect single points of failure
|
|
103
|
+
- Understand information flow gatekeepers
|
|
104
|
+
|
|
105
|
+
This is the real algorithm with O(n³) complexity - may be slow on large graphs.`,
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: {
|
|
109
|
+
atlas_id: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
description: 'The atlas to analyze',
|
|
112
|
+
},
|
|
113
|
+
limit: {
|
|
114
|
+
type: 'number',
|
|
115
|
+
description: 'Number of top nodes to return (default: 20)',
|
|
116
|
+
},
|
|
117
|
+
normalized: {
|
|
118
|
+
type: 'boolean',
|
|
119
|
+
description: 'Normalize scores (default: true)',
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
required: ['atlas_id'],
|
|
123
|
+
},
|
|
124
|
+
async execute(args) {
|
|
125
|
+
const schema = z.object({
|
|
126
|
+
atlas_id: z.string(),
|
|
127
|
+
limit: z.number().min(1).max(100).optional().default(20),
|
|
128
|
+
normalized: z.boolean().optional().default(true),
|
|
129
|
+
});
|
|
130
|
+
const { atlas_id, limit, normalized } = schema.parse(args);
|
|
131
|
+
// Run MAGE Betweenness Centrality
|
|
132
|
+
// Note: Requires MAGE library installed in Memgraph
|
|
133
|
+
const query = `
|
|
134
|
+
CALL betweenness_centrality.get()
|
|
135
|
+
YIELD node, betweenness_centrality
|
|
136
|
+
WITH node, betweenness_centrality
|
|
137
|
+
WHERE node:Point AND node.atlasId = $atlasId AND node.deletedAt IS NULL
|
|
138
|
+
WITH node, betweenness_centrality
|
|
139
|
+
ORDER BY betweenness_centrality DESC
|
|
140
|
+
LIMIT $limit
|
|
141
|
+
RETURN node.id as id,
|
|
142
|
+
node.name as name,
|
|
143
|
+
node.type as type,
|
|
144
|
+
betweenness_centrality
|
|
145
|
+
`;
|
|
146
|
+
const results = await client.queryCypher(atlas_id, {
|
|
147
|
+
query,
|
|
148
|
+
parameters: { atlasId: atlas_id, limit },
|
|
149
|
+
});
|
|
150
|
+
return {
|
|
151
|
+
nodes: results.map((r, index) => ({
|
|
152
|
+
rank: index + 1,
|
|
153
|
+
id: r.id,
|
|
154
|
+
name: r.name,
|
|
155
|
+
type: r.type,
|
|
156
|
+
betweenness_score: r.betweenness_centrality,
|
|
157
|
+
})),
|
|
158
|
+
count: results.length,
|
|
159
|
+
algorithm: 'betweenness_centrality_mage',
|
|
160
|
+
parameters: { normalized },
|
|
161
|
+
interpretation: 'Higher score = more critical bridge/connector node',
|
|
162
|
+
};
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
// Community Detection (Louvain/Leiden)
|
|
166
|
+
{
|
|
167
|
+
name: 'mage_detect_communities',
|
|
168
|
+
description: `Detect communities/clusters using Leiden algorithm (MAGE).
|
|
169
|
+
|
|
170
|
+
Identifies naturally forming groups or teams within your organization. Communities are groups of nodes with dense internal connections.
|
|
171
|
+
|
|
172
|
+
Use cases:
|
|
173
|
+
- Discover informal team structures
|
|
174
|
+
- Identify organizational silos
|
|
175
|
+
- Find collaboration clusters
|
|
176
|
+
- Understand departmental boundaries
|
|
177
|
+
- Detect cross-functional groups
|
|
178
|
+
|
|
179
|
+
Returns communities as node groups with community IDs.`,
|
|
180
|
+
inputSchema: {
|
|
181
|
+
type: 'object',
|
|
182
|
+
properties: {
|
|
183
|
+
atlas_id: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: 'The atlas to analyze',
|
|
186
|
+
},
|
|
187
|
+
min_community_size: {
|
|
188
|
+
type: 'number',
|
|
189
|
+
description: 'Minimum nodes per community to include in results (default: 2)',
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
required: ['atlas_id'],
|
|
193
|
+
},
|
|
194
|
+
async execute(args) {
|
|
195
|
+
const schema = z.object({
|
|
196
|
+
atlas_id: z.string(),
|
|
197
|
+
min_community_size: z.number().optional().default(2),
|
|
198
|
+
});
|
|
199
|
+
const { atlas_id, min_community_size } = schema.parse(args);
|
|
200
|
+
// Run MAGE Louvain Community Detection
|
|
201
|
+
const query = `
|
|
202
|
+
CALL louvain.communities()
|
|
203
|
+
YIELD node, community_id
|
|
204
|
+
WITH node, community_id
|
|
205
|
+
WHERE node:Point AND node.atlasId = $atlasId AND node.deletedAt IS NULL
|
|
206
|
+
WITH community_id, collect(node) as nodeList
|
|
207
|
+
WHERE size(nodeList) >= $minSize
|
|
208
|
+
WITH community_id, nodeList,
|
|
209
|
+
[n IN nodeList | {id: n.id, name: n.name, type: n.type}] as nodes
|
|
210
|
+
WITH community_id, nodes, size(nodes) as size
|
|
211
|
+
ORDER BY size DESC
|
|
212
|
+
RETURN community_id, nodes, size
|
|
213
|
+
`;
|
|
214
|
+
const results = await client.queryCypher(atlas_id, {
|
|
215
|
+
query,
|
|
216
|
+
parameters: { atlasId: atlas_id, minSize: min_community_size },
|
|
217
|
+
});
|
|
218
|
+
return {
|
|
219
|
+
communities: results.map((r, index) => ({
|
|
220
|
+
community_id: r.community_id,
|
|
221
|
+
rank: index + 1,
|
|
222
|
+
size: r.size,
|
|
223
|
+
nodes: r.nodes,
|
|
224
|
+
})),
|
|
225
|
+
total_communities: results.length,
|
|
226
|
+
algorithm: 'leiden_community_detection_mage',
|
|
227
|
+
interpretation: 'Communities are groups with dense internal connections. Useful for understanding team structures.',
|
|
228
|
+
};
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
// Weakly Connected Components
|
|
232
|
+
{
|
|
233
|
+
name: 'mage_connected_components',
|
|
234
|
+
description: `Find disconnected subgraphs using Weakly Connected Components (MAGE).
|
|
235
|
+
|
|
236
|
+
Identifies separate "islands" in your graph - groups of nodes that have no paths to other groups.
|
|
237
|
+
|
|
238
|
+
Use cases:
|
|
239
|
+
- Find isolated departments with no cross-communication
|
|
240
|
+
- Detect data silos
|
|
241
|
+
- Identify separate business units
|
|
242
|
+
- Discover disconnected processes
|
|
243
|
+
- Quality check: ensure your graph is connected
|
|
244
|
+
|
|
245
|
+
Returns separate components as groups.`,
|
|
246
|
+
inputSchema: {
|
|
247
|
+
type: 'object',
|
|
248
|
+
properties: {
|
|
249
|
+
atlas_id: {
|
|
250
|
+
type: 'string',
|
|
251
|
+
description: 'The atlas to analyze',
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
required: ['atlas_id'],
|
|
255
|
+
},
|
|
256
|
+
async execute(args) {
|
|
257
|
+
const schema = z.object({
|
|
258
|
+
atlas_id: z.string(),
|
|
259
|
+
});
|
|
260
|
+
const { atlas_id } = schema.parse(args);
|
|
261
|
+
// Run MAGE Weakly Connected Components
|
|
262
|
+
// Note: Requires MAGE library installed in Memgraph
|
|
263
|
+
const query = `
|
|
264
|
+
CALL weakly_connected_components.get()
|
|
265
|
+
YIELD node, component_id
|
|
266
|
+
WITH node, component_id
|
|
267
|
+
WHERE node:Point AND node.atlasId = $atlasId AND node.deletedAt IS NULL
|
|
268
|
+
WITH component_id, collect(node) as nodeList
|
|
269
|
+
WITH component_id, nodeList,
|
|
270
|
+
[n IN nodeList | {id: n.id, name: n.name, type: n.type}] as nodes
|
|
271
|
+
WITH component_id, nodes, size(nodes) as size
|
|
272
|
+
ORDER BY size DESC
|
|
273
|
+
RETURN component_id, nodes, size
|
|
274
|
+
`;
|
|
275
|
+
const results = await client.queryCypher(atlas_id, {
|
|
276
|
+
query,
|
|
277
|
+
parameters: { atlasId: atlas_id },
|
|
278
|
+
});
|
|
279
|
+
const is_connected = results.length === 1;
|
|
280
|
+
return {
|
|
281
|
+
components: results.map((r, index) => ({
|
|
282
|
+
component_id: r.component_id,
|
|
283
|
+
rank: index + 1,
|
|
284
|
+
size: r.size,
|
|
285
|
+
nodes: r.nodes,
|
|
286
|
+
})),
|
|
287
|
+
total_components: results.length,
|
|
288
|
+
is_fully_connected: is_connected,
|
|
289
|
+
algorithm: 'weakly_connected_components_mage',
|
|
290
|
+
interpretation: is_connected
|
|
291
|
+
? 'Graph is fully connected - all nodes can reach each other.'
|
|
292
|
+
: `Graph has ${results.length} disconnected components. These are separate islands with no connections between them.`,
|
|
293
|
+
};
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
// Node Similarity
|
|
297
|
+
{
|
|
298
|
+
name: 'mage_node_similarity',
|
|
299
|
+
description: `Find nodes similar to a given node using MAGE node similarity.
|
|
300
|
+
|
|
301
|
+
Compares nodes based on their connections. Similar nodes have similar neighbors.
|
|
302
|
+
|
|
303
|
+
Use cases:
|
|
304
|
+
- Find people with similar roles
|
|
305
|
+
- Identify processes that are structurally similar
|
|
306
|
+
- Discover alternative systems/tools
|
|
307
|
+
- Recommend similar entities
|
|
308
|
+
- Find comparable positions across departments
|
|
309
|
+
|
|
310
|
+
Returns nodes ranked by similarity score.`,
|
|
311
|
+
inputSchema: {
|
|
312
|
+
type: 'object',
|
|
313
|
+
properties: {
|
|
314
|
+
atlas_id: {
|
|
315
|
+
type: 'string',
|
|
316
|
+
description: 'The atlas to search',
|
|
317
|
+
},
|
|
318
|
+
node_id: {
|
|
319
|
+
type: 'string',
|
|
320
|
+
description: 'Reference node to find similar nodes for',
|
|
321
|
+
},
|
|
322
|
+
limit: {
|
|
323
|
+
type: 'number',
|
|
324
|
+
description: 'Number of similar nodes to return (default: 10)',
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
required: ['atlas_id', 'node_id'],
|
|
328
|
+
},
|
|
329
|
+
async execute(args) {
|
|
330
|
+
const schema = z.object({
|
|
331
|
+
atlas_id: z.string(),
|
|
332
|
+
node_id: z.string(),
|
|
333
|
+
limit: z.number().min(1).max(50).optional().default(10),
|
|
334
|
+
});
|
|
335
|
+
const { atlas_id, node_id, limit } = schema.parse(args);
|
|
336
|
+
// Run MAGE Node Similarity using Jaccard coefficient
|
|
337
|
+
const query = `
|
|
338
|
+
MATCH (target:Point {id: $nodeId, atlasId: $atlasId})
|
|
339
|
+
WHERE target.deletedAt IS NULL
|
|
340
|
+
CALL node_similarity.jaccard(target)
|
|
341
|
+
YIELD node, similarity
|
|
342
|
+
WITH node, similarity
|
|
343
|
+
WHERE node:Point AND node.atlasId = $atlasId AND node.deletedAt IS NULL
|
|
344
|
+
AND node.id <> $nodeId
|
|
345
|
+
WITH node, similarity
|
|
346
|
+
ORDER BY similarity DESC
|
|
347
|
+
LIMIT $limit
|
|
348
|
+
RETURN node.id as id,
|
|
349
|
+
node.name as name,
|
|
350
|
+
node.type as type,
|
|
351
|
+
similarity
|
|
352
|
+
`;
|
|
353
|
+
const results = await client.queryCypher(atlas_id, {
|
|
354
|
+
query,
|
|
355
|
+
parameters: { atlasId: atlas_id, nodeId: node_id, limit },
|
|
356
|
+
});
|
|
357
|
+
return {
|
|
358
|
+
reference_node: node_id,
|
|
359
|
+
similar_nodes: results.map((r, index) => ({
|
|
360
|
+
rank: index + 1,
|
|
361
|
+
id: r.id,
|
|
362
|
+
name: r.name,
|
|
363
|
+
type: r.type,
|
|
364
|
+
similarity_score: r.similarity,
|
|
365
|
+
})),
|
|
366
|
+
count: results.length,
|
|
367
|
+
algorithm: 'node_similarity_jaccard_mage',
|
|
368
|
+
interpretation: 'Similarity based on shared connections. 1.0 = identical neighbors, 0.0 = no shared neighbors.',
|
|
369
|
+
};
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
// Shortest Path
|
|
373
|
+
{
|
|
374
|
+
name: 'mage_shortest_path',
|
|
375
|
+
description: `Find shortest path between two nodes using MAGE.
|
|
376
|
+
|
|
377
|
+
Discovers the minimum number of hops needed to connect two entities.
|
|
378
|
+
|
|
379
|
+
Use cases:
|
|
380
|
+
- "How is Person A connected to Person B?"
|
|
381
|
+
- "What's the chain of command from this role to CEO?"
|
|
382
|
+
- "How does this process connect to that outcome?"
|
|
383
|
+
- "What's the relationship path between these systems?"
|
|
384
|
+
|
|
385
|
+
Returns the shortest path with all intermediate nodes.`,
|
|
386
|
+
inputSchema: {
|
|
387
|
+
type: 'object',
|
|
388
|
+
properties: {
|
|
389
|
+
atlas_id: {
|
|
390
|
+
type: 'string',
|
|
391
|
+
description: 'The atlas to search',
|
|
392
|
+
},
|
|
393
|
+
source_id: {
|
|
394
|
+
type: 'string',
|
|
395
|
+
description: 'Starting node ID',
|
|
396
|
+
},
|
|
397
|
+
target_id: {
|
|
398
|
+
type: 'string',
|
|
399
|
+
description: 'Destination node ID',
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
required: ['atlas_id', 'source_id', 'target_id'],
|
|
403
|
+
},
|
|
404
|
+
async execute(args) {
|
|
405
|
+
const schema = z.object({
|
|
406
|
+
atlas_id: z.string(),
|
|
407
|
+
source_id: z.string(),
|
|
408
|
+
target_id: z.string(),
|
|
409
|
+
});
|
|
410
|
+
const { atlas_id, source_id, target_id } = schema.parse(args);
|
|
411
|
+
// Use Memgraph's BFS shortest path
|
|
412
|
+
const query = `
|
|
413
|
+
MATCH (source:Point {id: $sourceId, atlasId: $atlasId})
|
|
414
|
+
MATCH (target:Point {id: $targetId, atlasId: $atlasId})
|
|
415
|
+
WHERE source.deletedAt IS NULL AND target.deletedAt IS NULL
|
|
416
|
+
MATCH path = (source)-[:PATH*bfs..15]-(target)
|
|
417
|
+
WITH path
|
|
418
|
+
UNWIND nodes(path) as pathNode
|
|
419
|
+
WITH path, collect({id: pathNode.id, name: pathNode.name, type: pathNode.type}) as path_nodes
|
|
420
|
+
UNWIND relationships(path) as pathRel
|
|
421
|
+
WITH path, path_nodes, collect({type: pathRel.name}) as path_relationships
|
|
422
|
+
WITH path_nodes, path_relationships, size(relationships(path)) as distance
|
|
423
|
+
RETURN path_nodes, path_relationships, distance
|
|
424
|
+
LIMIT 1
|
|
425
|
+
`;
|
|
426
|
+
const results = await client.queryCypher(atlas_id, {
|
|
427
|
+
query,
|
|
428
|
+
parameters: {
|
|
429
|
+
atlasId: atlas_id,
|
|
430
|
+
sourceId: source_id,
|
|
431
|
+
targetId: target_id,
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
if (results.length === 0) {
|
|
435
|
+
return {
|
|
436
|
+
source_id,
|
|
437
|
+
target_id,
|
|
438
|
+
path_found: false,
|
|
439
|
+
message: 'No path exists between these nodes. They are in disconnected components.',
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
const result = results[0];
|
|
443
|
+
return {
|
|
444
|
+
source_id,
|
|
445
|
+
target_id,
|
|
446
|
+
path_found: true,
|
|
447
|
+
distance: result.distance,
|
|
448
|
+
path: result.path_nodes,
|
|
449
|
+
relationships: result.path_relationships,
|
|
450
|
+
algorithm: 'shortest_path_mage',
|
|
451
|
+
interpretation: `Shortest path has ${result.distance} hop(s)`,
|
|
452
|
+
};
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
// Degree Centrality
|
|
456
|
+
{
|
|
457
|
+
name: 'mage_degree_centrality',
|
|
458
|
+
description: `Calculate degree centrality using MAGE.
|
|
459
|
+
|
|
460
|
+
Identifies most connected nodes (nodes with the most direct connections).
|
|
461
|
+
|
|
462
|
+
Use cases:
|
|
463
|
+
- Find most connected people (social hubs)
|
|
464
|
+
- Identify central processes
|
|
465
|
+
- Discover highly-used systems
|
|
466
|
+
- Find nodes with most dependencies
|
|
467
|
+
|
|
468
|
+
Returns nodes ranked by number of connections.`,
|
|
469
|
+
inputSchema: {
|
|
470
|
+
type: 'object',
|
|
471
|
+
properties: {
|
|
472
|
+
atlas_id: {
|
|
473
|
+
type: 'string',
|
|
474
|
+
description: 'The atlas to analyze',
|
|
475
|
+
},
|
|
476
|
+
limit: {
|
|
477
|
+
type: 'number',
|
|
478
|
+
description: 'Number of top nodes to return (default: 20)',
|
|
479
|
+
},
|
|
480
|
+
type: {
|
|
481
|
+
type: 'string',
|
|
482
|
+
description: 'Type of degree: in, out, or both (default: both)',
|
|
483
|
+
enum: ['in', 'out', 'both'],
|
|
484
|
+
},
|
|
485
|
+
},
|
|
486
|
+
required: ['atlas_id'],
|
|
487
|
+
},
|
|
488
|
+
async execute(args) {
|
|
489
|
+
const schema = z.object({
|
|
490
|
+
atlas_id: z.string(),
|
|
491
|
+
limit: z.number().min(1).max(100).optional().default(20),
|
|
492
|
+
type: z.enum(['in', 'out', 'both']).optional().default('both'),
|
|
493
|
+
});
|
|
494
|
+
const { atlas_id, limit, type } = schema.parse(args);
|
|
495
|
+
// Run MAGE Degree Centrality
|
|
496
|
+
// Note: Requires MAGE library installed in Memgraph
|
|
497
|
+
const query = `
|
|
498
|
+
CALL degree_centrality.get()
|
|
499
|
+
YIELD node, degree
|
|
500
|
+
WITH node, degree
|
|
501
|
+
WHERE node:Point AND node.atlasId = $atlasId AND node.deletedAt IS NULL
|
|
502
|
+
WITH node, degree
|
|
503
|
+
ORDER BY degree DESC
|
|
504
|
+
LIMIT $limit
|
|
505
|
+
RETURN node.id as id,
|
|
506
|
+
node.name as name,
|
|
507
|
+
node.type as type,
|
|
508
|
+
degree
|
|
509
|
+
`;
|
|
510
|
+
const results = await client.queryCypher(atlas_id, {
|
|
511
|
+
query,
|
|
512
|
+
parameters: { atlasId: atlas_id, limit },
|
|
513
|
+
});
|
|
514
|
+
return {
|
|
515
|
+
nodes: results.map((r, index) => ({
|
|
516
|
+
rank: index + 1,
|
|
517
|
+
id: r.id,
|
|
518
|
+
name: r.name,
|
|
519
|
+
type: r.type,
|
|
520
|
+
degree: r.degree,
|
|
521
|
+
})),
|
|
522
|
+
count: results.length,
|
|
523
|
+
algorithm: 'degree_centrality_mage',
|
|
524
|
+
degree_type: type,
|
|
525
|
+
interpretation: 'Higher degree = more direct connections',
|
|
526
|
+
};
|
|
527
|
+
},
|
|
528
|
+
},
|
|
529
|
+
];
|
|
530
|
+
}
|
|
531
|
+
//# sourceMappingURL=mage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mage.js","sourceRoot":"","sources":["../../src/tools/mage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path (Edge/Relationship) Management Tools
|
|
3
|
+
*/
|
|
4
|
+
import { GraphiteAtlasClient } from '../client.js';
|
|
5
|
+
import { MCPTool } from './index.js';
|
|
6
|
+
export declare function createPathTools(client: GraphiteAtlasClient): MCPTool[];
|
|
7
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/tools/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,wBAAgB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,EAAE,CA0PtE"}
|