ucm-mcp-server 6.7.0 → 6.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -171,6 +171,7 @@ export declare class UcmLocalApiClient {
171
171
  limit?: number;
172
172
  offset?: number;
173
173
  fileType?: string;
174
+ filesOnly?: boolean;
174
175
  }): Promise<any>;
175
176
  /**
176
177
  * List folders and files in SharePoint with pagination
@@ -303,6 +304,7 @@ export declare class UcmLocalApiClient {
303
304
  maxDepth?: number;
304
305
  relationshipTypes?: string[];
305
306
  entityTypes?: string[];
307
+ direction?: string;
306
308
  limit?: number;
307
309
  }): Promise<any>;
308
310
  /**
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ async function main() {
12
12
  program
13
13
  .name('ucm-mcp-server')
14
14
  .description('Universal Context Manager - Read the ucm_connect tool first to avoid mistakes')
15
- .version('6.7.0')
15
+ .version('6.7.1')
16
16
  .option('-u, --ucm-url <url>', 'UCM API base URL (defaults to https://ucm.utaba.ai)')
17
17
  .option('-p, --port <port>', 'Server port', '3001')
18
18
  .option('--log-level <level>', 'Log level', 'ERROR')
@@ -89,6 +89,9 @@ export class SignOutTool extends BaseToolController {
89
89
  if (status === 400 && errorData?.error === 'INVALID_AUTH_TYPE') {
90
90
  throw new McpError(McpErrorCode.InvalidRequest, `Invalid operation: This connection does not use user-delegated authentication.`);
91
91
  }
92
+ if (status === 400 && errorData?.error === 'SSO_SIGNOUT_NOT_SUPPORTED') {
93
+ throw new McpError(McpErrorCode.InvalidRequest, errorData?.message || 'This connection uses SSO authentication. Sign out of UCM to revoke access.');
94
+ }
92
95
  throw new McpError(McpErrorCode.InternalError, `API error: ${errorData?.message || error.message}`);
93
96
  }
94
97
  throw new McpError(McpErrorCode.InternalError, `Failed to revoke authorization: ${error.message}`);
@@ -38,7 +38,7 @@ export class GraphExploreTool extends BaseToolController {
38
38
  },
39
39
  direction: {
40
40
  type: 'string',
41
- enum: ['outbound', 'inbound', 'both'],
41
+ enum: ['out', 'in', 'both'],
42
42
  description: 'Traversal direction (default: both)'
43
43
  },
44
44
  limitPerType: {
@@ -58,6 +58,7 @@ export class GraphExploreTool extends BaseToolController {
58
58
  maxDepth: depth,
59
59
  relationshipTypes,
60
60
  entityTypes,
61
+ direction,
61
62
  limit: limitPerType
62
63
  });
63
64
  return JSON.stringify(result);
@@ -7,7 +7,7 @@ export class GraphGetRelationshipsTool extends BaseToolController {
7
7
  }
8
8
  get name() { return 'ucm_graph_get_relationships'; }
9
9
  get description() {
10
- return 'Get relationships for an entity with optional type filtering and direction control (outbound, inbound, or both).';
10
+ return 'Get relationships for an entity with optional type filtering and direction control (out, in, or both).';
11
11
  }
12
12
  get schema() { return GraphGetRelationshipsSchema; }
13
13
  get inputSchema() {
@@ -29,7 +29,7 @@ export class GraphGetRelationshipsTool extends BaseToolController {
29
29
  },
30
30
  direction: {
31
31
  type: 'string',
32
- enum: ['outbound', 'inbound', 'both'],
32
+ enum: ['out', 'in', 'both'],
33
33
  description: 'Relationship direction (default: both)'
34
34
  },
35
35
  limit: {
@@ -111,7 +111,7 @@ export class SharePointReadFileTool extends BaseToolController {
111
111
  content: result.content,
112
112
  conversionNotes: result.conversionNotes,
113
113
  convertedAt: result.convertedAt,
114
- viewInBrowserUrl: result.viewInBrowserUrl
114
+ viewUrl: result.viewUrl
115
115
  };
116
116
  // Add nextOffset if there's more content
117
117
  if (result.hasMore && result.nextOffset !== undefined) {
@@ -17,6 +17,7 @@ export declare class SharePointSearchTool extends BaseToolController {
17
17
  limit?: number;
18
18
  offset?: number;
19
19
  fileType?: string;
20
+ filesOnly?: boolean;
20
21
  }): Promise<any>;
21
22
  }
22
23
  //# sourceMappingURL=SharePointSearchTool.d.ts.map
@@ -13,7 +13,7 @@ export class SharePointSearchTool extends BaseToolController {
13
13
  return 'ucm_sharepoint_search_documents';
14
14
  }
15
15
  get description() {
16
- return 'Search SharePoint documents with text query using Microsoft Search API. Returns document metadata with snippets. Supports pagination and file type filtering via KQL.';
16
+ return 'Search SharePoint content with a text query using Microsoft Search API. Returns metadata with snippets. Searches everything (documents and SharePoint pages — .aspx, modern or classic) by default; set filesOnly to limit to documents. Supports pagination and file type filtering via KQL.';
17
17
  }
18
18
  get inputSchema() {
19
19
  return {
@@ -45,6 +45,10 @@ export class SharePointSearchTool extends BaseToolController {
45
45
  type: 'string',
46
46
  description: 'Filter by file extension (e.g., "docx", "pdf", "xlsx") - uses Microsoft Search KQL filtering',
47
47
  maxLength: 10
48
+ },
49
+ filesOnly: {
50
+ type: 'boolean',
51
+ description: 'When true, search documents/files only. When false (default), also returns SharePoint pages (.aspx — modern or classic) alongside documents.'
48
52
  }
49
53
  },
50
54
  required: ['connectionId'],
@@ -84,6 +88,10 @@ export class SharePointSearchTool extends BaseToolController {
84
88
  if (params.fileType && !/^[a-zA-Z0-9]{1,10}$/.test(params.fileType)) {
85
89
  throw new McpError(McpErrorCode.InvalidParams, 'File type must be alphanumeric and no more than 10 characters');
86
90
  }
91
+ // Validate filesOnly if provided
92
+ if (params.filesOnly !== undefined && typeof params.filesOnly !== 'boolean') {
93
+ throw new McpError(McpErrorCode.InvalidParams, 'filesOnly must be a boolean');
94
+ }
87
95
  }
88
96
  async handleExecute(params) {
89
97
  this.logger.info('SharePointSearchTool', `Searching SharePoint with query: "${params.query}"`);
@@ -93,7 +101,8 @@ export class SharePointSearchTool extends BaseToolController {
93
101
  query: params.query,
94
102
  limit: params.limit,
95
103
  offset: params.offset,
96
- fileType: params.fileType
104
+ fileType: params.fileType,
105
+ filesOnly: params.filesOnly
97
106
  };
98
107
  // Make API call via UCM client
99
108
  const result = await this.ucmClient.sharePointSearch(params.connectionId, searchParams);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ucm-mcp-server",
3
- "version": "6.7.0",
3
+ "version": "6.7.1",
4
4
  "description": "Universal Context Manager MCP Server - AI Productivity Platform",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",