@utaba/ucm-mcp-server 6.5.1 → 6.7.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 (108) hide show
  1. package/dist/clients/UcmLocalApiClient.d.ts +221 -2
  2. package/dist/clients/UcmLocalApiClient.js +211 -3
  3. package/dist/index.js +1 -1
  4. package/dist/interfaces/IMcpTool.d.ts +2 -2
  5. package/dist/server/ToolRegistry.js +44 -8
  6. package/dist/tools/authorization/ListAuthorizationsTool.js +2 -2
  7. package/dist/tools/authorization/SignOutTool.js +2 -2
  8. package/dist/tools/base/BaseToolController.d.ts +7 -4
  9. package/dist/tools/base/BaseToolController.js +28 -11
  10. package/dist/tools/connections/AccessConnectionTool.js +2 -2
  11. package/dist/tools/connections/CallRemoteToolTool.js +3 -3
  12. package/dist/tools/core/DeleteArtifactTool.js +5 -4
  13. package/dist/tools/core/EditArtifactMetadataTool.js +1 -1
  14. package/dist/tools/core/GetArtifactTool.js +1 -1
  15. package/dist/tools/core/GetArtifactVersionsTool.js +1 -1
  16. package/dist/tools/core/GetChunkTool.js +1 -1
  17. package/dist/tools/core/ListArtifactsTool.js +1 -1
  18. package/dist/tools/core/MoveArtifactTool.d.ts +1 -1
  19. package/dist/tools/core/MoveArtifactTool.js +2 -2
  20. package/dist/tools/core/PublishArtifactFromFileTool.js +1 -1
  21. package/dist/tools/core/PublishArtifactTool.js +2 -2
  22. package/dist/tools/core/SearchArtifactsTool.js +7 -6
  23. package/dist/tools/memory-graph/GraphCreateEntitiesTool.d.ts +14 -0
  24. package/dist/tools/memory-graph/GraphCreateEntitiesTool.js +58 -0
  25. package/dist/tools/memory-graph/GraphCreateRelationshipsTool.d.ts +14 -0
  26. package/dist/tools/memory-graph/GraphCreateRelationshipsTool.js +57 -0
  27. package/dist/tools/memory-graph/GraphCreateTool.d.ts +14 -0
  28. package/dist/tools/memory-graph/GraphCreateTool.js +64 -0
  29. package/dist/tools/memory-graph/GraphDeleteEntitiesTool.d.ts +14 -0
  30. package/dist/tools/memory-graph/GraphDeleteEntitiesTool.js +45 -0
  31. package/dist/tools/memory-graph/GraphDeleteRelationshipsTool.d.ts +14 -0
  32. package/dist/tools/memory-graph/GraphDeleteRelationshipsTool.js +45 -0
  33. package/dist/tools/memory-graph/GraphExploreTool.d.ts +14 -0
  34. package/dist/tools/memory-graph/GraphExploreTool.js +73 -0
  35. package/dist/tools/memory-graph/GraphFindEntitiesTool.d.ts +14 -0
  36. package/dist/tools/memory-graph/GraphFindEntitiesTool.js +68 -0
  37. package/dist/tools/memory-graph/GraphFindPathsTool.d.ts +14 -0
  38. package/dist/tools/memory-graph/GraphFindPathsTool.js +62 -0
  39. package/dist/tools/memory-graph/GraphGetEntityTool.d.ts +14 -0
  40. package/dist/tools/memory-graph/GraphGetEntityTool.js +49 -0
  41. package/dist/tools/memory-graph/GraphGetRelationshipsTool.d.ts +14 -0
  42. package/dist/tools/memory-graph/GraphGetRelationshipsTool.js +62 -0
  43. package/dist/tools/memory-graph/GraphListTemplatesTool.d.ts +14 -0
  44. package/dist/tools/memory-graph/GraphListTemplatesTool.js +34 -0
  45. package/dist/tools/memory-graph/GraphListTool.d.ts +14 -0
  46. package/dist/tools/memory-graph/GraphListTool.js +45 -0
  47. package/dist/tools/memory-graph/GraphOpenTool.d.ts +15 -0
  48. package/dist/tools/memory-graph/GraphOpenTool.js +50 -0
  49. package/dist/tools/memory-graph/GraphProposeVocabularyTool.d.ts +14 -0
  50. package/dist/tools/memory-graph/GraphProposeVocabularyTool.js +149 -0
  51. package/dist/tools/memory-graph/GraphSearchTool.d.ts +14 -0
  52. package/dist/tools/memory-graph/GraphSearchTool.js +94 -0
  53. package/dist/tools/memory-graph/GraphTraverseTool.d.ts +14 -0
  54. package/dist/tools/memory-graph/GraphTraverseTool.js +114 -0
  55. package/dist/tools/memory-graph/GraphUpdateEntitiesTool.d.ts +14 -0
  56. package/dist/tools/memory-graph/GraphUpdateEntitiesTool.js +58 -0
  57. package/dist/tools/memory-graph/GraphUpdateTool.d.ts +14 -0
  58. package/dist/tools/memory-graph/GraphUpdateTool.js +59 -0
  59. package/dist/tools/memory-graph/KnowledgeSetListTool.d.ts +14 -0
  60. package/dist/tools/memory-graph/KnowledgeSetListTool.js +25 -0
  61. package/dist/tools/memory-graph/KnowledgeSetOpenTool.d.ts +14 -0
  62. package/dist/tools/memory-graph/KnowledgeSetOpenTool.js +31 -0
  63. package/dist/tools/repository/CreateRepositoryTool.js +10 -9
  64. package/dist/tools/repository/GetRepositoryTool.js +15 -15
  65. package/dist/tools/repository/UpdateRepositoryTool.js +10 -9
  66. package/dist/tools/sharepoint/SharePointListConnectionsTool.js +1 -1
  67. package/dist/tools/sharepoint/SharePointListFoldersTool.js +1 -1
  68. package/dist/tools/utility/AuthorIndexTool.js +6 -5
  69. package/dist/tools/utility/AuthorRecentsTool.js +6 -5
  70. package/dist/tools/utility/ListRepositoriesTool.js +5 -4
  71. package/dist/utils/McpErrorHandler.js +1 -1
  72. package/package.json +1 -1
  73. package/package.json.backup +1 -1
  74. package/dist/clients/UcmApiClient.d.ts +0 -157
  75. package/dist/clients/UcmApiClient.js +0 -443
  76. package/dist/publish/package.json +0 -37
  77. package/dist/tools/artifacts/GetArtifactController.d.ts +0 -34
  78. package/dist/tools/artifacts/GetArtifactController.js +0 -397
  79. package/dist/tools/artifacts/GetLatestController.d.ts +0 -39
  80. package/dist/tools/artifacts/GetLatestController.js +0 -469
  81. package/dist/tools/artifacts/ListVersionsController.d.ts +0 -43
  82. package/dist/tools/artifacts/ListVersionsController.js +0 -530
  83. package/dist/tools/artifacts/PublishArtifactController.d.ts +0 -37
  84. package/dist/tools/artifacts/PublishArtifactController.js +0 -605
  85. package/dist/tools/discovery/BrowseCategoriesController.d.ts +0 -25
  86. package/dist/tools/discovery/BrowseCategoriesController.js +0 -400
  87. package/dist/tools/discovery/FindByPurposeController.d.ts +0 -12
  88. package/dist/tools/discovery/FindByPurposeController.js +0 -131
  89. package/dist/tools/discovery/ListAuthorsController.d.ts +0 -20
  90. package/dist/tools/discovery/ListAuthorsController.js +0 -274
  91. package/dist/tools/discovery/SearchArtifactsController.d.ts +0 -14
  92. package/dist/tools/discovery/SearchArtifactsController.js +0 -226
  93. package/dist/tools/navigation/ExploreNamespaceController.d.ts +0 -35
  94. package/dist/tools/navigation/ExploreNamespaceController.js +0 -548
  95. package/dist/tools/repository/DeleteRepositoryGuidanceTool.d.ts +0 -13
  96. package/dist/tools/repository/DeleteRepositoryGuidanceTool.js +0 -93
  97. package/dist/tools/sharepoint/SharePointSignOutTool.d.ts +0 -22
  98. package/dist/tools/sharepoint/SharePointSignOutTool.js +0 -114
  99. package/dist/tools/utility/HealthCheckController.d.ts +0 -11
  100. package/dist/tools/utility/HealthCheckController.js +0 -60
  101. package/dist/tools/utility/SubmitFeedbackTool.d.ts +0 -16
  102. package/dist/tools/utility/SubmitFeedbackTool.js +0 -68
  103. package/dist/tools/utility/ValidatePathController.d.ts +0 -30
  104. package/dist/tools/utility/ValidatePathController.js +0 -465
  105. package/dist/utils/HttpsAgentFactory.d.ts +0 -21
  106. package/dist/utils/HttpsAgentFactory.js +0 -50
  107. package/dist/utils/ValidationUtils.d.ts +0 -10
  108. package/dist/utils/ValidationUtils.js +0 -50
@@ -5,7 +5,7 @@ export class CreateRepositoryTool extends BaseToolController {
5
5
  super(ucmClient, logger, publishingAuthorId);
6
6
  }
7
7
  get name() {
8
- return 'ucm_create_repository';
8
+ return 'ucm_repository_create';
9
9
  }
10
10
  get description() {
11
11
  const authorInfo = this.publishingAuthorId ? ` Your default workspace id is '${this.publishingAuthorId}'.` : '';
@@ -15,7 +15,7 @@ export class CreateRepositoryTool extends BaseToolController {
15
15
  return {
16
16
  type: 'object',
17
17
  properties: {
18
- author: {
18
+ workspace: {
19
19
  type: 'string',
20
20
  description: this.publishingAuthorId ? `Workspace identifier: ${this.publishingAuthorId}` : 'Workspace identifier (e.g., "utaba", "1064600359")',
21
21
  minLength: 1,
@@ -39,14 +39,14 @@ export class CreateRepositoryTool extends BaseToolController {
39
39
  maxLength: 1000
40
40
  }
41
41
  },
42
- required: ['author', 'repositoryName'],
42
+ required: ['workspace', 'repositoryName'],
43
43
  additionalProperties: false
44
44
  };
45
45
  }
46
46
  validateParams(params) {
47
47
  super.validateParams(params);
48
48
  // Additional validation
49
- if (!params.author || typeof params.author !== 'string' || params.author.trim() === '') {
49
+ if (!params.workspace || typeof params.workspace !== 'string' || params.workspace.trim() === '') {
50
50
  throw new McpError(McpErrorCode.InvalidParams, 'Author identifier is required and cannot be empty');
51
51
  }
52
52
  if (!params.repositoryName || typeof params.repositoryName !== 'string' || params.repositoryName.trim() === '') {
@@ -71,14 +71,15 @@ export class CreateRepositoryTool extends BaseToolController {
71
71
  }
72
72
  }
73
73
  async handleExecute(params) {
74
- this.logger.info('CreateRepositoryTool', `Creating repository ${params.repositoryName} for author ${params.author}`);
74
+ const author = params.workspace;
75
+ this.logger.info('CreateRepositoryTool', `Creating repository ${params.repositoryName} for author ${author}`);
75
76
  try {
76
77
  const repositoryData = {
77
78
  repositoryName: params.repositoryName,
78
79
  displayName: params.displayName,
79
80
  description: params.description
80
81
  };
81
- const result = await this.ucmClient.createRepository(params.author, repositoryData);
82
+ const result = await this.ucmClient.createRepository(author, repositoryData);
82
83
  this.logger.info('CreateRepositoryTool', `Repository created successfully: ${params.repositoryName}`);
83
84
  return {
84
85
  content: [
@@ -86,7 +87,7 @@ export class CreateRepositoryTool extends BaseToolController {
86
87
  type: 'text',
87
88
  text: JSON.stringify({
88
89
  success: true,
89
- message: `Repository '${params.repositoryName}' created successfully for author '${params.author}'`,
90
+ message: `Repository '${params.repositoryName}' created successfully for author '${author}'`,
90
91
  repository: result,
91
92
  webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/repository/${result.id || params.repositoryName}`
92
93
  }, null, 2)
@@ -99,10 +100,10 @@ export class CreateRepositoryTool extends BaseToolController {
99
100
  const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
100
101
  // Handle specific error cases
101
102
  if (errorMessage.includes('already exists') || errorMessage.includes('NAME_EXISTS')) {
102
- throw new McpError(McpErrorCode.InvalidParams, `Repository name '${params.repositoryName}' already exists for author '${params.author}'. Please choose a different name.`);
103
+ throw new McpError(McpErrorCode.InvalidParams, `Repository name '${params.repositoryName}' already exists for author '${author}'. Please choose a different name.`);
103
104
  }
104
105
  if (errorMessage.includes('not found') || errorMessage.includes('404')) {
105
- throw new McpError(McpErrorCode.InvalidParams, `Author '${params.author}' not found. Please verify the author identifier.`);
106
+ throw new McpError(McpErrorCode.InvalidParams, `Author '${author}' not found. Please verify the author identifier.`);
106
107
  }
107
108
  if (errorMessage.includes('validation') || errorMessage.includes('invalid')) {
108
109
  throw new McpError(McpErrorCode.InvalidParams, `Repository creation failed due to validation error: ${errorMessage}`);
@@ -5,17 +5,16 @@ export class GetRepositoryTool extends BaseToolController {
5
5
  super(ucmClient, logger, publishingAuthorId);
6
6
  }
7
7
  get name() {
8
- return 'ucm_get_repository';
8
+ return 'ucm_repository_get';
9
9
  }
10
10
  get description() {
11
- const authorInfo = this.publishingAuthorId ? ` Your workspace id is '${this.publishingAuthorId}'.` : '';
12
- return `Get detailed information about a specific repository, including metadata, statistics, and available categories. Returns repository details along with its content structure.${authorInfo}`;
11
+ return 'Get detailed information about a specific repository, including metadata, statistics, and available categories. Returns repository details along with its content structure.';
13
12
  }
14
13
  get inputSchema() {
15
14
  return {
16
15
  type: 'object',
17
16
  properties: {
18
- author: {
17
+ workspace: {
19
18
  type: 'string',
20
19
  description: this.publishingAuthorId ? `Workspace identifier: ${this.publishingAuthorId}` : 'Workspace identifier (e.g., "utaba", "1064600359")',
21
20
  minLength: 1,
@@ -28,13 +27,13 @@ export class GetRepositoryTool extends BaseToolController {
28
27
  maxLength: 200
29
28
  }
30
29
  },
31
- required: ['author', 'repository'],
30
+ required: ['workspace', 'repository'],
32
31
  additionalProperties: false
33
32
  };
34
33
  }
35
34
  validateParams(params) {
36
35
  super.validateParams(params);
37
- if (!params.author || typeof params.author !== 'string' || params.author.trim() === '') {
36
+ if (!params.workspace || typeof params.workspace !== 'string' || params.workspace.trim() === '') {
38
37
  throw new McpError(McpErrorCode.InvalidParams, 'Author identifier is required and cannot be empty');
39
38
  }
40
39
  if (!params.repository || typeof params.repository !== 'string' || params.repository.trim() === '') {
@@ -42,20 +41,21 @@ export class GetRepositoryTool extends BaseToolController {
42
41
  }
43
42
  }
44
43
  async handleExecute(params) {
45
- this.logger.info('GetRepositoryTool', `Getting repository ${params.repository} for author ${params.author}`);
44
+ const author = params.workspace;
45
+ this.logger.info('GetRepositoryTool', `Getting repository ${params.repository} for author ${author}`);
46
46
  try {
47
- const result = await this.ucmClient.getRepository(params.author, params.repository);
47
+ const result = await this.ucmClient.getRepository(author, params.repository);
48
48
  this.logger.info('GetRepositoryTool', `Repository retrieved successfully: ${params.repository}`);
49
49
  // Enhance the response with additional helpful information
50
50
  const enhancedResult = {
51
51
  success: true,
52
- message: `Repository '${params.repository}' retrieved successfully for author '${params.author}'`,
52
+ message: `Repository '${params.repository}' retrieved successfully for author '${author}'`,
53
53
  repository: result,
54
- webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/browse/${params.author}/${params.repository}`,
54
+ webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/browse/${author}/${params.repository}`,
55
55
  apiEndpoints: {
56
- browse: `/api/v1/authors/${params.author}/${params.repository}`,
57
- artifacts: `/api/v1/authors/${params.author}/${params.repository}/{category}/{subcategory}`,
58
- files: `/api/v1/files/${params.author}/${params.repository}/{category}/{subcategory}/{filename}`
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
59
  }
60
60
  };
61
61
  return {
@@ -72,10 +72,10 @@ export class GetRepositoryTool extends BaseToolController {
72
72
  const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
73
73
  // Handle specific error cases
74
74
  if (errorMessage.includes('not found') || errorMessage.includes('404')) {
75
- throw new McpError(McpErrorCode.InvalidParams, `Repository '${params.repository}' not found for author '${params.author}'. Please verify the repository name and author identifier.`);
75
+ throw new McpError(McpErrorCode.InvalidParams, `Repository '${params.repository}' not found for author '${author}'. Please verify the repository name and author identifier.`);
76
76
  }
77
77
  if (errorMessage.includes('403') || errorMessage.includes('Forbidden')) {
78
- throw new McpError(McpErrorCode.InvalidParams, `Access denied to repository '${params.repository}' for author '${params.author}'. You may not have permission to view this repository.`);
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
79
  }
80
80
  // Generic error
81
81
  throw new McpError(McpErrorCode.InternalError, `Failed to retrieve repository: ${errorMessage}`);
@@ -5,7 +5,7 @@ export class UpdateRepositoryTool extends BaseToolController {
5
5
  super(ucmClient, logger, publishingAuthorId);
6
6
  }
7
7
  get name() {
8
- return 'ucm_update_repository';
8
+ return 'ucm_repository_update';
9
9
  }
10
10
  get description() {
11
11
  const authorInfo = this.publishingAuthorId ? ` Your default workspace id is '${this.publishingAuthorId}'.` : '';
@@ -15,7 +15,7 @@ export class UpdateRepositoryTool extends BaseToolController {
15
15
  return {
16
16
  type: 'object',
17
17
  properties: {
18
- author: {
18
+ workspace: {
19
19
  type: 'string',
20
20
  description: this.publishingAuthorId ? `Workspace identifier: ${this.publishingAuthorId}` : 'Workspace identifier (e.g., "utaba", "1064600359")',
21
21
  minLength: 1,
@@ -38,13 +38,13 @@ export class UpdateRepositoryTool extends BaseToolController {
38
38
  maxLength: 1000
39
39
  }
40
40
  },
41
- required: ['author', 'repository'],
41
+ required: ['workspace', 'repository'],
42
42
  additionalProperties: false
43
43
  };
44
44
  }
45
45
  validateParams(params) {
46
46
  super.validateParams(params);
47
- if (!params.author || typeof params.author !== 'string' || params.author.trim() === '') {
47
+ if (!params.workspace || typeof params.workspace !== 'string' || params.workspace.trim() === '') {
48
48
  throw new McpError(McpErrorCode.InvalidParams, 'Author identifier is required and cannot be empty');
49
49
  }
50
50
  if (!params.repository || typeof params.repository !== 'string' || params.repository.trim() === '') {
@@ -66,7 +66,8 @@ export class UpdateRepositoryTool extends BaseToolController {
66
66
  }
67
67
  }
68
68
  async handleExecute(params) {
69
- this.logger.info('UpdateRepositoryTool', `Updating repository ${params.repository} for author ${params.author}`);
69
+ const author = params.workspace;
70
+ this.logger.info('UpdateRepositoryTool', `Updating repository ${params.repository} for author ${author}`);
70
71
  try {
71
72
  // Build update data from provided parameters
72
73
  const updateData = {};
@@ -76,7 +77,7 @@ export class UpdateRepositoryTool extends BaseToolController {
76
77
  if (params.description !== undefined) {
77
78
  updateData.description = params.description;
78
79
  }
79
- const result = await this.ucmClient.updateRepository(params.author, params.repository, updateData);
80
+ const result = await this.ucmClient.updateRepository(author, params.repository, updateData);
80
81
  this.logger.info('UpdateRepositoryTool', `Repository updated successfully: ${params.repository}`);
81
82
  return {
82
83
  content: [
@@ -84,7 +85,7 @@ export class UpdateRepositoryTool extends BaseToolController {
84
85
  type: 'text',
85
86
  text: JSON.stringify({
86
87
  success: true,
87
- message: `Repository '${params.repository}' updated successfully for author '${params.author}'`,
88
+ message: `Repository '${params.repository}' updated successfully for author '${author}'`,
88
89
  repository: result,
89
90
  updatedFields: Object.keys(updateData),
90
91
  webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/repository/${result.id || params.repository}/settings`
@@ -98,10 +99,10 @@ export class UpdateRepositoryTool extends BaseToolController {
98
99
  const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
99
100
  // Handle specific error cases
100
101
  if (errorMessage.includes('not found') || errorMessage.includes('404')) {
101
- throw new McpError(McpErrorCode.InvalidParams, `Repository '${params.repository}' not found for author '${params.author}'. Please verify the repository name and author identifier.`);
102
+ throw new McpError(McpErrorCode.InvalidParams, `Repository '${params.repository}' not found for author '${author}'. Please verify the repository name and author identifier.`);
102
103
  }
103
104
  if (errorMessage.includes('403') || errorMessage.includes('Forbidden')) {
104
- throw new McpError(McpErrorCode.InvalidParams, `Access denied to update repository '${params.repository}' for author '${params.author}'. You may not have permission to modify this repository.`);
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.`);
105
106
  }
106
107
  if (errorMessage.includes('validation') || errorMessage.includes('invalid')) {
107
108
  throw new McpError(McpErrorCode.InvalidParams, `Repository update failed due to validation error: ${errorMessage}`);
@@ -9,7 +9,7 @@ export class ListConnectionsTool extends BaseToolController {
9
9
  super(ucmClient, logger, publishingAuthorId);
10
10
  }
11
11
  get name() {
12
- return 'ucm_list_connections';
12
+ return 'ucm_connection_list';
13
13
  }
14
14
  get description() {
15
15
  return 'List all External connections including SharePoint available to the user. Returns connection details, use this to discover available connections before searching or browsing.';
@@ -13,7 +13,7 @@ export class SharePointListFoldersTool extends BaseToolController {
13
13
  return 'ucm_sharepoint_list_folders';
14
14
  }
15
15
  get description() {
16
- return 'Browse SharePoint hierarchically: "/" lists document libraries, "/LibraryName" lists library root, "/LibraryName/Folder" lists subfolder. Supports pagination. Use ucm_list_connections first to get connection ID.';
16
+ return 'Browse SharePoint hierarchically: "/" lists document libraries, "/LibraryName" lists library root, "/LibraryName/Folder" lists subfolder. Supports pagination. Use ucm_connection_list first to get connection ID.';
17
17
  }
18
18
  get inputSchema() {
19
19
  return {
@@ -4,25 +4,26 @@ export class AuthorIndexTool extends BaseToolController {
4
4
  super(ucmClient, logger, publishingAuthorId);
5
5
  }
6
6
  get name() {
7
- return 'ucm_get_author_index';
7
+ return 'ucm_workspace_get_index';
8
8
  }
9
9
  get description() {
10
- return `Discover a dynamic markdown index guide for AI assistants working with a workspace\'s content. Your workspace id is '${this.publishingAuthorId}'`;
10
+ return 'Discover a dynamic markdown index guide for AI assistants working with a workspace\'s content.';
11
11
  }
12
12
  get inputSchema() {
13
13
  return {
14
14
  type: 'object',
15
15
  properties: {
16
- author: {
16
+ workspace: {
17
17
  type: 'string',
18
18
  description: `Workspace identifier: ${this.publishingAuthorId || '1234567890'}`
19
19
  }
20
20
  },
21
- required: ['author']
21
+ required: ['workspace']
22
22
  };
23
23
  }
24
24
  async handleExecute(params) {
25
- const { author } = params;
25
+ const { workspace } = params;
26
+ const author = workspace;
26
27
  this.logger.debug('AuthorIndexTool', `Retrieving author index for: ${author}`);
27
28
  try {
28
29
  // Get author index content from API (author-level index, not repository-specific)
@@ -4,25 +4,26 @@ export class AuthorRecentsTool extends BaseToolController {
4
4
  super(ucmClient, logger, publishingAuthorId);
5
5
  }
6
6
  get name() {
7
- return 'ucm_get_author_recents';
7
+ return 'ucm_workspace_get_recents';
8
8
  }
9
9
  get description() {
10
- return `Generate workspace activity tracking showing the 20 most recently modified artifacts within a workspace. Your workspace id is '${this.publishingAuthorId}'`;
10
+ return 'Generate workspace activity tracking showing the 20 most recently modified artifacts within a workspace.';
11
11
  }
12
12
  get inputSchema() {
13
13
  return {
14
14
  type: 'object',
15
15
  properties: {
16
- author: {
16
+ workspace: {
17
17
  type: 'string',
18
18
  description: `Workspace identifier: ${this.publishingAuthorId || '1234567890'}`
19
19
  }
20
20
  },
21
- required: ['author']
21
+ required: ['workspace']
22
22
  };
23
23
  }
24
24
  async handleExecute(params) {
25
- const { author } = params;
25
+ const { workspace } = params;
26
+ const author = workspace;
26
27
  this.logger.debug('AuthorRecentsTool', `Retrieving author recents for: ${author}`);
27
28
  try {
28
29
  // Get author recent activity content from API
@@ -4,7 +4,7 @@ export class ListRepositoriesTool extends BaseToolController {
4
4
  super(ucmClient, logger, publishingAuthorId);
5
5
  }
6
6
  get name() {
7
- return 'ucm_list_repositories';
7
+ return 'ucm_workspace_list_repos';
8
8
  }
9
9
  get description() {
10
10
  return 'List all repositories for a specific workspace with pagination and statistics';
@@ -13,7 +13,7 @@ export class ListRepositoriesTool extends BaseToolController {
13
13
  return {
14
14
  type: 'object',
15
15
  properties: {
16
- author: {
16
+ workspace: {
17
17
  type: 'string',
18
18
  description: `Workspace identifier (e.g., "${this.publishingAuthorId || '1234567890'}")`,
19
19
  minLength: 1,
@@ -31,11 +31,12 @@ export class ListRepositoriesTool extends BaseToolController {
31
31
  maximum: 100
32
32
  }
33
33
  },
34
- required: ['author']
34
+ required: ['workspace']
35
35
  };
36
36
  }
37
37
  async handleExecute(params) {
38
- const { author, offset, limit } = params;
38
+ const { workspace, offset, limit } = params;
39
+ const author = workspace;
39
40
  this.logger.debug('ListRepositoriesTool', `Listing repositories for author: ${author}`, '', {
40
41
  offset: offset || 0,
41
42
  limit: limit || 'default'
@@ -51,7 +51,7 @@ export class McpErrorHandler {
51
51
  return new McpError(McpErrorCode.InvalidParams, 'Parameter validation failed', { originalError: error });
52
52
  }
53
53
  if (message?.includes('ECONNREFUSED')) {
54
- return new McpError(McpErrorCode.ExternalServiceUnavailable, 'External API is unavailable, try the ucm_health_check tool', { originalError: error });
54
+ return new McpError(McpErrorCode.ExternalServiceUnavailable, 'External API is unavailable, try ucm_connect to verify your connection', { originalError: error });
55
55
  }
56
56
  if (message?.includes('validation') || message?.includes('invalid') ||
57
57
  message?.includes('required') || message?.includes('must be')) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@utaba/ucm-mcp-server",
3
- "version": "6.5.1",
3
+ "version": "6.7.0",
4
4
  "description": "Universal Context Manager MCP Server - AI Productivity Platform",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ucm-mcp-server",
3
- "version": "6.5.1",
3
+ "version": "6.7.0",
4
4
  "description": "Universal Context Manager MCP Server - AI Productivity Platform",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -1,157 +0,0 @@
1
- import { ArtifactData, AuthorData } from '../types/UcmApiTypes.js';
2
- export declare class UcmLocalApiClient {
3
- private baseUrl;
4
- private authToken?;
5
- private authorId?;
6
- private organizationId?;
7
- private client;
8
- constructor(baseUrl: string, authToken?: string | undefined, timeout?: number, authorId?: string | undefined, organizationId?: string | undefined);
9
- /**
10
- * Get organizationId from constructor or throw error
11
- * For local MCP server, organizationId should be provided during initialization
12
- */
13
- getOrganizationId(): Promise<string>;
14
- private setupInterceptors;
15
- private ensureClient;
16
- getAuthors(): Promise<AuthorData[]>;
17
- getAuthor(authorId: string): Promise<AuthorData | null>;
18
- private buildApiPath;
19
- getArtifact(author?: string, repository?: string, category?: string, subcategory?: string, filename?: string, version?: string): Promise<ArtifactData>;
20
- getLatestArtifact(author?: string, repository?: string, category?: string, subcategory?: string, filename?: string): Promise<ArtifactData>;
21
- listArtifacts(author?: string, repository?: string, category?: string, subcategory?: string, offset?: number, limit?: number): Promise<{
22
- data: any[];
23
- pagination: {
24
- offset: number;
25
- limit: number;
26
- total: number;
27
- };
28
- _links?: any;
29
- }>;
30
- searchArtifacts(filters?: {
31
- repository?: string;
32
- category?: string;
33
- technology?: string;
34
- subcategory?: string;
35
- offset?: number;
36
- limit?: number;
37
- }): Promise<ArtifactData[]>;
38
- searchArtifactsByText(searchParams: {
39
- searchText?: string;
40
- namespace?: string;
41
- author?: string;
42
- repository?: string;
43
- category?: string;
44
- subcategory?: string;
45
- filename?: string;
46
- tags?: string;
47
- offset?: number;
48
- limit?: number;
49
- }): Promise<{
50
- data: any[];
51
- pagination: {
52
- offset: number;
53
- limit: number;
54
- total: number;
55
- hasMore: boolean;
56
- };
57
- _links?: any;
58
- }>;
59
- publishArtifact(author: string, repository: string, category: string, subcategory: string, data: any): Promise<ArtifactData>;
60
- updateArtifact(author: string, repository: string, category: string, subcategory: string, filename: string, version: string, data: any): Promise<ArtifactData>;
61
- deleteArtifact(author: string, repository: string, category: string, subcategory: string, filename: string, version?: string): Promise<any>;
62
- getArtifactVersions(author: string, repository: string, category: string, subcategory: string, filename: string): Promise<any>;
63
- getCategories(): Promise<string[]>;
64
- healthCheck(): Promise<{
65
- status: string;
66
- timestamp: string;
67
- }>;
68
- getQuickstart(): Promise<string>;
69
- getAuthorIndex(author: string, repository?: string): Promise<string>;
70
- getAuthorRecents(author: string): Promise<string>;
71
- /**
72
- * Cleanup method to properly dispose of HTTP client resources
73
- * This helps prevent memory leaks from accumulated AbortSignal listeners
74
- */
75
- cleanup(): void;
76
- /**
77
- * Check if the client is still available for use
78
- */
79
- isAvailable(): boolean;
80
- createRepository(author: string, data: {
81
- repositoryName: string;
82
- displayName?: string;
83
- description?: string;
84
- }): Promise<any>;
85
- getRepository(author: string, repository: string): Promise<any>;
86
- updateRepository(author: string, repository: string, data: {
87
- displayName?: string;
88
- description?: string;
89
- }): Promise<any>;
90
- deleteRepository(author: string, repository: string): Promise<any>;
91
- listRepositories(author: string, offset?: number, limit?: number): Promise<{
92
- data: any[];
93
- pagination: {
94
- offset: number;
95
- limit: number;
96
- total: number;
97
- };
98
- _links?: any;
99
- }>;
100
- submitFeedback(data: {
101
- title: string;
102
- body: string;
103
- reportType: 'issue' | 'feedback';
104
- tags?: string;
105
- }): Promise<any>;
106
- editArtifactMetadata(author: string, repository: string, category: string, subcategory: string, filename: string, data: {
107
- updateDescription?: string;
108
- updateNamespace?: string;
109
- updateFilename?: string;
110
- updateMimeType?: string;
111
- updateTechnology?: string;
112
- updateTags?: string;
113
- }): Promise<any>;
114
- /**
115
- * Generate markdown for SharePoint connections (safe, non-sensitive data only)
116
- */
117
- sharePointGenerateConnectionsMarkdown(organizationId: string, params: {
118
- limit?: number;
119
- offset?: number;
120
- }): Promise<any>;
121
- /**
122
- * List SharePoint connections for an organization (includes sensitive data - use with caution)
123
- */
124
- sharePointListConnections(organizationId: string, params: {
125
- limit?: number;
126
- offset?: number;
127
- }): Promise<any>;
128
- /**
129
- * Search SharePoint documents using Microsoft Search API
130
- */
131
- sharePointSearch(organizationId: string, connectionId: string, params: {
132
- query: string;
133
- limit?: number;
134
- offset?: number;
135
- fileType?: string;
136
- }): Promise<any>;
137
- /**
138
- * List folders and files in SharePoint with pagination
139
- */
140
- sharePointListFolders(organizationId: string, connectionId: string, params: {
141
- folderPath?: string;
142
- includeFiles?: boolean;
143
- recursive?: boolean;
144
- limit?: number;
145
- offset?: number;
146
- }): Promise<any>;
147
- /**
148
- * Read SharePoint file content with support for both fileUrl and legacy fileId
149
- */
150
- sharePointReadFile(organizationId: string, connectionId: string, params: {
151
- fileUrl?: string;
152
- fileId?: string;
153
- fileName?: string;
154
- extractMetadata?: boolean;
155
- }): Promise<any>;
156
- }
157
- //# sourceMappingURL=UcmApiClient.d.ts.map