@danielsimonjr/memory-mcp 0.41.0 → 0.47.1

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.
@@ -0,0 +1,732 @@
1
+ /**
2
+ * MCP Tool Definitions
3
+ *
4
+ * Extracted from MCPServer.ts to reduce file size and improve maintainability.
5
+ * Contains all 45 tool schemas for the Knowledge Graph MCP Server.
6
+ *
7
+ * @module server/toolDefinitions
8
+ */
9
+ /**
10
+ * All tool definitions for the Knowledge Graph MCP Server.
11
+ * Organized by category for easier maintenance.
12
+ */
13
+ export const toolDefinitions = [
14
+ // ==================== ENTITY TOOLS ====================
15
+ {
16
+ name: 'create_entities',
17
+ description: 'Create multiple new entities in the knowledge graph',
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ entities: {
22
+ type: 'array',
23
+ items: {
24
+ type: 'object',
25
+ properties: {
26
+ name: { type: 'string', description: 'The name of the entity' },
27
+ entityType: { type: 'string', description: 'The type of the entity' },
28
+ observations: {
29
+ type: 'array',
30
+ items: { type: 'string' },
31
+ description: 'An array of observation contents associated with the entity',
32
+ },
33
+ },
34
+ required: ['name', 'entityType', 'observations'],
35
+ additionalProperties: false,
36
+ },
37
+ },
38
+ },
39
+ required: ['entities'],
40
+ additionalProperties: false,
41
+ },
42
+ },
43
+ {
44
+ name: 'delete_entities',
45
+ description: 'Delete multiple entities from the knowledge graph',
46
+ inputSchema: {
47
+ type: 'object',
48
+ properties: {
49
+ entityNames: {
50
+ type: 'array',
51
+ items: { type: 'string' },
52
+ description: 'An array of entity names to delete',
53
+ },
54
+ },
55
+ required: ['entityNames'],
56
+ additionalProperties: false,
57
+ },
58
+ },
59
+ {
60
+ name: 'read_graph',
61
+ description: 'Read the entire knowledge graph',
62
+ inputSchema: {
63
+ type: 'object',
64
+ properties: {},
65
+ additionalProperties: false,
66
+ },
67
+ },
68
+ {
69
+ name: 'open_nodes',
70
+ description: 'Open specific nodes by their names',
71
+ inputSchema: {
72
+ type: 'object',
73
+ properties: {
74
+ names: {
75
+ type: 'array',
76
+ items: { type: 'string' },
77
+ description: 'Array of entity names to retrieve',
78
+ },
79
+ },
80
+ required: ['names'],
81
+ additionalProperties: false,
82
+ },
83
+ },
84
+ // ==================== RELATION TOOLS ====================
85
+ {
86
+ name: 'create_relations',
87
+ description: 'Create multiple new relations between entities in the knowledge graph. Relations should be in active voice',
88
+ inputSchema: {
89
+ type: 'object',
90
+ properties: {
91
+ relations: {
92
+ type: 'array',
93
+ items: {
94
+ type: 'object',
95
+ properties: {
96
+ from: { type: 'string', description: 'The name of the entity where the relation starts' },
97
+ to: { type: 'string', description: 'The name of the entity where the relation ends' },
98
+ relationType: {
99
+ type: 'string',
100
+ description: "The type of the relation in active voice (e.g., 'works_at', 'knows')",
101
+ },
102
+ },
103
+ required: ['from', 'to', 'relationType'],
104
+ additionalProperties: false,
105
+ },
106
+ },
107
+ },
108
+ required: ['relations'],
109
+ additionalProperties: false,
110
+ },
111
+ },
112
+ {
113
+ name: 'delete_relations',
114
+ description: 'Delete multiple relations from the knowledge graph',
115
+ inputSchema: {
116
+ type: 'object',
117
+ properties: {
118
+ relations: {
119
+ type: 'array',
120
+ items: {
121
+ type: 'object',
122
+ properties: {
123
+ from: { type: 'string' },
124
+ to: { type: 'string' },
125
+ relationType: { type: 'string' },
126
+ },
127
+ required: ['from', 'to', 'relationType'],
128
+ additionalProperties: false,
129
+ },
130
+ },
131
+ },
132
+ required: ['relations'],
133
+ additionalProperties: false,
134
+ },
135
+ },
136
+ // ==================== OBSERVATION TOOLS ====================
137
+ {
138
+ name: 'add_observations',
139
+ description: 'Add new observations to existing entities in the knowledge graph',
140
+ inputSchema: {
141
+ type: 'object',
142
+ properties: {
143
+ observations: {
144
+ type: 'array',
145
+ items: {
146
+ type: 'object',
147
+ properties: {
148
+ entityName: { type: 'string', description: 'The name of the entity to add observations to' },
149
+ contents: {
150
+ type: 'array',
151
+ items: { type: 'string' },
152
+ description: 'An array of observation contents to add',
153
+ },
154
+ },
155
+ required: ['entityName', 'contents'],
156
+ additionalProperties: false,
157
+ },
158
+ },
159
+ },
160
+ required: ['observations'],
161
+ additionalProperties: false,
162
+ },
163
+ },
164
+ {
165
+ name: 'delete_observations',
166
+ description: 'Delete specific observations from entities',
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ deletions: {
171
+ type: 'array',
172
+ items: {
173
+ type: 'object',
174
+ properties: {
175
+ entityName: { type: 'string' },
176
+ observations: {
177
+ type: 'array',
178
+ items: { type: 'string' },
179
+ },
180
+ },
181
+ required: ['entityName', 'observations'],
182
+ },
183
+ },
184
+ },
185
+ required: ['deletions'],
186
+ additionalProperties: false,
187
+ },
188
+ },
189
+ // ==================== SEARCH TOOLS ====================
190
+ {
191
+ name: 'search_nodes',
192
+ description: 'Search for nodes in the knowledge graph based on query string, with optional tag and importance filtering',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ query: { type: 'string', description: 'The search query' },
197
+ tags: {
198
+ type: 'array',
199
+ items: { type: 'string' },
200
+ description: 'Optional array of tags to filter by',
201
+ },
202
+ minImportance: { type: 'number', description: 'Optional minimum importance score (0-10)' },
203
+ maxImportance: { type: 'number', description: 'Optional maximum importance score (0-10)' },
204
+ },
205
+ required: ['query'],
206
+ additionalProperties: false,
207
+ },
208
+ },
209
+ {
210
+ name: 'search_by_date_range',
211
+ description: 'Search entities within a date range, with optional filtering by entity type and tags',
212
+ inputSchema: {
213
+ type: 'object',
214
+ properties: {
215
+ startDate: { type: 'string', description: 'Start date in ISO 8601 format' },
216
+ endDate: { type: 'string', description: 'End date in ISO 8601 format' },
217
+ entityType: { type: 'string', description: 'Optional entity type to filter by' },
218
+ tags: {
219
+ type: 'array',
220
+ items: { type: 'string' },
221
+ description: 'Optional array of tags to filter by',
222
+ },
223
+ },
224
+ additionalProperties: false,
225
+ },
226
+ },
227
+ {
228
+ name: 'search_nodes_ranked',
229
+ description: 'Perform TF-IDF ranked search',
230
+ inputSchema: {
231
+ type: 'object',
232
+ properties: {
233
+ query: { type: 'string', description: 'Search query' },
234
+ tags: { type: 'array', items: { type: 'string' } },
235
+ minImportance: { type: 'number' },
236
+ maxImportance: { type: 'number' },
237
+ limit: { type: 'number', description: 'Max results' },
238
+ },
239
+ required: ['query'],
240
+ additionalProperties: false,
241
+ },
242
+ },
243
+ {
244
+ name: 'boolean_search',
245
+ description: 'Perform boolean search with AND, OR, NOT operators',
246
+ inputSchema: {
247
+ type: 'object',
248
+ properties: {
249
+ query: { type: 'string', description: "Boolean query (e.g., 'alice AND bob')" },
250
+ tags: { type: 'array', items: { type: 'string' } },
251
+ minImportance: { type: 'number' },
252
+ maxImportance: { type: 'number' },
253
+ },
254
+ required: ['query'],
255
+ additionalProperties: false,
256
+ },
257
+ },
258
+ {
259
+ name: 'fuzzy_search',
260
+ description: 'Perform fuzzy search with typo tolerance',
261
+ inputSchema: {
262
+ type: 'object',
263
+ properties: {
264
+ query: { type: 'string', description: 'Search query' },
265
+ threshold: { type: 'number', description: 'Similarity threshold (0.0-1.0)' },
266
+ tags: { type: 'array', items: { type: 'string' } },
267
+ minImportance: { type: 'number' },
268
+ maxImportance: { type: 'number' },
269
+ },
270
+ required: ['query'],
271
+ additionalProperties: false,
272
+ },
273
+ },
274
+ {
275
+ name: 'get_search_suggestions',
276
+ description: 'Get search suggestions for a query',
277
+ inputSchema: {
278
+ type: 'object',
279
+ properties: {
280
+ query: { type: 'string', description: 'Search query' },
281
+ maxSuggestions: { type: 'number', description: 'Max suggestions to return' },
282
+ },
283
+ required: ['query'],
284
+ additionalProperties: false,
285
+ },
286
+ },
287
+ // ==================== SAVED SEARCH TOOLS ====================
288
+ {
289
+ name: 'save_search',
290
+ description: 'Save a search query for later reuse',
291
+ inputSchema: {
292
+ type: 'object',
293
+ properties: {
294
+ name: { type: 'string', description: 'Name of the saved search' },
295
+ query: { type: 'string', description: 'Search query' },
296
+ tags: { type: 'array', items: { type: 'string' }, description: 'Optional tags filter' },
297
+ minImportance: { type: 'number', description: 'Optional minimum importance' },
298
+ maxImportance: { type: 'number', description: 'Optional maximum importance' },
299
+ searchType: { type: 'string', description: 'Type of search (basic, boolean, fuzzy, ranked)' },
300
+ description: { type: 'string', description: 'Optional description of the search' },
301
+ },
302
+ required: ['name', 'query'],
303
+ additionalProperties: false,
304
+ },
305
+ },
306
+ {
307
+ name: 'execute_saved_search',
308
+ description: 'Execute a previously saved search by name',
309
+ inputSchema: {
310
+ type: 'object',
311
+ properties: {
312
+ name: { type: 'string', description: 'Name of the saved search' },
313
+ },
314
+ required: ['name'],
315
+ additionalProperties: false,
316
+ },
317
+ },
318
+ {
319
+ name: 'list_saved_searches',
320
+ description: 'List all saved searches',
321
+ inputSchema: {
322
+ type: 'object',
323
+ properties: {},
324
+ additionalProperties: false,
325
+ },
326
+ },
327
+ {
328
+ name: 'delete_saved_search',
329
+ description: 'Delete a saved search',
330
+ inputSchema: {
331
+ type: 'object',
332
+ properties: {
333
+ name: { type: 'string', description: 'Name of the saved search to delete' },
334
+ },
335
+ required: ['name'],
336
+ additionalProperties: false,
337
+ },
338
+ },
339
+ {
340
+ name: 'update_saved_search',
341
+ description: 'Update a saved search',
342
+ inputSchema: {
343
+ type: 'object',
344
+ properties: {
345
+ name: { type: 'string', description: 'Name of the saved search' },
346
+ updates: { type: 'object', description: 'Fields to update' },
347
+ },
348
+ required: ['name', 'updates'],
349
+ additionalProperties: false,
350
+ },
351
+ },
352
+ // ==================== TAG TOOLS ====================
353
+ {
354
+ name: 'add_tags',
355
+ description: 'Add tags to an entity',
356
+ inputSchema: {
357
+ type: 'object',
358
+ properties: {
359
+ entityName: { type: 'string', description: 'Name of the entity' },
360
+ tags: { type: 'array', items: { type: 'string' }, description: 'Array of tags to add' },
361
+ },
362
+ required: ['entityName', 'tags'],
363
+ additionalProperties: false,
364
+ },
365
+ },
366
+ {
367
+ name: 'remove_tags',
368
+ description: 'Remove tags from an entity',
369
+ inputSchema: {
370
+ type: 'object',
371
+ properties: {
372
+ entityName: { type: 'string', description: 'Name of the entity' },
373
+ tags: { type: 'array', items: { type: 'string' }, description: 'Array of tags to remove' },
374
+ },
375
+ required: ['entityName', 'tags'],
376
+ additionalProperties: false,
377
+ },
378
+ },
379
+ {
380
+ name: 'set_importance',
381
+ description: 'Set the importance score of an entity (0-10)',
382
+ inputSchema: {
383
+ type: 'object',
384
+ properties: {
385
+ entityName: { type: 'string', description: 'Name of the entity' },
386
+ importance: { type: 'number', description: 'Importance score between 0 and 10' },
387
+ },
388
+ required: ['entityName', 'importance'],
389
+ additionalProperties: false,
390
+ },
391
+ },
392
+ {
393
+ name: 'add_tags_to_multiple_entities',
394
+ description: 'Add the same tags to multiple entities at once',
395
+ inputSchema: {
396
+ type: 'object',
397
+ properties: {
398
+ entityNames: { type: 'array', items: { type: 'string' }, description: 'Array of entity names' },
399
+ tags: { type: 'array', items: { type: 'string' }, description: 'Array of tags to add to all entities' },
400
+ },
401
+ required: ['entityNames', 'tags'],
402
+ additionalProperties: false,
403
+ },
404
+ },
405
+ {
406
+ name: 'replace_tag',
407
+ description: 'Replace a tag with a new tag across all entities',
408
+ inputSchema: {
409
+ type: 'object',
410
+ properties: {
411
+ oldTag: { type: 'string', description: 'The tag to replace' },
412
+ newTag: { type: 'string', description: 'The new tag' },
413
+ },
414
+ required: ['oldTag', 'newTag'],
415
+ additionalProperties: false,
416
+ },
417
+ },
418
+ {
419
+ name: 'merge_tags',
420
+ description: 'Merge two tags into a target tag across all entities',
421
+ inputSchema: {
422
+ type: 'object',
423
+ properties: {
424
+ tag1: { type: 'string', description: 'First tag to merge' },
425
+ tag2: { type: 'string', description: 'Second tag to merge' },
426
+ targetTag: { type: 'string', description: 'Target tag to merge into' },
427
+ },
428
+ required: ['tag1', 'tag2', 'targetTag'],
429
+ additionalProperties: false,
430
+ },
431
+ },
432
+ // ==================== TAG ALIAS TOOLS ====================
433
+ {
434
+ name: 'add_tag_alias',
435
+ description: 'Add a tag alias (synonym mapping)',
436
+ inputSchema: {
437
+ type: 'object',
438
+ properties: {
439
+ alias: { type: 'string', description: 'The alias/synonym' },
440
+ canonical: { type: 'string', description: 'The canonical tag' },
441
+ description: { type: 'string', description: 'Optional description' },
442
+ },
443
+ required: ['alias', 'canonical'],
444
+ additionalProperties: false,
445
+ },
446
+ },
447
+ {
448
+ name: 'list_tag_aliases',
449
+ description: 'List all tag aliases',
450
+ inputSchema: {
451
+ type: 'object',
452
+ properties: {},
453
+ additionalProperties: false,
454
+ },
455
+ },
456
+ {
457
+ name: 'remove_tag_alias',
458
+ description: 'Remove a tag alias',
459
+ inputSchema: {
460
+ type: 'object',
461
+ properties: {
462
+ alias: { type: 'string', description: 'The alias to remove' },
463
+ },
464
+ required: ['alias'],
465
+ additionalProperties: false,
466
+ },
467
+ },
468
+ {
469
+ name: 'get_aliases_for_tag',
470
+ description: 'Get all aliases for a canonical tag',
471
+ inputSchema: {
472
+ type: 'object',
473
+ properties: {
474
+ canonicalTag: { type: 'string', description: 'The canonical tag' },
475
+ },
476
+ required: ['canonicalTag'],
477
+ additionalProperties: false,
478
+ },
479
+ },
480
+ {
481
+ name: 'resolve_tag',
482
+ description: 'Resolve a tag to its canonical form',
483
+ inputSchema: {
484
+ type: 'object',
485
+ properties: {
486
+ tag: { type: 'string', description: 'Tag to resolve' },
487
+ },
488
+ required: ['tag'],
489
+ additionalProperties: false,
490
+ },
491
+ },
492
+ // ==================== HIERARCHY TOOLS ====================
493
+ {
494
+ name: 'set_entity_parent',
495
+ description: 'Set the parent of an entity for hierarchical organization',
496
+ inputSchema: {
497
+ type: 'object',
498
+ properties: {
499
+ entityName: { type: 'string' },
500
+ parentName: { type: ['string', 'null'], description: 'Parent entity name or null to remove parent' },
501
+ },
502
+ required: ['entityName', 'parentName'],
503
+ additionalProperties: false,
504
+ },
505
+ },
506
+ {
507
+ name: 'get_children',
508
+ description: 'Get all child entities of an entity',
509
+ inputSchema: {
510
+ type: 'object',
511
+ properties: {
512
+ entityName: { type: 'string' },
513
+ },
514
+ required: ['entityName'],
515
+ additionalProperties: false,
516
+ },
517
+ },
518
+ {
519
+ name: 'get_parent',
520
+ description: 'Get the parent entity of an entity',
521
+ inputSchema: {
522
+ type: 'object',
523
+ properties: {
524
+ entityName: { type: 'string' },
525
+ },
526
+ required: ['entityName'],
527
+ additionalProperties: false,
528
+ },
529
+ },
530
+ {
531
+ name: 'get_ancestors',
532
+ description: 'Get all ancestor entities of an entity',
533
+ inputSchema: {
534
+ type: 'object',
535
+ properties: {
536
+ entityName: { type: 'string' },
537
+ },
538
+ required: ['entityName'],
539
+ additionalProperties: false,
540
+ },
541
+ },
542
+ {
543
+ name: 'get_descendants',
544
+ description: 'Get all descendant entities of an entity',
545
+ inputSchema: {
546
+ type: 'object',
547
+ properties: {
548
+ entityName: { type: 'string' },
549
+ },
550
+ required: ['entityName'],
551
+ additionalProperties: false,
552
+ },
553
+ },
554
+ {
555
+ name: 'get_subtree',
556
+ description: 'Get entity and all its descendants as a subgraph',
557
+ inputSchema: {
558
+ type: 'object',
559
+ properties: {
560
+ entityName: { type: 'string' },
561
+ },
562
+ required: ['entityName'],
563
+ additionalProperties: false,
564
+ },
565
+ },
566
+ {
567
+ name: 'get_root_entities',
568
+ description: 'Get all root entities (entities without parents)',
569
+ inputSchema: {
570
+ type: 'object',
571
+ properties: {},
572
+ additionalProperties: false,
573
+ },
574
+ },
575
+ {
576
+ name: 'get_entity_depth',
577
+ description: 'Get the depth of an entity in the hierarchy',
578
+ inputSchema: {
579
+ type: 'object',
580
+ properties: {
581
+ entityName: { type: 'string' },
582
+ },
583
+ required: ['entityName'],
584
+ additionalProperties: false,
585
+ },
586
+ },
587
+ {
588
+ name: 'move_entity',
589
+ description: 'Move an entity to a new parent',
590
+ inputSchema: {
591
+ type: 'object',
592
+ properties: {
593
+ entityName: { type: 'string' },
594
+ newParentName: { type: ['string', 'null'] },
595
+ },
596
+ required: ['entityName', 'newParentName'],
597
+ additionalProperties: false,
598
+ },
599
+ },
600
+ // ==================== ANALYTICS TOOLS ====================
601
+ {
602
+ name: 'get_graph_stats',
603
+ description: 'Get statistics about the knowledge graph',
604
+ inputSchema: {
605
+ type: 'object',
606
+ properties: {},
607
+ additionalProperties: false,
608
+ },
609
+ },
610
+ {
611
+ name: 'validate_graph',
612
+ description: 'Validate the knowledge graph for integrity issues',
613
+ inputSchema: {
614
+ type: 'object',
615
+ properties: {},
616
+ additionalProperties: false,
617
+ },
618
+ },
619
+ // ==================== COMPRESSION TOOLS ====================
620
+ {
621
+ name: 'find_duplicates',
622
+ description: 'Find potential duplicate entities based on similarity',
623
+ inputSchema: {
624
+ type: 'object',
625
+ properties: {
626
+ threshold: { type: 'number', description: 'Similarity threshold (0.0-1.0)' },
627
+ },
628
+ additionalProperties: false,
629
+ },
630
+ },
631
+ {
632
+ name: 'merge_entities',
633
+ description: 'Merge multiple entities into one',
634
+ inputSchema: {
635
+ type: 'object',
636
+ properties: {
637
+ entityNames: { type: 'array', items: { type: 'string' }, description: 'Entities to merge' },
638
+ targetName: { type: 'string', description: 'Optional target entity name' },
639
+ },
640
+ required: ['entityNames'],
641
+ additionalProperties: false,
642
+ },
643
+ },
644
+ {
645
+ name: 'compress_graph',
646
+ description: 'Compress the graph by merging similar entities',
647
+ inputSchema: {
648
+ type: 'object',
649
+ properties: {
650
+ threshold: { type: 'number', description: 'Similarity threshold' },
651
+ dryRun: { type: 'boolean', description: 'Preview without applying changes' },
652
+ },
653
+ additionalProperties: false,
654
+ },
655
+ },
656
+ {
657
+ name: 'archive_entities',
658
+ description: 'Archive old or low-importance entities',
659
+ inputSchema: {
660
+ type: 'object',
661
+ properties: {
662
+ olderThan: { type: 'string', description: 'Archive entities older than this date (ISO 8601)' },
663
+ importanceLessThan: { type: 'number', description: 'Archive entities below this importance' },
664
+ tags: { type: 'array', items: { type: 'string' }, description: 'Archive entities with these tags' },
665
+ dryRun: { type: 'boolean', description: 'Preview without applying changes' },
666
+ },
667
+ additionalProperties: false,
668
+ },
669
+ },
670
+ // ==================== IMPORT/EXPORT TOOLS ====================
671
+ {
672
+ name: 'import_graph',
673
+ description: 'Import knowledge graph from various formats',
674
+ inputSchema: {
675
+ type: 'object',
676
+ properties: {
677
+ format: { type: 'string', enum: ['json', 'csv', 'graphml'] },
678
+ data: { type: 'string', description: 'Import data as string' },
679
+ mergeStrategy: {
680
+ type: 'string',
681
+ enum: ['replace', 'skip', 'merge', 'fail'],
682
+ description: 'How to handle conflicts',
683
+ },
684
+ dryRun: { type: 'boolean', description: 'Preview without applying changes' },
685
+ },
686
+ required: ['format', 'data'],
687
+ additionalProperties: false,
688
+ },
689
+ },
690
+ {
691
+ name: 'export_graph',
692
+ description: 'Export knowledge graph in various formats',
693
+ inputSchema: {
694
+ type: 'object',
695
+ properties: {
696
+ format: {
697
+ type: 'string',
698
+ enum: ['json', 'csv', 'graphml', 'gexf', 'dot', 'markdown', 'mermaid'],
699
+ description: 'Export format',
700
+ },
701
+ filter: {
702
+ type: 'object',
703
+ properties: {
704
+ startDate: { type: 'string' },
705
+ endDate: { type: 'string' },
706
+ entityType: { type: 'string' },
707
+ tags: { type: 'array', items: { type: 'string' } },
708
+ },
709
+ description: 'Optional filter',
710
+ },
711
+ },
712
+ required: ['format'],
713
+ additionalProperties: false,
714
+ },
715
+ },
716
+ ];
717
+ /**
718
+ * Get tool definitions by category.
719
+ */
720
+ export const toolCategories = {
721
+ entity: ['create_entities', 'delete_entities', 'read_graph', 'open_nodes'],
722
+ relation: ['create_relations', 'delete_relations'],
723
+ observation: ['add_observations', 'delete_observations'],
724
+ search: ['search_nodes', 'search_by_date_range', 'search_nodes_ranked', 'boolean_search', 'fuzzy_search', 'get_search_suggestions'],
725
+ savedSearch: ['save_search', 'execute_saved_search', 'list_saved_searches', 'delete_saved_search', 'update_saved_search'],
726
+ tag: ['add_tags', 'remove_tags', 'set_importance', 'add_tags_to_multiple_entities', 'replace_tag', 'merge_tags'],
727
+ tagAlias: ['add_tag_alias', 'list_tag_aliases', 'remove_tag_alias', 'get_aliases_for_tag', 'resolve_tag'],
728
+ hierarchy: ['set_entity_parent', 'get_children', 'get_parent', 'get_ancestors', 'get_descendants', 'get_subtree', 'get_root_entities', 'get_entity_depth', 'move_entity'],
729
+ analytics: ['get_graph_stats', 'validate_graph'],
730
+ compression: ['find_duplicates', 'merge_entities', 'compress_graph', 'archive_entities'],
731
+ importExport: ['import_graph', 'export_graph'],
732
+ };