@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.
- package/dist/clients/UcmLocalApiClient.d.ts +221 -2
- package/dist/clients/UcmLocalApiClient.js +211 -3
- package/dist/index.js +1 -1
- package/dist/interfaces/IMcpTool.d.ts +2 -2
- package/dist/server/ToolRegistry.js +44 -8
- package/dist/tools/authorization/ListAuthorizationsTool.js +2 -2
- package/dist/tools/authorization/SignOutTool.js +2 -2
- package/dist/tools/base/BaseToolController.d.ts +7 -4
- package/dist/tools/base/BaseToolController.js +28 -11
- package/dist/tools/connections/AccessConnectionTool.js +2 -2
- package/dist/tools/connections/CallRemoteToolTool.js +3 -3
- package/dist/tools/core/DeleteArtifactTool.js +5 -4
- package/dist/tools/core/EditArtifactMetadataTool.js +1 -1
- package/dist/tools/core/GetArtifactTool.js +1 -1
- package/dist/tools/core/GetArtifactVersionsTool.js +1 -1
- package/dist/tools/core/GetChunkTool.js +1 -1
- package/dist/tools/core/ListArtifactsTool.js +1 -1
- package/dist/tools/core/MoveArtifactTool.d.ts +1 -1
- package/dist/tools/core/MoveArtifactTool.js +2 -2
- package/dist/tools/core/PublishArtifactFromFileTool.js +1 -1
- package/dist/tools/core/PublishArtifactTool.js +2 -2
- package/dist/tools/core/SearchArtifactsTool.js +7 -6
- package/dist/tools/memory-graph/GraphCreateEntitiesTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphCreateEntitiesTool.js +58 -0
- package/dist/tools/memory-graph/GraphCreateRelationshipsTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphCreateRelationshipsTool.js +57 -0
- package/dist/tools/memory-graph/GraphCreateTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphCreateTool.js +64 -0
- package/dist/tools/memory-graph/GraphDeleteEntitiesTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphDeleteEntitiesTool.js +45 -0
- package/dist/tools/memory-graph/GraphDeleteRelationshipsTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphDeleteRelationshipsTool.js +45 -0
- package/dist/tools/memory-graph/GraphExploreTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphExploreTool.js +73 -0
- package/dist/tools/memory-graph/GraphFindEntitiesTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphFindEntitiesTool.js +68 -0
- package/dist/tools/memory-graph/GraphFindPathsTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphFindPathsTool.js +62 -0
- package/dist/tools/memory-graph/GraphGetEntityTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphGetEntityTool.js +49 -0
- package/dist/tools/memory-graph/GraphGetRelationshipsTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphGetRelationshipsTool.js +62 -0
- package/dist/tools/memory-graph/GraphListTemplatesTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphListTemplatesTool.js +34 -0
- package/dist/tools/memory-graph/GraphListTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphListTool.js +45 -0
- package/dist/tools/memory-graph/GraphOpenTool.d.ts +15 -0
- package/dist/tools/memory-graph/GraphOpenTool.js +50 -0
- package/dist/tools/memory-graph/GraphProposeVocabularyTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphProposeVocabularyTool.js +149 -0
- package/dist/tools/memory-graph/GraphSearchTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphSearchTool.js +94 -0
- package/dist/tools/memory-graph/GraphTraverseTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphTraverseTool.js +114 -0
- package/dist/tools/memory-graph/GraphUpdateEntitiesTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphUpdateEntitiesTool.js +58 -0
- package/dist/tools/memory-graph/GraphUpdateTool.d.ts +14 -0
- package/dist/tools/memory-graph/GraphUpdateTool.js +59 -0
- package/dist/tools/memory-graph/KnowledgeSetListTool.d.ts +14 -0
- package/dist/tools/memory-graph/KnowledgeSetListTool.js +25 -0
- package/dist/tools/memory-graph/KnowledgeSetOpenTool.d.ts +14 -0
- package/dist/tools/memory-graph/KnowledgeSetOpenTool.js +31 -0
- package/dist/tools/repository/CreateRepositoryTool.js +10 -9
- package/dist/tools/repository/GetRepositoryTool.js +15 -15
- package/dist/tools/repository/UpdateRepositoryTool.js +10 -9
- package/dist/tools/sharepoint/SharePointListConnectionsTool.js +1 -1
- package/dist/tools/sharepoint/SharePointListFoldersTool.js +1 -1
- package/dist/tools/utility/AuthorIndexTool.js +6 -5
- package/dist/tools/utility/AuthorRecentsTool.js +6 -5
- package/dist/tools/utility/ListRepositoriesTool.js +5 -4
- package/dist/utils/McpErrorHandler.js +1 -1
- package/package.json +1 -1
- package/package.json.backup +1 -1
- package/dist/clients/UcmApiClient.d.ts +0 -157
- package/dist/clients/UcmApiClient.js +0 -443
- package/dist/publish/package.json +0 -37
- package/dist/tools/artifacts/GetArtifactController.d.ts +0 -34
- package/dist/tools/artifacts/GetArtifactController.js +0 -397
- package/dist/tools/artifacts/GetLatestController.d.ts +0 -39
- package/dist/tools/artifacts/GetLatestController.js +0 -469
- package/dist/tools/artifacts/ListVersionsController.d.ts +0 -43
- package/dist/tools/artifacts/ListVersionsController.js +0 -530
- package/dist/tools/artifacts/PublishArtifactController.d.ts +0 -37
- package/dist/tools/artifacts/PublishArtifactController.js +0 -605
- package/dist/tools/discovery/BrowseCategoriesController.d.ts +0 -25
- package/dist/tools/discovery/BrowseCategoriesController.js +0 -400
- package/dist/tools/discovery/FindByPurposeController.d.ts +0 -12
- package/dist/tools/discovery/FindByPurposeController.js +0 -131
- package/dist/tools/discovery/ListAuthorsController.d.ts +0 -20
- package/dist/tools/discovery/ListAuthorsController.js +0 -274
- package/dist/tools/discovery/SearchArtifactsController.d.ts +0 -14
- package/dist/tools/discovery/SearchArtifactsController.js +0 -226
- package/dist/tools/navigation/ExploreNamespaceController.d.ts +0 -35
- package/dist/tools/navigation/ExploreNamespaceController.js +0 -548
- package/dist/tools/repository/DeleteRepositoryGuidanceTool.d.ts +0 -13
- package/dist/tools/repository/DeleteRepositoryGuidanceTool.js +0 -93
- package/dist/tools/sharepoint/SharePointSignOutTool.d.ts +0 -22
- package/dist/tools/sharepoint/SharePointSignOutTool.js +0 -114
- package/dist/tools/utility/HealthCheckController.d.ts +0 -11
- package/dist/tools/utility/HealthCheckController.js +0 -60
- package/dist/tools/utility/SubmitFeedbackTool.d.ts +0 -16
- package/dist/tools/utility/SubmitFeedbackTool.js +0 -68
- package/dist/tools/utility/ValidatePathController.d.ts +0 -30
- package/dist/tools/utility/ValidatePathController.js +0 -465
- package/dist/utils/HttpsAgentFactory.d.ts +0 -21
- package/dist/utils/HttpsAgentFactory.js +0 -50
- package/dist/utils/ValidationUtils.d.ts +0 -10
- 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 '
|
|
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
|
-
|
|
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: ['
|
|
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.
|
|
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
|
-
|
|
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(
|
|
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 '${
|
|
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 '${
|
|
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 '${
|
|
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 '
|
|
8
|
+
return 'ucm_repository_get';
|
|
9
9
|
}
|
|
10
10
|
get description() {
|
|
11
|
-
|
|
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
|
-
|
|
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: ['
|
|
30
|
+
required: ['workspace', 'repository'],
|
|
32
31
|
additionalProperties: false
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
34
|
validateParams(params) {
|
|
36
35
|
super.validateParams(params);
|
|
37
|
-
if (!params.
|
|
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
|
-
|
|
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(
|
|
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 '${
|
|
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/${
|
|
54
|
+
webUrl: `${process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'}/browse/${author}/${params.repository}`,
|
|
55
55
|
apiEndpoints: {
|
|
56
|
-
browse: `/api/v1/authors/${
|
|
57
|
-
artifacts: `/api/v1/authors/${
|
|
58
|
-
files: `/api/v1/files/${
|
|
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 '${
|
|
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 '${
|
|
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 '
|
|
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
|
-
|
|
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: ['
|
|
41
|
+
required: ['workspace', 'repository'],
|
|
42
42
|
additionalProperties: false
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
validateParams(params) {
|
|
46
46
|
super.validateParams(params);
|
|
47
|
-
if (!params.
|
|
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
|
-
|
|
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(
|
|
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 '${
|
|
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 '${
|
|
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 '${
|
|
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 '
|
|
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
|
|
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 '
|
|
7
|
+
return 'ucm_workspace_get_index';
|
|
8
8
|
}
|
|
9
9
|
get description() {
|
|
10
|
-
return
|
|
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
|
-
|
|
16
|
+
workspace: {
|
|
17
17
|
type: 'string',
|
|
18
18
|
description: `Workspace identifier: ${this.publishingAuthorId || '1234567890'}`
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
-
required: ['
|
|
21
|
+
required: ['workspace']
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
async handleExecute(params) {
|
|
25
|
-
const {
|
|
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 '
|
|
7
|
+
return 'ucm_workspace_get_recents';
|
|
8
8
|
}
|
|
9
9
|
get description() {
|
|
10
|
-
return
|
|
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
|
-
|
|
16
|
+
workspace: {
|
|
17
17
|
type: 'string',
|
|
18
18
|
description: `Workspace identifier: ${this.publishingAuthorId || '1234567890'}`
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
-
required: ['
|
|
21
|
+
required: ['workspace']
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
async handleExecute(params) {
|
|
25
|
-
const {
|
|
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 '
|
|
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
|
-
|
|
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: ['
|
|
34
|
+
required: ['workspace']
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
async handleExecute(params) {
|
|
38
|
-
const {
|
|
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
|
|
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
package/package.json.backup
CHANGED
|
@@ -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
|