@utaba/ucm-mcp-server 6.5.0 → 6.6.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.
Files changed (198) hide show
  1. package/dist/clients/UcmLocalApiClient.d.ts +175 -2
  2. package/dist/clients/UcmLocalApiClient.js +203 -3
  3. package/dist/index.js +1 -1
  4. package/dist/mcp-server/clients/UcmLocalApiClient.d.ts +399 -0
  5. package/dist/mcp-server/clients/UcmLocalApiClient.js +719 -0
  6. package/dist/mcp-server/index.d.ts +3 -0
  7. package/dist/mcp-server/index.js +68 -0
  8. package/dist/mcp-server/interfaces/ILogger.d.ts +8 -0
  9. package/dist/mcp-server/interfaces/ILogger.js +4 -0
  10. package/dist/mcp-server/interfaces/IMcpTool.d.ts +7 -0
  11. package/dist/mcp-server/interfaces/IMcpTool.js +3 -0
  12. package/dist/mcp-server/logging/ConsoleLogger.d.ts +16 -0
  13. package/dist/mcp-server/logging/ConsoleLogger.js +45 -0
  14. package/dist/mcp-server/logging/LoggerFactory.d.ts +9 -0
  15. package/dist/mcp-server/logging/LoggerFactory.js +12 -0
  16. package/dist/mcp-server/server/McpConfig.d.ts +26 -0
  17. package/dist/mcp-server/server/McpConfig.js +90 -0
  18. package/dist/mcp-server/server/McpHandler.d.ts +12 -0
  19. package/dist/mcp-server/server/McpHandler.js +84 -0
  20. package/dist/mcp-server/server/McpServer.d.ts +15 -0
  21. package/dist/mcp-server/server/McpServer.js +49 -0
  22. package/dist/mcp-server/server/ToolRegistry.d.ts +23 -0
  23. package/dist/mcp-server/server/ToolRegistry.js +169 -0
  24. package/dist/mcp-server/tools/authorization/ListAuthorizationsTool.d.ts +21 -0
  25. package/dist/mcp-server/tools/authorization/ListAuthorizationsTool.js +146 -0
  26. package/dist/mcp-server/tools/authorization/SignOutTool.d.ts +23 -0
  27. package/dist/mcp-server/tools/authorization/SignOutTool.js +128 -0
  28. package/dist/mcp-server/tools/base/BaseToolController.d.ts +19 -0
  29. package/dist/mcp-server/tools/base/BaseToolController.js +58 -0
  30. package/dist/mcp-server/tools/connections/AccessConnectionTool.d.ts +21 -0
  31. package/dist/mcp-server/tools/connections/AccessConnectionTool.js +107 -0
  32. package/dist/mcp-server/tools/connections/CallRemoteToolTool.d.ts +22 -0
  33. package/dist/mcp-server/tools/connections/CallRemoteToolTool.js +124 -0
  34. package/dist/mcp-server/tools/core/DeleteArtifactTool.d.ts +11 -0
  35. package/dist/mcp-server/tools/core/DeleteArtifactTool.js +83 -0
  36. package/dist/mcp-server/tools/core/EditArtifactMetadataTool.d.ts +12 -0
  37. package/dist/mcp-server/tools/core/EditArtifactMetadataTool.js +173 -0
  38. package/dist/mcp-server/tools/core/GetArtifactTool.d.ts +13 -0
  39. package/dist/mcp-server/tools/core/GetArtifactTool.js +124 -0
  40. package/dist/mcp-server/tools/core/GetArtifactVersionsTool.d.ts +11 -0
  41. package/dist/mcp-server/tools/core/GetArtifactVersionsTool.js +63 -0
  42. package/dist/mcp-server/tools/core/GetChunkTool.d.ts +11 -0
  43. package/dist/mcp-server/tools/core/GetChunkTool.js +56 -0
  44. package/dist/mcp-server/tools/core/ListArtifactsTool.d.ts +11 -0
  45. package/dist/mcp-server/tools/core/ListArtifactsTool.js +84 -0
  46. package/dist/mcp-server/tools/core/MoveArtifactTool.d.ts +12 -0
  47. package/dist/mcp-server/tools/core/MoveArtifactTool.js +104 -0
  48. package/dist/mcp-server/tools/core/PublishArtifactFromFileTool.d.ts +15 -0
  49. package/dist/mcp-server/tools/core/PublishArtifactFromFileTool.js +277 -0
  50. package/dist/mcp-server/tools/core/PublishArtifactTool.d.ts +13 -0
  51. package/dist/mcp-server/tools/core/PublishArtifactTool.js +218 -0
  52. package/dist/mcp-server/tools/core/SearchArtifactsTool.d.ts +11 -0
  53. package/dist/mcp-server/tools/core/SearchArtifactsTool.js +137 -0
  54. package/dist/mcp-server/tools/list/ListNamespaceController.d.ts +1 -0
  55. package/dist/mcp-server/tools/list/ListNamespaceController.js +8 -0
  56. package/dist/mcp-server/tools/memory-graph/GraphCreateEntitiesTool.d.ts +14 -0
  57. package/dist/mcp-server/tools/memory-graph/GraphCreateEntitiesTool.js +58 -0
  58. package/dist/mcp-server/tools/memory-graph/GraphCreateRelationshipsTool.d.ts +14 -0
  59. package/dist/mcp-server/tools/memory-graph/GraphCreateRelationshipsTool.js +57 -0
  60. package/dist/mcp-server/tools/memory-graph/GraphCreateTool.d.ts +14 -0
  61. package/dist/mcp-server/tools/memory-graph/GraphCreateTool.js +64 -0
  62. package/dist/mcp-server/tools/memory-graph/GraphDeleteEntitiesTool.d.ts +14 -0
  63. package/dist/mcp-server/tools/memory-graph/GraphDeleteEntitiesTool.js +45 -0
  64. package/dist/mcp-server/tools/memory-graph/GraphDeleteRelationshipsTool.d.ts +14 -0
  65. package/dist/mcp-server/tools/memory-graph/GraphDeleteRelationshipsTool.js +45 -0
  66. package/dist/mcp-server/tools/memory-graph/GraphExploreTool.d.ts +14 -0
  67. package/dist/mcp-server/tools/memory-graph/GraphExploreTool.js +73 -0
  68. package/dist/mcp-server/tools/memory-graph/GraphFindEntitiesTool.d.ts +14 -0
  69. package/dist/mcp-server/tools/memory-graph/GraphFindEntitiesTool.js +68 -0
  70. package/dist/mcp-server/tools/memory-graph/GraphFindPathsTool.d.ts +14 -0
  71. package/dist/mcp-server/tools/memory-graph/GraphFindPathsTool.js +62 -0
  72. package/dist/mcp-server/tools/memory-graph/GraphGetEntityTool.d.ts +14 -0
  73. package/dist/mcp-server/tools/memory-graph/GraphGetEntityTool.js +49 -0
  74. package/dist/mcp-server/tools/memory-graph/GraphGetRelationshipsTool.d.ts +14 -0
  75. package/dist/mcp-server/tools/memory-graph/GraphGetRelationshipsTool.js +62 -0
  76. package/dist/mcp-server/tools/memory-graph/GraphListTemplatesTool.d.ts +14 -0
  77. package/dist/mcp-server/tools/memory-graph/GraphListTemplatesTool.js +34 -0
  78. package/dist/mcp-server/tools/memory-graph/GraphListTool.d.ts +14 -0
  79. package/dist/mcp-server/tools/memory-graph/GraphListTool.js +45 -0
  80. package/dist/mcp-server/tools/memory-graph/GraphOpenTool.d.ts +15 -0
  81. package/dist/mcp-server/tools/memory-graph/GraphOpenTool.js +50 -0
  82. package/dist/mcp-server/tools/memory-graph/GraphProposeVocabularyTool.d.ts +14 -0
  83. package/dist/mcp-server/tools/memory-graph/GraphProposeVocabularyTool.js +108 -0
  84. package/dist/mcp-server/tools/memory-graph/GraphSearchTool.d.ts +14 -0
  85. package/dist/mcp-server/tools/memory-graph/GraphSearchTool.js +94 -0
  86. package/dist/mcp-server/tools/memory-graph/GraphTraverseTool.d.ts +14 -0
  87. package/dist/mcp-server/tools/memory-graph/GraphTraverseTool.js +114 -0
  88. package/dist/mcp-server/tools/memory-graph/GraphUpdateEntitiesTool.d.ts +14 -0
  89. package/dist/mcp-server/tools/memory-graph/GraphUpdateEntitiesTool.js +58 -0
  90. package/dist/mcp-server/tools/memory-graph/KnowledgeSetListTool.d.ts +14 -0
  91. package/dist/mcp-server/tools/memory-graph/KnowledgeSetListTool.js +25 -0
  92. package/dist/mcp-server/tools/memory-graph/KnowledgeSetOpenTool.d.ts +14 -0
  93. package/dist/mcp-server/tools/memory-graph/KnowledgeSetOpenTool.js +31 -0
  94. package/dist/mcp-server/tools/repository/CreateRepositoryTool.d.ts +12 -0
  95. package/dist/mcp-server/tools/repository/CreateRepositoryTool.js +116 -0
  96. package/dist/mcp-server/tools/repository/GetRepositoryTool.d.ts +12 -0
  97. package/dist/mcp-server/tools/repository/GetRepositoryTool.js +85 -0
  98. package/dist/mcp-server/tools/repository/UpdateRepositoryTool.d.ts +12 -0
  99. package/dist/mcp-server/tools/repository/UpdateRepositoryTool.js +115 -0
  100. package/dist/mcp-server/tools/sharepoint/SharePointListConnectionsTool.d.ts +19 -0
  101. package/dist/mcp-server/tools/sharepoint/SharePointListConnectionsTool.js +90 -0
  102. package/dist/mcp-server/tools/sharepoint/SharePointListFoldersTool.d.ts +21 -0
  103. package/dist/mcp-server/tools/sharepoint/SharePointListFoldersTool.js +133 -0
  104. package/dist/mcp-server/tools/sharepoint/SharePointReadFileTool.d.ts +22 -0
  105. package/dist/mcp-server/tools/sharepoint/SharePointReadFileTool.js +146 -0
  106. package/dist/mcp-server/tools/sharepoint/SharePointReadRelatedFileTool.d.ts +18 -0
  107. package/dist/mcp-server/tools/sharepoint/SharePointReadRelatedFileTool.js +108 -0
  108. package/dist/mcp-server/tools/sharepoint/SharePointSearchTool.d.ts +22 -0
  109. package/dist/mcp-server/tools/sharepoint/SharePointSearchTool.js +125 -0
  110. package/dist/mcp-server/tools/utility/AuthorIndexTool.d.ts +11 -0
  111. package/dist/mcp-server/tools/utility/AuthorIndexTool.js +49 -0
  112. package/dist/mcp-server/tools/utility/AuthorRecentsTool.d.ts +11 -0
  113. package/dist/mcp-server/tools/utility/AuthorRecentsTool.js +49 -0
  114. package/dist/mcp-server/tools/utility/ListRepositoriesTool.d.ts +11 -0
  115. package/dist/mcp-server/tools/utility/ListRepositoriesTool.js +68 -0
  116. package/dist/mcp-server/tools/utility/QuickstartTool.d.ts +11 -0
  117. package/dist/mcp-server/tools/utility/QuickstartTool.js +36 -0
  118. package/dist/mcp-server/types/UcmApiTypes.d.ts +40 -0
  119. package/dist/mcp-server/types/UcmApiTypes.js +4 -0
  120. package/dist/mcp-server/utils/McpErrorHandler.d.ts +25 -0
  121. package/dist/mcp-server/utils/McpErrorHandler.js +67 -0
  122. package/dist/mcp-server/utils/PathUtils.d.ts +61 -0
  123. package/dist/mcp-server/utils/PathUtils.js +178 -0
  124. package/dist/mcp-server/utils/ResponseChunker.d.ts +25 -0
  125. package/dist/mcp-server/utils/ResponseChunker.js +79 -0
  126. package/dist/mcp-server/utils/SharePointErrorHandler.d.ts +34 -0
  127. package/dist/mcp-server/utils/SharePointErrorHandler.js +55 -0
  128. package/dist/schemas/memory-graph-tool-schemas.d.ts +789 -0
  129. package/dist/schemas/memory-graph-tool-schemas.js +181 -0
  130. package/dist/server/ToolRegistry.js +42 -8
  131. package/dist/tools/authorization/ListAuthorizationsTool.js +2 -2
  132. package/dist/tools/authorization/SignOutTool.js +2 -2
  133. package/dist/tools/connections/AccessConnectionTool.js +8 -6
  134. package/dist/tools/connections/CallRemoteToolTool.js +4 -4
  135. package/dist/tools/core/DeleteArtifactTool.js +5 -4
  136. package/dist/tools/core/EditArtifactMetadataTool.js +1 -1
  137. package/dist/tools/core/GetArtifactTool.js +1 -1
  138. package/dist/tools/core/GetArtifactVersionsTool.js +1 -1
  139. package/dist/tools/core/GetChunkTool.js +1 -1
  140. package/dist/tools/core/ListArtifactsTool.js +1 -1
  141. package/dist/tools/core/MoveArtifactTool.js +1 -1
  142. package/dist/tools/core/PublishArtifactFromFileTool.js +1 -1
  143. package/dist/tools/core/PublishArtifactTool.js +2 -2
  144. package/dist/tools/core/SearchArtifactsTool.js +7 -6
  145. package/dist/tools/memory-graph/GraphCreateEntitiesTool.d.ts +11 -0
  146. package/dist/tools/memory-graph/GraphCreateEntitiesTool.js +56 -0
  147. package/dist/tools/memory-graph/GraphCreateRelationshipsTool.d.ts +11 -0
  148. package/dist/tools/memory-graph/GraphCreateRelationshipsTool.js +55 -0
  149. package/dist/tools/memory-graph/GraphCreateTool.d.ts +11 -0
  150. package/dist/tools/memory-graph/GraphCreateTool.js +62 -0
  151. package/dist/tools/memory-graph/GraphDeleteEntitiesTool.d.ts +11 -0
  152. package/dist/tools/memory-graph/GraphDeleteEntitiesTool.js +43 -0
  153. package/dist/tools/memory-graph/GraphDeleteRelationshipsTool.d.ts +11 -0
  154. package/dist/tools/memory-graph/GraphDeleteRelationshipsTool.js +43 -0
  155. package/dist/tools/memory-graph/GraphExploreTool.d.ts +11 -0
  156. package/dist/tools/memory-graph/GraphExploreTool.js +71 -0
  157. package/dist/tools/memory-graph/GraphFindEntitiesTool.d.ts +11 -0
  158. package/dist/tools/memory-graph/GraphFindEntitiesTool.js +66 -0
  159. package/dist/tools/memory-graph/GraphFindPathsTool.d.ts +11 -0
  160. package/dist/tools/memory-graph/GraphFindPathsTool.js +60 -0
  161. package/dist/tools/memory-graph/GraphGetEntityTool.d.ts +11 -0
  162. package/dist/tools/memory-graph/GraphGetEntityTool.js +47 -0
  163. package/dist/tools/memory-graph/GraphGetRelationshipsTool.d.ts +11 -0
  164. package/dist/tools/memory-graph/GraphGetRelationshipsTool.js +60 -0
  165. package/dist/tools/memory-graph/GraphGetStatsTool.d.ts +11 -0
  166. package/dist/tools/memory-graph/GraphGetStatsTool.js +42 -0
  167. package/dist/tools/memory-graph/GraphListTemplatesTool.d.ts +11 -0
  168. package/dist/tools/memory-graph/GraphListTemplatesTool.js +32 -0
  169. package/dist/tools/memory-graph/GraphListTool.d.ts +11 -0
  170. package/dist/tools/memory-graph/GraphListTool.js +43 -0
  171. package/dist/tools/memory-graph/GraphOpenTool.d.ts +12 -0
  172. package/dist/tools/memory-graph/GraphOpenTool.js +48 -0
  173. package/dist/tools/memory-graph/GraphProposeVocabularyTool.d.ts +11 -0
  174. package/dist/tools/memory-graph/GraphProposeVocabularyTool.js +104 -0
  175. package/dist/tools/memory-graph/GraphRemoveRelationshipsTool.d.ts +11 -0
  176. package/dist/tools/memory-graph/GraphRemoveRelationshipsTool.js +47 -0
  177. package/dist/tools/memory-graph/GraphSearchTool.d.ts +11 -0
  178. package/dist/tools/memory-graph/GraphSearchTool.js +92 -0
  179. package/dist/tools/memory-graph/GraphTraverseTool.d.ts +11 -0
  180. package/dist/tools/memory-graph/GraphTraverseTool.js +112 -0
  181. package/dist/tools/memory-graph/GraphUpdateEntitiesTool.d.ts +11 -0
  182. package/dist/tools/memory-graph/GraphUpdateEntitiesTool.js +56 -0
  183. package/dist/tools/memory-graph/KnowledgeSetListTool.d.ts +11 -0
  184. package/dist/tools/memory-graph/KnowledgeSetListTool.js +23 -0
  185. package/dist/tools/memory-graph/KnowledgeSetOpenTool.d.ts +11 -0
  186. package/dist/tools/memory-graph/KnowledgeSetOpenTool.js +29 -0
  187. package/dist/tools/repository/CreateRepositoryTool.js +10 -9
  188. package/dist/tools/repository/GetRepositoryTool.js +15 -15
  189. package/dist/tools/repository/UpdateRepositoryTool.js +10 -9
  190. package/dist/tools/sharepoint/SharePointListConnectionsTool.js +1 -1
  191. package/dist/tools/sharepoint/SharePointListFoldersTool.js +1 -1
  192. package/dist/tools/utility/AuthorIndexTool.js +6 -5
  193. package/dist/tools/utility/AuthorRecentsTool.js +6 -5
  194. package/dist/tools/utility/HealthCheckController.js +1 -1
  195. package/dist/tools/utility/ListRepositoriesTool.js +5 -4
  196. package/dist/utils/McpErrorHandler.js +1 -1
  197. package/package.json +1 -1
  198. package/package.json.backup +1 -1
@@ -0,0 +1,114 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { McpError, McpErrorCode } from '../../utils/McpErrorHandler.js';
3
+ import { GraphTraverseSchema } from '@/schemas/memory-graph-tool-schemas.js';
4
+ export class GraphTraverseTool extends BaseToolController {
5
+ constructor(ucmClient, logger, publishingAuthorId) {
6
+ super(ucmClient, logger, publishingAuthorId);
7
+ }
8
+ get name() { return 'ucm_graph_traverse'; }
9
+ get description() {
10
+ return 'Execute a structured graph traversal using a JSON spec. Supports start point selection, ordered hop steps with relationship/entity type filters, property filters, repeat loops, and multiple return modes (terminal, all, paths). The most powerful query tool for complex graph navigation.';
11
+ }
12
+ get schema() { return GraphTraverseSchema; }
13
+ get inputSchema() {
14
+ return {
15
+ type: 'object',
16
+ properties: {
17
+ memoryGraphId: {
18
+ type: 'string',
19
+ description: 'The Memory Graph ID'
20
+ },
21
+ start: {
22
+ type: 'object',
23
+ description: 'Start point specification',
24
+ properties: {
25
+ entityId: { type: 'string', description: 'Start from a specific entity ID or slug' },
26
+ entityType: { type: 'string', description: 'Start from all entities of this type' },
27
+ filter: {
28
+ type: 'array',
29
+ items: {
30
+ type: 'object',
31
+ properties: {
32
+ key: { type: 'string' },
33
+ operator: { type: 'string', description: 'eq, neq, gt, gte, lt, lte, contains, isNull, isNotNull' },
34
+ value: {}
35
+ },
36
+ required: ['key', 'operator']
37
+ },
38
+ description: 'Property filters on start entities'
39
+ }
40
+ }
41
+ },
42
+ steps: {
43
+ type: 'array',
44
+ description: 'Ordered traversal steps (hops)',
45
+ items: {
46
+ type: 'object',
47
+ properties: {
48
+ direction: { type: 'string', enum: ['out', 'in', 'both'], description: 'Hop direction' },
49
+ relationshipTypes: { type: 'array', items: { type: 'string' }, description: 'Filter by relationship types' },
50
+ entityTypes: { type: 'array', items: { type: 'string' }, description: 'Filter by entity types at this step' },
51
+ entityFilter: {
52
+ type: 'array',
53
+ items: {
54
+ type: 'object',
55
+ properties: {
56
+ key: { type: 'string' },
57
+ operator: { type: 'string' },
58
+ value: {}
59
+ },
60
+ required: ['key', 'operator']
61
+ },
62
+ description: 'Property filters on entities at this step'
63
+ },
64
+ repeat: {
65
+ type: 'object',
66
+ properties: {
67
+ maxDepth: { type: 'number', description: 'Maximum repeat depth' },
68
+ emitIntermediates: { type: 'boolean', description: 'Include intermediate results' }
69
+ },
70
+ description: 'Repeat this step up to maxDepth times'
71
+ }
72
+ }
73
+ }
74
+ },
75
+ returnMode: {
76
+ type: 'string',
77
+ enum: ['terminal', 'all', 'path'],
78
+ description: 'What to return: terminal (only final step entities), all (every visited entity), path (full traversal paths with relationships). Default: terminal'
79
+ },
80
+ limit: {
81
+ type: 'number',
82
+ description: 'Maximum results (default: 50, max: 200)'
83
+ },
84
+ detailLevel: {
85
+ type: 'string',
86
+ enum: ['brief', 'summary', 'full'],
87
+ description: 'Detail level for returned entities (default: summary)'
88
+ }
89
+ },
90
+ required: ['memoryGraphId', 'start', 'steps']
91
+ };
92
+ }
93
+ async handleExecute(params) {
94
+ const { memoryGraphId, start, steps, returnMode, limit, detailLevel } = params;
95
+ this.logger.info('GraphTraverseTool', `Traversing graph: ${memoryGraphId}`);
96
+ try {
97
+ const result = await this.ucmClient.graphTraverse(memoryGraphId, {
98
+ start,
99
+ steps,
100
+ returnMode,
101
+ limit,
102
+ detailLevel
103
+ });
104
+ return JSON.stringify(result);
105
+ }
106
+ catch (error) {
107
+ if (error.response?.status === 404) {
108
+ throw new McpError(McpErrorCode.InvalidParams, `Memory Graph not found`);
109
+ }
110
+ throw new McpError(McpErrorCode.InternalError, `Failed to traverse graph: ${error.message}`);
111
+ }
112
+ }
113
+ }
114
+ //# sourceMappingURL=GraphTraverseTool.js.map
@@ -0,0 +1,14 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
3
+ import { ILogger } from '../../interfaces/ILogger.js';
4
+ import { type GraphUpdateEntitiesParams } from '@/schemas/memory-graph-tool-schemas.js';
5
+ import { ZodSchema } from 'zod';
6
+ export declare class GraphUpdateEntitiesTool extends BaseToolController {
7
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
8
+ get name(): string;
9
+ get description(): string;
10
+ get schema(): ZodSchema;
11
+ get inputSchema(): Record<string, unknown>;
12
+ protected handleExecute(params: GraphUpdateEntitiesParams): Promise<string>;
13
+ }
14
+ //# sourceMappingURL=GraphUpdateEntitiesTool.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { McpError, McpErrorCode } from '../../utils/McpErrorHandler.js';
3
+ import { GraphUpdateEntitiesSchema } from '@/schemas/memory-graph-tool-schemas.js';
4
+ export class GraphUpdateEntitiesTool extends BaseToolController {
5
+ constructor(ucmClient, logger, publishingAuthorId) {
6
+ super(ucmClient, logger, publishingAuthorId);
7
+ }
8
+ get name() { return 'ucm_graph_update_entities'; }
9
+ get description() {
10
+ return 'Update one or more entities in a Memory Graph. Each update specifies an entityId and the fields to change (label, summary, properties, data). Pass a single item in the array for single operations.';
11
+ }
12
+ get schema() { return GraphUpdateEntitiesSchema; }
13
+ get inputSchema() {
14
+ return {
15
+ type: 'object',
16
+ properties: {
17
+ memoryGraphId: {
18
+ type: 'string',
19
+ description: 'The Memory Graph ID'
20
+ },
21
+ updates: {
22
+ type: 'array',
23
+ description: 'Array of entity updates',
24
+ items: {
25
+ type: 'object',
26
+ properties: {
27
+ entityId: { type: 'string', description: 'The entity ID to update' },
28
+ label: { type: 'string', description: 'New label' },
29
+ summary: { type: 'string', description: 'New summary' },
30
+ properties: { type: 'object', description: 'Properties to update (merged with existing)' },
31
+ data: { type: 'object', description: 'Data to update (merged with existing)' }
32
+ },
33
+ required: ['entityId']
34
+ }
35
+ }
36
+ },
37
+ required: ['memoryGraphId', 'updates']
38
+ };
39
+ }
40
+ async handleExecute(params) {
41
+ const { memoryGraphId, updates } = params;
42
+ this.logger.info('GraphUpdateEntitiesTool', `Updating ${updates.length} entities in graph: ${memoryGraphId}`);
43
+ try {
44
+ const result = await this.ucmClient.graphUpdateEntities(memoryGraphId, updates);
45
+ return JSON.stringify(result);
46
+ }
47
+ catch (error) {
48
+ if (error.response?.status === 400) {
49
+ throw new McpError(McpErrorCode.InvalidParams, error.response.data?.message || 'Validation error');
50
+ }
51
+ if (error.response?.status === 404) {
52
+ throw new McpError(McpErrorCode.InvalidParams, `Entity or Memory Graph not found`);
53
+ }
54
+ throw new McpError(McpErrorCode.InternalError, `Failed to update entities: ${error.message}`);
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=GraphUpdateEntitiesTool.js.map
@@ -0,0 +1,14 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
3
+ import { ILogger } from '../../interfaces/ILogger.js';
4
+ import { type KnowledgeSetListParams } from '@/schemas/memory-graph-tool-schemas.js';
5
+ import { ZodSchema } from 'zod';
6
+ export declare class KnowledgeSetListTool extends BaseToolController {
7
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
8
+ get name(): string;
9
+ get description(): string;
10
+ get schema(): ZodSchema;
11
+ get inputSchema(): Record<string, unknown>;
12
+ protected handleExecute(_params: KnowledgeSetListParams): Promise<string>;
13
+ }
14
+ //# sourceMappingURL=KnowledgeSetListTool.d.ts.map
@@ -0,0 +1,25 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { KnowledgeSetListSchema } from '@/schemas/memory-graph-tool-schemas.js';
3
+ export class KnowledgeSetListTool extends BaseToolController {
4
+ constructor(ucmClient, logger, publishingAuthorId) {
5
+ super(ucmClient, logger, publishingAuthorId);
6
+ }
7
+ get name() { return 'ucm_knowledge_set_list'; }
8
+ get description() {
9
+ return 'List Knowledge Sets you have access to. Use `ucm_knowledge_set_open` with a Knowledge Set ID to explore its contents.';
10
+ }
11
+ get schema() { return KnowledgeSetListSchema; }
12
+ get inputSchema() {
13
+ return {
14
+ type: 'object',
15
+ properties: {},
16
+ required: []
17
+ };
18
+ }
19
+ async handleExecute(_params) {
20
+ this.logger.info('KnowledgeSetListTool', 'Listing knowledge sets');
21
+ const result = await this.ucmClient.listKnowledgeSetSummary();
22
+ return result;
23
+ }
24
+ }
25
+ //# sourceMappingURL=KnowledgeSetListTool.js.map
@@ -0,0 +1,14 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
3
+ import { ILogger } from '../../interfaces/ILogger.js';
4
+ import { type KnowledgeSetOpenParams } from '@/schemas/memory-graph-tool-schemas.js';
5
+ import { ZodSchema } from 'zod';
6
+ export declare class KnowledgeSetOpenTool extends BaseToolController {
7
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
8
+ get name(): string;
9
+ get description(): string;
10
+ get schema(): ZodSchema;
11
+ get inputSchema(): Record<string, unknown>;
12
+ protected handleExecute(_params: KnowledgeSetOpenParams): Promise<string>;
13
+ }
14
+ //# sourceMappingURL=KnowledgeSetOpenTool.d.ts.map
@@ -0,0 +1,31 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { KnowledgeSetOpenSchema } from '@/schemas/memory-graph-tool-schemas.js';
3
+ export class KnowledgeSetOpenTool extends BaseToolController {
4
+ constructor(ucmClient, logger, publishingAuthorId) {
5
+ super(ucmClient, logger, publishingAuthorId);
6
+ }
7
+ get name() { return 'ucm_knowledge_set_open'; }
8
+ get description() {
9
+ return 'Open a Knowledge Set to see its contents — Memory Graphs, artifact repositories, and artifact namespaces — with guidance on which tools to use for each.';
10
+ }
11
+ get schema() { return KnowledgeSetOpenSchema; }
12
+ get inputSchema() {
13
+ return {
14
+ type: 'object',
15
+ properties: {
16
+ knowledgeSetId: {
17
+ type: 'string',
18
+ description: 'The Knowledge Set ID to open'
19
+ }
20
+ },
21
+ required: ['knowledgeSetId']
22
+ };
23
+ }
24
+ async handleExecute(_params) {
25
+ const { knowledgeSetId } = _params;
26
+ this.logger.info('KnowledgeSetOpenTool', `Opening knowledge set ${knowledgeSetId}`);
27
+ const result = await this.ucmClient.openKnowledgeSet(knowledgeSetId);
28
+ return result;
29
+ }
30
+ }
31
+ //# sourceMappingURL=KnowledgeSetOpenTool.js.map
@@ -0,0 +1,12 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
3
+ import { ILogger } from '../../interfaces/ILogger.js';
4
+ export declare class CreateRepositoryTool extends BaseToolController {
5
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
6
+ get name(): string;
7
+ get description(): string;
8
+ get inputSchema(): any;
9
+ protected validateParams(params: any): void;
10
+ protected handleExecute(params: any): Promise<any>;
11
+ }
12
+ //# sourceMappingURL=CreateRepositoryTool.d.ts.map
@@ -0,0 +1,116 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { McpError, McpErrorCode } from '../../utils/McpErrorHandler.js';
3
+ export class CreateRepositoryTool extends BaseToolController {
4
+ constructor(ucmClient, logger, publishingAuthorId) {
5
+ super(ucmClient, logger, publishingAuthorId);
6
+ }
7
+ get name() {
8
+ return 'ucm_repository_create';
9
+ }
10
+ get description() {
11
+ const authorInfo = this.publishingAuthorId ? ` Your default workspace id is '${this.publishingAuthorId}'.` : '';
12
+ return `Create a new repository for a specific workspace. Repository names must be unique within the workspace and follow UCM naming conventions. (3-200 characters, start with letter, alphanumeric and hyphens only, no consecutive hyphens).${authorInfo}`;
13
+ }
14
+ get inputSchema() {
15
+ return {
16
+ type: 'object',
17
+ properties: {
18
+ workspace: {
19
+ type: 'string',
20
+ description: this.publishingAuthorId ? `Workspace identifier: ${this.publishingAuthorId}` : 'Workspace identifier (e.g., "utaba", "1064600359")',
21
+ minLength: 1,
22
+ maxLength: 50
23
+ },
24
+ repositoryName: {
25
+ type: 'string',
26
+ description: 'Unique repository name (3-200 characters, start with letter, alphanumeric and hyphens only)',
27
+ minLength: 3,
28
+ maxLength: 200,
29
+ pattern: '^[a-z][a-z0-9-]{2,199}$'
30
+ },
31
+ displayName: {
32
+ type: 'string',
33
+ description: 'Human-readable display name for the repository (optional)',
34
+ maxLength: 255
35
+ },
36
+ description: {
37
+ type: 'string',
38
+ description: 'Repository description (optional)',
39
+ maxLength: 1000
40
+ }
41
+ },
42
+ required: ['workspace', 'repositoryName'],
43
+ additionalProperties: false
44
+ };
45
+ }
46
+ validateParams(params) {
47
+ super.validateParams(params);
48
+ // Additional validation
49
+ if (!params.workspace || typeof params.workspace !== 'string' || params.workspace.trim() === '') {
50
+ throw new McpError(McpErrorCode.InvalidParams, 'Author identifier is required and cannot be empty');
51
+ }
52
+ if (!params.repositoryName || typeof params.repositoryName !== 'string' || params.repositoryName.trim() === '') {
53
+ throw new McpError(McpErrorCode.InvalidParams, 'Repository name is required and cannot be empty');
54
+ }
55
+ // Validate repository name format
56
+ const namePattern = /^[a-z][a-z0-9-]{2,199}$/;
57
+ if (!namePattern.test(params.repositoryName)) {
58
+ throw new McpError(McpErrorCode.InvalidParams, 'Repository name must be 3-200 characters, start with a lowercase letter, and contain only lowercase letters, numbers, and hyphens (no consecutive hyphens)');
59
+ }
60
+ // Check for consecutive hyphens
61
+ if (params.repositoryName.includes('--')) {
62
+ throw new McpError(McpErrorCode.InvalidParams, 'Repository name cannot contain consecutive hyphens');
63
+ }
64
+ // Validate displayName length if provided
65
+ if (params.displayName && params.displayName.length > 255) {
66
+ throw new McpError(McpErrorCode.InvalidParams, 'Display name cannot exceed 255 characters');
67
+ }
68
+ // Validate description length if provided
69
+ if (params.description && params.description.length > 1000) {
70
+ throw new McpError(McpErrorCode.InvalidParams, 'Description cannot exceed 1,000 characters');
71
+ }
72
+ }
73
+ async handleExecute(params) {
74
+ const author = params.workspace;
75
+ this.logger.info('CreateRepositoryTool', `Creating repository ${params.repositoryName} for author ${author}`);
76
+ try {
77
+ const repositoryData = {
78
+ repositoryName: params.repositoryName,
79
+ displayName: params.displayName,
80
+ description: params.description
81
+ };
82
+ const result = await this.ucmClient.createRepository(author, repositoryData);
83
+ this.logger.info('CreateRepositoryTool', `Repository created successfully: ${params.repositoryName}`);
84
+ return {
85
+ content: [
86
+ {
87
+ type: 'text',
88
+ text: JSON.stringify({
89
+ success: true,
90
+ message: `Repository '${params.repositoryName}' created successfully for author '${author}'`,
91
+ repository: result,
92
+ webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/repository/${result.id || params.repositoryName}`
93
+ }, null, 2)
94
+ }
95
+ ]
96
+ };
97
+ }
98
+ catch (error) {
99
+ this.logger.error('CreateRepositoryTool', 'Failed to create repository', '', error);
100
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
101
+ // Handle specific error cases
102
+ if (errorMessage.includes('already exists') || errorMessage.includes('NAME_EXISTS')) {
103
+ throw new McpError(McpErrorCode.InvalidParams, `Repository name '${params.repositoryName}' already exists for author '${author}'. Please choose a different name.`);
104
+ }
105
+ if (errorMessage.includes('not found') || errorMessage.includes('404')) {
106
+ throw new McpError(McpErrorCode.InvalidParams, `Author '${author}' not found. Please verify the author identifier.`);
107
+ }
108
+ if (errorMessage.includes('validation') || errorMessage.includes('invalid')) {
109
+ throw new McpError(McpErrorCode.InvalidParams, `Repository creation failed due to validation error: ${errorMessage}`);
110
+ }
111
+ // Generic error
112
+ throw new McpError(McpErrorCode.InternalError, `Failed to create repository: ${errorMessage}`);
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=CreateRepositoryTool.js.map
@@ -0,0 +1,12 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
3
+ import { ILogger } from '../../interfaces/ILogger.js';
4
+ export declare class GetRepositoryTool extends BaseToolController {
5
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
6
+ get name(): string;
7
+ get description(): string;
8
+ get inputSchema(): any;
9
+ protected validateParams(params: any): void;
10
+ protected handleExecute(params: any): Promise<any>;
11
+ }
12
+ //# sourceMappingURL=GetRepositoryTool.d.ts.map
@@ -0,0 +1,85 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { McpError, McpErrorCode } from '../../utils/McpErrorHandler.js';
3
+ export class GetRepositoryTool extends BaseToolController {
4
+ constructor(ucmClient, logger, publishingAuthorId) {
5
+ super(ucmClient, logger, publishingAuthorId);
6
+ }
7
+ get name() {
8
+ return 'ucm_repository_get';
9
+ }
10
+ get description() {
11
+ return 'Get detailed information about a specific repository, including metadata, statistics, and available categories. Returns repository details along with its content structure.';
12
+ }
13
+ get inputSchema() {
14
+ return {
15
+ type: 'object',
16
+ properties: {
17
+ workspace: {
18
+ type: 'string',
19
+ description: this.publishingAuthorId ? `Workspace identifier: ${this.publishingAuthorId}` : 'Workspace identifier (e.g., "utaba", "1064600359")',
20
+ minLength: 1,
21
+ maxLength: 50
22
+ },
23
+ repository: {
24
+ type: 'string',
25
+ description: 'Repository name (e.g., "main", "project-alpha")',
26
+ minLength: 1,
27
+ maxLength: 200
28
+ }
29
+ },
30
+ required: ['workspace', 'repository'],
31
+ additionalProperties: false
32
+ };
33
+ }
34
+ validateParams(params) {
35
+ super.validateParams(params);
36
+ if (!params.workspace || typeof params.workspace !== 'string' || params.workspace.trim() === '') {
37
+ throw new McpError(McpErrorCode.InvalidParams, 'Author identifier is required and cannot be empty');
38
+ }
39
+ if (!params.repository || typeof params.repository !== 'string' || params.repository.trim() === '') {
40
+ throw new McpError(McpErrorCode.InvalidParams, 'Repository name is required and cannot be empty');
41
+ }
42
+ }
43
+ async handleExecute(params) {
44
+ const author = params.workspace;
45
+ this.logger.info('GetRepositoryTool', `Getting repository ${params.repository} for author ${author}`);
46
+ try {
47
+ const result = await this.ucmClient.getRepository(author, params.repository);
48
+ this.logger.info('GetRepositoryTool', `Repository retrieved successfully: ${params.repository}`);
49
+ // Enhance the response with additional helpful information
50
+ const enhancedResult = {
51
+ success: true,
52
+ message: `Repository '${params.repository}' retrieved successfully for author '${author}'`,
53
+ repository: result,
54
+ webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/browse/${author}/${params.repository}`,
55
+ apiEndpoints: {
56
+ browse: `/api/v1/authors/${author}/${params.repository}`,
57
+ artifacts: `/api/v1/authors/${author}/${params.repository}/{category}/{subcategory}`,
58
+ files: `/api/v1/files/${author}/${params.repository}/{category}/{subcategory}/{filename}`
59
+ }
60
+ };
61
+ return {
62
+ content: [
63
+ {
64
+ type: 'text',
65
+ text: JSON.stringify(enhancedResult, null, 2)
66
+ }
67
+ ]
68
+ };
69
+ }
70
+ catch (error) {
71
+ this.logger.error('GetRepositoryTool', 'Failed to get repository', '', error);
72
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
73
+ // Handle specific error cases
74
+ if (errorMessage.includes('not found') || errorMessage.includes('404')) {
75
+ throw new McpError(McpErrorCode.InvalidParams, `Repository '${params.repository}' not found for author '${author}'. Please verify the repository name and author identifier.`);
76
+ }
77
+ if (errorMessage.includes('403') || errorMessage.includes('Forbidden')) {
78
+ throw new McpError(McpErrorCode.InvalidParams, `Access denied to repository '${params.repository}' for author '${author}'. You may not have permission to view this repository.`);
79
+ }
80
+ // Generic error
81
+ throw new McpError(McpErrorCode.InternalError, `Failed to retrieve repository: ${errorMessage}`);
82
+ }
83
+ }
84
+ }
85
+ //# sourceMappingURL=GetRepositoryTool.js.map
@@ -0,0 +1,12 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
3
+ import { ILogger } from '../../interfaces/ILogger.js';
4
+ export declare class UpdateRepositoryTool extends BaseToolController {
5
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
6
+ get name(): string;
7
+ get description(): string;
8
+ get inputSchema(): any;
9
+ protected validateParams(params: any): void;
10
+ protected handleExecute(params: any): Promise<any>;
11
+ }
12
+ //# sourceMappingURL=UpdateRepositoryTool.d.ts.map
@@ -0,0 +1,115 @@
1
+ import { BaseToolController } from '../base/BaseToolController.js';
2
+ import { McpError, McpErrorCode } from '../../utils/McpErrorHandler.js';
3
+ export class UpdateRepositoryTool extends BaseToolController {
4
+ constructor(ucmClient, logger, publishingAuthorId) {
5
+ super(ucmClient, logger, publishingAuthorId);
6
+ }
7
+ get name() {
8
+ return 'ucm_repository_update';
9
+ }
10
+ get description() {
11
+ const authorInfo = this.publishingAuthorId ? ` Your default workspace id is '${this.publishingAuthorId}'.` : '';
12
+ return `Update repository metadata including display name and description.${authorInfo}`;
13
+ }
14
+ get inputSchema() {
15
+ return {
16
+ type: 'object',
17
+ properties: {
18
+ workspace: {
19
+ type: 'string',
20
+ description: this.publishingAuthorId ? `Workspace identifier: ${this.publishingAuthorId}` : 'Workspace identifier (e.g., "utaba", "1064600359")',
21
+ minLength: 1,
22
+ maxLength: 50
23
+ },
24
+ repository: {
25
+ type: 'string',
26
+ description: 'Repository to update (e.g., "main", "project-alpha") however the name will not change. Only the displayname can be updated after creation.',
27
+ minLength: 1,
28
+ maxLength: 200
29
+ },
30
+ displayName: {
31
+ type: 'string',
32
+ description: 'New human-readable display name for the repository (optional)',
33
+ maxLength: 255
34
+ },
35
+ description: {
36
+ type: 'string',
37
+ description: 'New repository description (optional)',
38
+ maxLength: 1000
39
+ }
40
+ },
41
+ required: ['workspace', 'repository'],
42
+ additionalProperties: false
43
+ };
44
+ }
45
+ validateParams(params) {
46
+ super.validateParams(params);
47
+ if (!params.workspace || typeof params.workspace !== 'string' || params.workspace.trim() === '') {
48
+ throw new McpError(McpErrorCode.InvalidParams, 'Author identifier is required and cannot be empty');
49
+ }
50
+ if (!params.repository || typeof params.repository !== 'string' || params.repository.trim() === '') {
51
+ throw new McpError(McpErrorCode.InvalidParams, 'Repository name is required and cannot be empty');
52
+ }
53
+ // Validate at least one field to update is provided
54
+ const updateFields = ['displayName', 'description'];
55
+ const hasUpdateField = updateFields.some(field => params[field] !== undefined);
56
+ if (!hasUpdateField) {
57
+ throw new McpError(McpErrorCode.InvalidParams, 'At least one field to update must be provided (displayName or description)');
58
+ }
59
+ // Validate displayName length if provided
60
+ if (params.displayName !== undefined && params.displayName.length > 255) {
61
+ throw new McpError(McpErrorCode.InvalidParams, 'Display name cannot exceed 255 characters');
62
+ }
63
+ // Validate description length if provided
64
+ if (params.description !== undefined && params.description.length > 1000) {
65
+ throw new McpError(McpErrorCode.InvalidParams, 'Description cannot exceed 1,000 characters');
66
+ }
67
+ }
68
+ async handleExecute(params) {
69
+ const author = params.workspace;
70
+ this.logger.info('UpdateRepositoryTool', `Updating repository ${params.repository} for author ${author}`);
71
+ try {
72
+ // Build update data from provided parameters
73
+ const updateData = {};
74
+ if (params.displayName !== undefined) {
75
+ updateData.displayName = params.displayName;
76
+ }
77
+ if (params.description !== undefined) {
78
+ updateData.description = params.description;
79
+ }
80
+ const result = await this.ucmClient.updateRepository(author, params.repository, updateData);
81
+ this.logger.info('UpdateRepositoryTool', `Repository updated successfully: ${params.repository}`);
82
+ return {
83
+ content: [
84
+ {
85
+ type: 'text',
86
+ text: JSON.stringify({
87
+ success: true,
88
+ message: `Repository '${params.repository}' updated successfully for author '${author}'`,
89
+ repository: result,
90
+ updatedFields: Object.keys(updateData),
91
+ webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/repository/${result.id || params.repository}/settings`
92
+ }, null, 2)
93
+ }
94
+ ]
95
+ };
96
+ }
97
+ catch (error) {
98
+ this.logger.error('UpdateRepositoryTool', 'Failed to update repository', '', error);
99
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
100
+ // Handle specific error cases
101
+ if (errorMessage.includes('not found') || errorMessage.includes('404')) {
102
+ throw new McpError(McpErrorCode.InvalidParams, `Repository '${params.repository}' not found for author '${author}'. Please verify the repository name and author identifier.`);
103
+ }
104
+ if (errorMessage.includes('403') || errorMessage.includes('Forbidden')) {
105
+ throw new McpError(McpErrorCode.InvalidParams, `Access denied to update repository '${params.repository}' for author '${author}'. You may not have permission to modify this repository.`);
106
+ }
107
+ if (errorMessage.includes('validation') || errorMessage.includes('invalid')) {
108
+ throw new McpError(McpErrorCode.InvalidParams, `Repository update failed due to validation error: ${errorMessage}`);
109
+ }
110
+ // Generic error
111
+ throw new McpError(McpErrorCode.InternalError, `Failed to update repository: ${errorMessage}`);
112
+ }
113
+ }
114
+ }
115
+ //# sourceMappingURL=UpdateRepositoryTool.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ListConnectionsTool
3
+ * List all external connections available to the user
4
+ */
5
+ import { BaseToolController } from '../base/BaseToolController.js';
6
+ import { UcmLocalApiClient } from '../../clients/UcmLocalApiClient.js';
7
+ import { ILogger } from '../../interfaces/ILogger.js';
8
+ export declare class ListConnectionsTool extends BaseToolController {
9
+ constructor(ucmClient: UcmLocalApiClient, logger: ILogger, publishingAuthorId?: string);
10
+ get name(): string;
11
+ get description(): string;
12
+ get inputSchema(): any;
13
+ protected validateParams(params: any): void;
14
+ protected handleExecute(params: {
15
+ limit?: number;
16
+ offset?: number;
17
+ }): Promise<any>;
18
+ }
19
+ //# sourceMappingURL=SharePointListConnectionsTool.d.ts.map