snow-flow 8.39.6 → 8.39.7
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/README.md +1 -1
- package/dist/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.d.ts +4 -0
- package/dist/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.d.ts.map +1 -1
- package/dist/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.js +225 -18
- package/dist/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.js.map +1 -1
- package/dist/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.d.ts +7 -3
- package/dist/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.d.ts.map +1 -1
- package/dist/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.js +257 -68
- package/dist/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.js.map +1 -1
- package/dist/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.d.ts +6 -0
- package/dist/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.d.ts.map +1 -1
- package/dist/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.js +201 -44
- package/dist/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* snow_fuzzy_search
|
|
3
|
+
*
|
|
4
|
+
* Perform intelligent fuzzy search across ServiceNow tables using
|
|
5
|
+
* multiple matching strategies: LIKE queries, CONTAINS, and
|
|
6
|
+
* Levenshtein-based relevance scoring.
|
|
3
7
|
*/
|
|
4
8
|
import { MCPToolDefinition, ServiceNowContext, ToolResult } from '../../shared/types.js';
|
|
5
9
|
export declare const toolDefinition: MCPToolDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snow_fuzzy_search.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"snow_fuzzy_search.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIzF,eAAO,MAAM,cAAc,EAAE,iBA6C5B,CAAC;AAmGF,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA0IxF;AAED,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* snow_fuzzy_search
|
|
4
|
+
*
|
|
5
|
+
* Perform intelligent fuzzy search across ServiceNow tables using
|
|
6
|
+
* multiple matching strategies: LIKE queries, CONTAINS, and
|
|
7
|
+
* Levenshtein-based relevance scoring.
|
|
4
8
|
*/
|
|
5
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
10
|
exports.author = exports.version = exports.toolDefinition = void 0;
|
|
@@ -9,11 +13,11 @@ const auth_js_1 = require("../../shared/auth.js");
|
|
|
9
13
|
const error_handler_js_1 = require("../../shared/error-handler.js");
|
|
10
14
|
exports.toolDefinition = {
|
|
11
15
|
name: 'snow_fuzzy_search',
|
|
12
|
-
description: 'Perform fuzzy search across tables',
|
|
16
|
+
description: 'Perform fuzzy search across tables with relevance scoring. Uses LIKE/CONTAINS queries and ranks results by similarity to the search query.',
|
|
13
17
|
// Metadata for tool discovery (not sent to LLM)
|
|
14
18
|
category: 'advanced',
|
|
15
19
|
subcategory: 'search',
|
|
16
|
-
use_cases: ['fuzzy-search', 'text-search', 'search'],
|
|
20
|
+
use_cases: ['fuzzy-search', 'text-search', 'search', 'find-similar'],
|
|
17
21
|
complexity: 'intermediate',
|
|
18
22
|
frequency: 'medium',
|
|
19
23
|
// Permission enforcement
|
|
@@ -23,36 +27,239 @@ exports.toolDefinition = {
|
|
|
23
27
|
inputSchema: {
|
|
24
28
|
type: 'object',
|
|
25
29
|
properties: {
|
|
26
|
-
query: {
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
query: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: 'Search query - will match against name, label, and description fields'
|
|
33
|
+
},
|
|
34
|
+
tables: {
|
|
35
|
+
type: 'array',
|
|
36
|
+
items: { type: 'string' },
|
|
37
|
+
description: 'Tables to search (e.g., ["sys_db_object", "sys_script_include"])'
|
|
38
|
+
},
|
|
39
|
+
search_fields: {
|
|
40
|
+
type: 'array',
|
|
41
|
+
items: { type: 'string' },
|
|
42
|
+
description: 'Fields to search within each table (default: name, label, description)',
|
|
43
|
+
default: ['name', 'label', 'description']
|
|
44
|
+
},
|
|
45
|
+
threshold: {
|
|
46
|
+
type: 'number',
|
|
47
|
+
default: 0.3,
|
|
48
|
+
description: 'Minimum similarity score (0-1) to include in results. Lower = more results.'
|
|
49
|
+
},
|
|
50
|
+
limit: {
|
|
51
|
+
type: 'number',
|
|
52
|
+
default: 20,
|
|
53
|
+
description: 'Maximum results per table'
|
|
54
|
+
}
|
|
29
55
|
},
|
|
30
56
|
required: ['query', 'tables']
|
|
31
57
|
}
|
|
32
58
|
};
|
|
59
|
+
/**
|
|
60
|
+
* Calculate Levenshtein distance between two strings
|
|
61
|
+
*/
|
|
62
|
+
function levenshteinDistance(str1, str2) {
|
|
63
|
+
const s1 = str1.toLowerCase();
|
|
64
|
+
const s2 = str2.toLowerCase();
|
|
65
|
+
if (s1.length === 0)
|
|
66
|
+
return s2.length;
|
|
67
|
+
if (s2.length === 0)
|
|
68
|
+
return s1.length;
|
|
69
|
+
const matrix = [];
|
|
70
|
+
for (let i = 0; i <= s1.length; i++) {
|
|
71
|
+
matrix[i] = [i];
|
|
72
|
+
}
|
|
73
|
+
for (let j = 0; j <= s2.length; j++) {
|
|
74
|
+
matrix[0][j] = j;
|
|
75
|
+
}
|
|
76
|
+
for (let i = 1; i <= s1.length; i++) {
|
|
77
|
+
for (let j = 1; j <= s2.length; j++) {
|
|
78
|
+
const cost = s1[i - 1] === s2[j - 1] ? 0 : 1;
|
|
79
|
+
matrix[i][j] = Math.min(matrix[i - 1][j] + 1, // deletion
|
|
80
|
+
matrix[i][j - 1] + 1, // insertion
|
|
81
|
+
matrix[i - 1][j - 1] + cost // substitution
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return matrix[s1.length][s2.length];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Calculate similarity score (0-1) between query and a field value
|
|
89
|
+
*/
|
|
90
|
+
function calculateSimilarity(query, value) {
|
|
91
|
+
if (!value)
|
|
92
|
+
return 0;
|
|
93
|
+
const q = query.toLowerCase();
|
|
94
|
+
const v = value.toLowerCase();
|
|
95
|
+
// Exact match
|
|
96
|
+
if (v === q)
|
|
97
|
+
return 1.0;
|
|
98
|
+
// Contains exact query
|
|
99
|
+
if (v.includes(q))
|
|
100
|
+
return 0.9;
|
|
101
|
+
// Query contains the value (partial match)
|
|
102
|
+
if (q.includes(v))
|
|
103
|
+
return 0.7;
|
|
104
|
+
// Word-level matching
|
|
105
|
+
const queryWords = q.split(/[\s_\-\.]+/);
|
|
106
|
+
const valueWords = v.split(/[\s_\-\.]+/);
|
|
107
|
+
let matchedWords = 0;
|
|
108
|
+
for (const qWord of queryWords) {
|
|
109
|
+
for (const vWord of valueWords) {
|
|
110
|
+
if (vWord.includes(qWord) || qWord.includes(vWord)) {
|
|
111
|
+
matchedWords++;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const wordScore = queryWords.length > 0 ? matchedWords / queryWords.length : 0;
|
|
117
|
+
if (wordScore > 0.5)
|
|
118
|
+
return 0.5 + (wordScore * 0.3);
|
|
119
|
+
// Levenshtein-based similarity for close matches
|
|
120
|
+
const distance = levenshteinDistance(q, v);
|
|
121
|
+
const maxLen = Math.max(q.length, v.length);
|
|
122
|
+
const levenshteinScore = maxLen > 0 ? 1 - (distance / maxLen) : 0;
|
|
123
|
+
return levenshteinScore;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculate overall relevance score for a record
|
|
127
|
+
*/
|
|
128
|
+
function calculateRelevanceScore(query, record, searchFields) {
|
|
129
|
+
let maxScore = 0;
|
|
130
|
+
let matchedField = '';
|
|
131
|
+
for (const field of searchFields) {
|
|
132
|
+
const value = record[field];
|
|
133
|
+
if (value) {
|
|
134
|
+
const score = calculateSimilarity(query, String(value));
|
|
135
|
+
if (score > maxScore) {
|
|
136
|
+
maxScore = score;
|
|
137
|
+
matchedField = field;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { score: maxScore, matchedField };
|
|
142
|
+
}
|
|
33
143
|
async function execute(args, context) {
|
|
34
|
-
const { query, tables, threshold = 0.
|
|
144
|
+
const { query, tables, search_fields = ['name', 'label', 'description'], threshold = 0.3, limit = 20 } = args;
|
|
145
|
+
if (!query || query.trim().length === 0) {
|
|
146
|
+
return (0, error_handler_js_1.createErrorResult)('Search query cannot be empty');
|
|
147
|
+
}
|
|
148
|
+
if (!tables || tables.length === 0) {
|
|
149
|
+
return (0, error_handler_js_1.createErrorResult)('At least one table must be specified');
|
|
150
|
+
}
|
|
35
151
|
try {
|
|
36
152
|
const client = await (0, auth_js_1.getAuthenticatedClient)(context);
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
153
|
+
const allResults = [];
|
|
154
|
+
const tableResults = [];
|
|
155
|
+
// Build LIKE query for each search field
|
|
156
|
+
// This gets candidates from ServiceNow, then we score them locally
|
|
157
|
+
const buildSearchQuery = (fields, searchTerm) => {
|
|
158
|
+
const conditions = fields.map(field => `${field}LIKE${searchTerm}`);
|
|
159
|
+
return conditions.join('^NQ'); // NQ = OR in ServiceNow
|
|
160
|
+
};
|
|
161
|
+
// Search each table in parallel for better performance
|
|
162
|
+
const searchPromises = tables.map(async (table) => {
|
|
163
|
+
try {
|
|
164
|
+
// First, check what fields exist on this table
|
|
165
|
+
const searchQuery = buildSearchQuery(search_fields, query);
|
|
166
|
+
const response = await client.get(`/api/now/table/${table}`, {
|
|
167
|
+
params: {
|
|
168
|
+
sysparm_query: searchQuery,
|
|
169
|
+
sysparm_limit: limit * 2, // Get more candidates for scoring
|
|
170
|
+
sysparm_fields: `sys_id,${search_fields.join(',')},sys_created_on,sys_updated_on`
|
|
171
|
+
},
|
|
172
|
+
timeout: 15000 // 15 second timeout per table
|
|
173
|
+
});
|
|
174
|
+
if (!response.data.result || response.data.result.length === 0) {
|
|
175
|
+
return { table, results: [], count: 0 };
|
|
43
176
|
}
|
|
44
|
-
|
|
45
|
-
|
|
177
|
+
// Score and filter results
|
|
178
|
+
const scoredResults = response.data.result
|
|
179
|
+
.map((record) => {
|
|
180
|
+
const { score, matchedField } = calculateRelevanceScore(query, record, search_fields);
|
|
181
|
+
return {
|
|
182
|
+
...record,
|
|
183
|
+
_relevance_score: score,
|
|
184
|
+
_matched_field: matchedField,
|
|
185
|
+
_table: table
|
|
186
|
+
};
|
|
187
|
+
})
|
|
188
|
+
.filter((r) => r._relevance_score >= threshold)
|
|
189
|
+
.sort((a, b) => b._relevance_score - a._relevance_score)
|
|
190
|
+
.slice(0, limit);
|
|
191
|
+
return {
|
|
192
|
+
table,
|
|
193
|
+
results: scoredResults,
|
|
194
|
+
count: scoredResults.length
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (tableError) {
|
|
198
|
+
// Return empty results for tables that error (might not exist or no access)
|
|
199
|
+
return {
|
|
200
|
+
table,
|
|
201
|
+
results: [],
|
|
202
|
+
count: 0,
|
|
203
|
+
error: tableError.message
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
const searchResults = await Promise.all(searchPromises);
|
|
208
|
+
// Aggregate results
|
|
209
|
+
for (const result of searchResults) {
|
|
210
|
+
if (result.count > 0) {
|
|
211
|
+
tableResults.push({
|
|
212
|
+
table: result.table,
|
|
213
|
+
count: result.count,
|
|
214
|
+
matches: result.results.map((r) => ({
|
|
215
|
+
sys_id: r.sys_id,
|
|
216
|
+
name: r.name || r.label || r.sys_id,
|
|
217
|
+
label: r.label,
|
|
218
|
+
description: r.description,
|
|
219
|
+
relevance_score: Math.round(r._relevance_score * 100) / 100,
|
|
220
|
+
matched_field: r._matched_field,
|
|
221
|
+
created: r.sys_created_on,
|
|
222
|
+
updated: r.sys_updated_on
|
|
223
|
+
}))
|
|
224
|
+
});
|
|
225
|
+
allResults.push(...result.results);
|
|
226
|
+
}
|
|
227
|
+
else if (result.error) {
|
|
228
|
+
tableResults.push({
|
|
229
|
+
table: result.table,
|
|
230
|
+
count: 0,
|
|
231
|
+
error: result.error
|
|
232
|
+
});
|
|
233
|
+
}
|
|
46
234
|
}
|
|
235
|
+
// Sort all results by relevance score
|
|
236
|
+
allResults.sort((a, b) => b._relevance_score - a._relevance_score);
|
|
237
|
+
const totalMatches = allResults.length;
|
|
238
|
+
const tablesSearched = tables.length;
|
|
239
|
+
const tablesWithResults = tableResults.filter(t => t.count > 0).length;
|
|
47
240
|
return (0, error_handler_js_1.createSuccessResult)({
|
|
48
|
-
results,
|
|
49
|
-
count: results.length,
|
|
50
241
|
query,
|
|
51
|
-
threshold
|
|
242
|
+
threshold,
|
|
243
|
+
summary: {
|
|
244
|
+
total_matches: totalMatches,
|
|
245
|
+
tables_searched: tablesSearched,
|
|
246
|
+
tables_with_results: tablesWithResults
|
|
247
|
+
},
|
|
248
|
+
results_by_table: tableResults,
|
|
249
|
+
top_matches: allResults.slice(0, 10).map((r) => ({
|
|
250
|
+
table: r._table,
|
|
251
|
+
sys_id: r.sys_id,
|
|
252
|
+
name: r.name || r.label || r.sys_id,
|
|
253
|
+
relevance_score: Math.round(r._relevance_score * 100) / 100,
|
|
254
|
+
matched_field: r._matched_field
|
|
255
|
+
})),
|
|
256
|
+
message: totalMatches > 0
|
|
257
|
+
? `Found ${totalMatches} matches for "${query}" across ${tablesWithResults} table(s)`
|
|
258
|
+
: `No matches found for "${query}" above threshold ${threshold}`
|
|
52
259
|
});
|
|
53
260
|
}
|
|
54
261
|
catch (error) {
|
|
55
|
-
return (0, error_handler_js_1.createErrorResult)(error.message);
|
|
262
|
+
return (0, error_handler_js_1.createErrorResult)(`Fuzzy search failed: ${error.message}`);
|
|
56
263
|
}
|
|
57
264
|
}
|
|
58
265
|
exports.version = '1.0.0';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snow_fuzzy_search.js","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"snow_fuzzy_search.js","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/advanced/snow_fuzzy_search.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAsJH,0BA0IC;AA7RD,kDAA8D;AAC9D,oEAAuF;AAE1E,QAAA,cAAc,GAAsB;IAC/C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,4IAA4I;IACzJ,gDAAgD;IAChD,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC;IACpE,UAAU,EAAE,cAAc;IAC1B,SAAS,EAAE,QAAQ;IAEnB,yBAAyB;IACzB,uDAAuD;IACvD,UAAU,EAAE,MAAM;IAClB,YAAY,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC;IACnD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,kEAAkE;aAChF;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,wEAAwE;gBACrF,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;aAC1C;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG;gBACZ,WAAW,EAAE,6EAA6E;aAC3F;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,2BAA2B;aACzC;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;KAC9B;CACF,CAAC;AAEF;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY,EAAE,IAAY;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAE9B,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,MAAM,CAAC;IAEtC,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAO,WAAW;YACtC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAO,YAAY;YACvC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe;aAC5C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa;IACvD,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IAErB,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAE9B,cAAc;IACd,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAExB,uBAAuB;IACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9B,2CAA2C;IAC3C,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9B,sBAAsB;IACtB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnD,YAAY,EAAE,CAAC;gBACf,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,IAAI,SAAS,GAAG,GAAG;QAAE,OAAO,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAEpD,iDAAiD;IACjD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,KAAa,EAAE,MAAW,EAAE,YAAsB;IACjF,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACrB,QAAQ,GAAG,KAAK,CAAC;gBACjB,YAAY,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,OAAO,CAAC,IAAS,EAAE,OAA0B;IACjE,MAAM,EACJ,KAAK,EACL,MAAM,EACN,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAChD,SAAS,GAAG,GAAG,EACf,KAAK,GAAG,EAAE,EACX,GAAG,IAAI,CAAC;IAET,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,IAAA,oCAAiB,EAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,IAAA,oCAAiB,EAAC,sCAAsC,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAsB,EAAC,OAAO,CAAC,CAAC;QACrD,MAAM,UAAU,GAAU,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAU,EAAE,CAAC;QAE/B,yCAAyC;QACzC,mEAAmE;QACnE,MAAM,gBAAgB,GAAG,CAAC,MAAgB,EAAE,UAAkB,EAAU,EAAE;YACxE,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,UAAU,EAAE,CAAC,CAAC;YACpE,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,wBAAwB;QAC1D,CAAC,CAAC;QAEF,uDAAuD;QACvD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;YACxD,IAAI,CAAC;gBACH,+CAA+C;gBAC/C,MAAM,WAAW,GAAG,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBAE3D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,EAAE;oBAC3D,MAAM,EAAE;wBACN,aAAa,EAAE,WAAW;wBAC1B,aAAa,EAAE,KAAK,GAAG,CAAC,EAAE,kCAAkC;wBAC5D,cAAc,EAAE,UAAU,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC;qBAClF;oBACD,OAAO,EAAE,KAAK,CAAC,8BAA8B;iBAC9C,CAAC,CAAC;gBAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC1C,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM;qBACvC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE;oBACnB,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;oBACtF,OAAO;wBACL,GAAG,MAAM;wBACT,gBAAgB,EAAE,KAAK;wBACvB,cAAc,EAAE,YAAY;wBAC5B,MAAM,EAAE,KAAK;qBACd,CAAC;gBACJ,CAAC,CAAC;qBACD,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,IAAI,SAAS,CAAC;qBACnD,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC;qBACjE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAEnB,OAAO;oBACL,KAAK;oBACL,OAAO,EAAE,aAAa;oBACtB,KAAK,EAAE,aAAa,CAAC,MAAM;iBAC5B,CAAC;YACJ,CAAC;YAAC,OAAO,UAAe,EAAE,CAAC;gBACzB,4EAA4E;gBAC5E,OAAO;oBACL,KAAK;oBACL,OAAO,EAAE,EAAE;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,UAAU,CAAC,OAAO;iBAC1B,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAExD,oBAAoB;QACpB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,YAAY,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;wBACvC,MAAM,EAAE,CAAC,CAAC,MAAM;wBAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM;wBACnC,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,WAAW,EAAE,CAAC,CAAC,WAAW;wBAC1B,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG;wBAC3D,aAAa,EAAE,CAAC,CAAC,cAAc;wBAC/B,OAAO,EAAE,CAAC,CAAC,cAAc;wBACzB,OAAO,EAAE,CAAC,CAAC,cAAc;qBAC1B,CAAC,CAAC;iBACJ,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACxB,YAAY,CAAC,IAAI,CAAC;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAEnE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;QACvC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvE,OAAO,IAAA,sCAAmB,EAAC;YACzB,KAAK;YACL,SAAS;YACT,OAAO,EAAE;gBACP,aAAa,EAAE,YAAY;gBAC3B,eAAe,EAAE,cAAc;gBAC/B,mBAAmB,EAAE,iBAAiB;aACvC;YACD,gBAAgB,EAAE,YAAY;YAC9B,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBACpD,KAAK,EAAE,CAAC,CAAC,MAAM;gBACf,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM;gBACnC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG;gBAC3D,aAAa,EAAE,CAAC,CAAC,cAAc;aAChC,CAAC,CAAC;YACH,OAAO,EAAE,YAAY,GAAG,CAAC;gBACvB,CAAC,CAAC,SAAS,YAAY,iBAAiB,KAAK,YAAY,iBAAiB,WAAW;gBACrF,CAAC,CAAC,yBAAyB,KAAK,qBAAqB,SAAS,EAAE;SACnE,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,IAAA,oCAAiB,EAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAEY,QAAA,OAAO,GAAG,OAAO,CAAC;AAClB,QAAA,MAAM,GAAG,yBAAyB,CAAC"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* snow_search_artifacts - Search across development artifacts
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Search ServiceNow development artifacts (widgets, pages, scripts, flows, etc.)
|
|
5
|
+
* with parallel queries and optional table search.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This tool searches DEVELOPMENT ARTIFACTS, not data tables.
|
|
8
|
+
* For searching data in tables, use snow_query_table or snow_fuzzy_search.
|
|
6
9
|
*/
|
|
7
10
|
import { MCPToolDefinition, ServiceNowContext, ToolResult } from '../../shared/types.js';
|
|
8
11
|
export declare const toolDefinition: MCPToolDefinition;
|
|
9
12
|
export declare function execute(args: any, context: ServiceNowContext): Promise<ToolResult>;
|
|
13
|
+
export declare const toolDefinitionAlias: MCPToolDefinition;
|
|
10
14
|
export declare const version = "1.0.0";
|
|
11
15
|
export declare const author = "Snow-Flow SDK Migration";
|
|
12
16
|
//# sourceMappingURL=snow_comprehensive_search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snow_comprehensive_search.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"snow_comprehensive_search.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIzF,eAAO,MAAM,cAAc,EAAE,iBAsD5B,CAAC;AA+MF,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6ExF;AAGD,eAAO,MAAM,mBAAmB,EAAE,iBAIjC,CAAC;AAEF,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,MAAM,4BAA4B,CAAC"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* snow_search_artifacts - Search across development artifacts
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Search ServiceNow development artifacts (widgets, pages, scripts, flows, etc.)
|
|
6
|
+
* with parallel queries and optional table search.
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This tool searches DEVELOPMENT ARTIFACTS, not data tables.
|
|
9
|
+
* For searching data in tables, use snow_query_table or snow_fuzzy_search.
|
|
7
10
|
*/
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.author = exports.version = exports.toolDefinition = void 0;
|
|
12
|
+
exports.author = exports.version = exports.toolDefinitionAlias = exports.toolDefinition = void 0;
|
|
10
13
|
exports.execute = execute;
|
|
11
14
|
const auth_js_1 = require("../../shared/auth.js");
|
|
12
15
|
const error_handler_js_1 = require("../../shared/error-handler.js");
|
|
13
16
|
exports.toolDefinition = {
|
|
14
|
-
name: '
|
|
15
|
-
description: 'Search
|
|
17
|
+
name: 'snow_search_artifacts',
|
|
18
|
+
description: 'Search ServiceNow development artifacts (widgets, pages, scripts, flows, UI actions, client scripts). For data/table searches, use snow_query_table or snow_fuzzy_search instead.',
|
|
16
19
|
// Metadata for tool discovery (not sent to LLM)
|
|
17
20
|
category: 'core-operations',
|
|
18
21
|
subcategory: 'search',
|
|
19
|
-
use_cases: ['search', '
|
|
22
|
+
use_cases: ['artifact-search', 'development-search', 'find-widget', 'find-script'],
|
|
20
23
|
complexity: 'intermediate',
|
|
21
24
|
frequency: 'high',
|
|
22
25
|
// Permission enforcement
|
|
@@ -28,100 +31,286 @@ exports.toolDefinition = {
|
|
|
28
31
|
properties: {
|
|
29
32
|
query: {
|
|
30
33
|
type: 'string',
|
|
31
|
-
description: 'Search query
|
|
34
|
+
description: 'Search query - matches against name, title, and description fields'
|
|
32
35
|
},
|
|
33
36
|
types: {
|
|
34
37
|
type: 'array',
|
|
35
38
|
items: {
|
|
36
39
|
type: 'string',
|
|
37
|
-
enum: [
|
|
40
|
+
enum: [
|
|
41
|
+
'widget', 'page', 'flow', 'script_include', 'business_rule',
|
|
42
|
+
'client_script', 'ui_action', 'ui_policy', 'ui_page',
|
|
43
|
+
'scheduled_job', 'all'
|
|
44
|
+
]
|
|
38
45
|
},
|
|
39
|
-
description: 'Artifact types to search',
|
|
46
|
+
description: 'Artifact types to search (default: all)',
|
|
40
47
|
default: ['all']
|
|
41
48
|
},
|
|
42
49
|
limit: {
|
|
43
50
|
type: 'number',
|
|
44
|
-
description: 'Maximum results per type',
|
|
51
|
+
description: 'Maximum results per artifact type (default: 10)',
|
|
45
52
|
default: 10,
|
|
46
53
|
minimum: 1,
|
|
47
|
-
maximum:
|
|
54
|
+
maximum: 50
|
|
48
55
|
},
|
|
49
56
|
include_inactive: {
|
|
50
57
|
type: 'boolean',
|
|
51
|
-
description: 'Include inactive/
|
|
58
|
+
description: 'Include inactive/disabled artifacts',
|
|
59
|
+
default: false
|
|
60
|
+
},
|
|
61
|
+
search_tables: {
|
|
62
|
+
type: 'boolean',
|
|
63
|
+
description: 'Also search sys_db_object for matching table definitions (slower)',
|
|
52
64
|
default: false
|
|
53
65
|
}
|
|
54
66
|
},
|
|
55
67
|
required: ['query']
|
|
56
68
|
}
|
|
57
69
|
};
|
|
58
|
-
const
|
|
59
|
-
widget: {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
const ARTIFACT_TABLES = {
|
|
71
|
+
widget: {
|
|
72
|
+
table: 'sp_widget',
|
|
73
|
+
name_field: 'id',
|
|
74
|
+
title_field: 'name',
|
|
75
|
+
active_field: 'active',
|
|
76
|
+
description: 'Service Portal widgets',
|
|
77
|
+
extra_fields: ['template', 'css']
|
|
78
|
+
},
|
|
79
|
+
page: {
|
|
80
|
+
table: 'sp_page',
|
|
81
|
+
name_field: 'id',
|
|
82
|
+
title_field: 'title',
|
|
83
|
+
active_field: 'active',
|
|
84
|
+
description: 'Service Portal pages'
|
|
85
|
+
},
|
|
86
|
+
flow: {
|
|
87
|
+
table: 'sys_hub_flow',
|
|
88
|
+
name_field: 'name',
|
|
89
|
+
active_field: 'active',
|
|
90
|
+
description: 'Flow Designer flows'
|
|
91
|
+
},
|
|
92
|
+
script_include: {
|
|
93
|
+
table: 'sys_script_include',
|
|
94
|
+
name_field: 'name',
|
|
95
|
+
active_field: 'active',
|
|
96
|
+
description: 'Script Includes (reusable server scripts)'
|
|
97
|
+
},
|
|
98
|
+
business_rule: {
|
|
99
|
+
table: 'sys_script',
|
|
100
|
+
name_field: 'name',
|
|
101
|
+
active_field: 'active',
|
|
102
|
+
description: 'Business Rules',
|
|
103
|
+
extra_fields: ['collection', 'when']
|
|
104
|
+
},
|
|
105
|
+
client_script: {
|
|
106
|
+
table: 'sys_script_client',
|
|
107
|
+
name_field: 'name',
|
|
108
|
+
active_field: 'active',
|
|
109
|
+
description: 'Client Scripts',
|
|
110
|
+
extra_fields: ['table', 'type']
|
|
111
|
+
},
|
|
112
|
+
ui_action: {
|
|
113
|
+
table: 'sys_ui_action',
|
|
114
|
+
name_field: 'name',
|
|
115
|
+
active_field: 'active',
|
|
116
|
+
description: 'UI Actions (buttons, links, context menus)',
|
|
117
|
+
extra_fields: ['table', 'action_name']
|
|
118
|
+
},
|
|
119
|
+
ui_policy: {
|
|
120
|
+
table: 'sys_ui_policy',
|
|
121
|
+
name_field: 'short_description',
|
|
122
|
+
active_field: 'active',
|
|
123
|
+
description: 'UI Policies',
|
|
124
|
+
extra_fields: ['table', 'conditions']
|
|
125
|
+
},
|
|
126
|
+
ui_page: {
|
|
127
|
+
table: 'sys_ui_page',
|
|
128
|
+
name_field: 'name',
|
|
129
|
+
active_field: 'active',
|
|
130
|
+
description: 'UI Pages (classic UI)',
|
|
131
|
+
extra_fields: ['category']
|
|
132
|
+
},
|
|
133
|
+
scheduled_job: {
|
|
134
|
+
table: 'sysauto_script',
|
|
135
|
+
name_field: 'name',
|
|
136
|
+
active_field: 'active',
|
|
137
|
+
description: 'Scheduled Jobs'
|
|
138
|
+
}
|
|
64
139
|
};
|
|
140
|
+
/**
|
|
141
|
+
* Search a single artifact type with timeout handling
|
|
142
|
+
*/
|
|
143
|
+
async function searchArtifactType(client, type, config, query, limit, includeInactive) {
|
|
144
|
+
try {
|
|
145
|
+
// Build search query for name, title, and description
|
|
146
|
+
const searchFields = [config.name_field];
|
|
147
|
+
if (config.title_field)
|
|
148
|
+
searchFields.push(config.title_field);
|
|
149
|
+
searchFields.push('description');
|
|
150
|
+
const searchConditions = searchFields
|
|
151
|
+
.map(field => `${field}LIKE${query}`)
|
|
152
|
+
.join('^NQ'); // NQ = OR in ServiceNow
|
|
153
|
+
// Add active filter if not including inactive
|
|
154
|
+
const activeCondition = (!includeInactive && config.active_field)
|
|
155
|
+
? `^${config.active_field}=true`
|
|
156
|
+
: '';
|
|
157
|
+
const fullQuery = searchConditions + activeCondition;
|
|
158
|
+
// Build fields list
|
|
159
|
+
const fields = ['sys_id', ...searchFields, 'sys_created_on', 'sys_updated_on'];
|
|
160
|
+
if (config.active_field)
|
|
161
|
+
fields.push(config.active_field);
|
|
162
|
+
if (config.extra_fields)
|
|
163
|
+
fields.push(...config.extra_fields);
|
|
164
|
+
const response = await client.get(`/api/now/table/${config.table}`, {
|
|
165
|
+
params: {
|
|
166
|
+
sysparm_query: fullQuery,
|
|
167
|
+
sysparm_limit: limit,
|
|
168
|
+
sysparm_fields: [...new Set(fields)].join(',')
|
|
169
|
+
},
|
|
170
|
+
timeout: 10000
|
|
171
|
+
});
|
|
172
|
+
if (!response.data.result || response.data.result.length === 0) {
|
|
173
|
+
return { type, table: config.table, description: config.description, count: 0, artifacts: [] };
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
type,
|
|
177
|
+
table: config.table,
|
|
178
|
+
description: config.description,
|
|
179
|
+
count: response.data.result.length,
|
|
180
|
+
artifacts: response.data.result.map((r) => ({
|
|
181
|
+
sys_id: r.sys_id,
|
|
182
|
+
name: r[config.name_field],
|
|
183
|
+
title: config.title_field ? r[config.title_field] : undefined,
|
|
184
|
+
description: r.description,
|
|
185
|
+
active: config.active_field ? r[config.active_field] === 'true' : undefined,
|
|
186
|
+
created: r.sys_created_on,
|
|
187
|
+
updated: r.sys_updated_on,
|
|
188
|
+
// Include extra fields if present
|
|
189
|
+
...(config.extra_fields?.reduce((acc, field) => {
|
|
190
|
+
if (r[field])
|
|
191
|
+
acc[field] = r[field];
|
|
192
|
+
return acc;
|
|
193
|
+
}, {}) || {})
|
|
194
|
+
}))
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
return {
|
|
199
|
+
type,
|
|
200
|
+
table: config.table,
|
|
201
|
+
description: config.description,
|
|
202
|
+
count: 0,
|
|
203
|
+
artifacts: [],
|
|
204
|
+
error: error.message
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Search for table definitions matching the query
|
|
210
|
+
*/
|
|
211
|
+
async function searchTables(client, query, limit) {
|
|
212
|
+
try {
|
|
213
|
+
const response = await client.get('/api/now/table/sys_db_object', {
|
|
214
|
+
params: {
|
|
215
|
+
sysparm_query: `nameLIKE${query}^ORlabelLIKE${query}`,
|
|
216
|
+
sysparm_limit: limit,
|
|
217
|
+
sysparm_fields: 'sys_id,name,label,super_class,is_extendable'
|
|
218
|
+
},
|
|
219
|
+
timeout: 15000
|
|
220
|
+
});
|
|
221
|
+
if (!response.data.result || response.data.result.length === 0) {
|
|
222
|
+
return { type: 'table', table: 'sys_db_object', description: 'Table definitions', count: 0, artifacts: [] };
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
type: 'table',
|
|
226
|
+
table: 'sys_db_object',
|
|
227
|
+
description: 'Table definitions',
|
|
228
|
+
count: response.data.result.length,
|
|
229
|
+
artifacts: response.data.result.map((r) => ({
|
|
230
|
+
sys_id: r.sys_id,
|
|
231
|
+
name: r.name,
|
|
232
|
+
label: r.label,
|
|
233
|
+
super_class: r.super_class?.display_value || r.super_class,
|
|
234
|
+
is_extendable: r.is_extendable === 'true'
|
|
235
|
+
}))
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
return {
|
|
240
|
+
type: 'table',
|
|
241
|
+
table: 'sys_db_object',
|
|
242
|
+
description: 'Table definitions',
|
|
243
|
+
count: 0,
|
|
244
|
+
artifacts: [],
|
|
245
|
+
error: error.message
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
65
249
|
async function execute(args, context) {
|
|
66
|
-
const { query, types = ['all'], limit = 10, include_inactive = false } = args;
|
|
250
|
+
const { query, types = ['all'], limit = 10, include_inactive = false, search_tables = false } = args;
|
|
251
|
+
if (!query || query.trim().length === 0) {
|
|
252
|
+
return (0, error_handler_js_1.createErrorResult)('Search query cannot be empty');
|
|
253
|
+
}
|
|
67
254
|
try {
|
|
68
255
|
const client = await (0, auth_js_1.getAuthenticatedClient)(context);
|
|
69
|
-
// Determine which
|
|
256
|
+
// Determine which artifact types to search
|
|
70
257
|
const searchTypes = types.includes('all')
|
|
71
|
-
? Object.keys(
|
|
72
|
-
: types;
|
|
73
|
-
|
|
258
|
+
? Object.keys(ARTIFACT_TABLES)
|
|
259
|
+
: types.filter((t) => t !== 'all' && ARTIFACT_TABLES[t]);
|
|
260
|
+
// Execute all searches in parallel
|
|
261
|
+
const searchPromises = searchTypes.map((type) => searchArtifactType(client, type, ARTIFACT_TABLES[type], query, limit, include_inactive));
|
|
262
|
+
// Optionally search table definitions
|
|
263
|
+
if (search_tables) {
|
|
264
|
+
searchPromises.push(searchTables(client, query, limit));
|
|
265
|
+
}
|
|
266
|
+
const results = await Promise.all(searchPromises);
|
|
267
|
+
// Aggregate results
|
|
268
|
+
const found = results.filter(r => r.count > 0);
|
|
269
|
+
const errors = results.filter(r => r.error);
|
|
270
|
+
const totalFound = found.reduce((sum, r) => sum + r.count, 0);
|
|
271
|
+
const response = {
|
|
74
272
|
query,
|
|
75
|
-
|
|
76
|
-
|
|
273
|
+
summary: {
|
|
274
|
+
total_found: totalFound,
|
|
275
|
+
artifact_types_searched: searchTypes.length + (search_tables ? 1 : 0),
|
|
276
|
+
artifact_types_with_results: found.length,
|
|
277
|
+
include_inactive
|
|
278
|
+
},
|
|
279
|
+
found: found.map(r => ({
|
|
280
|
+
type: r.type,
|
|
281
|
+
table: r.table,
|
|
282
|
+
description: r.description,
|
|
283
|
+
count: r.count,
|
|
284
|
+
artifacts: r.artifacts
|
|
285
|
+
})),
|
|
286
|
+
message: totalFound > 0
|
|
287
|
+
? `Found ${totalFound} artifacts matching "${query}" across ${found.length} type(s)`
|
|
288
|
+
: `No artifacts found matching "${query}"`
|
|
77
289
|
};
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
.map(field => `${field}LIKE${query}`)
|
|
90
|
-
.join('^OR');
|
|
91
|
-
const activeQuery = include_inactive ? '' : '^active=true';
|
|
92
|
-
const fullQuery = searchQuery + activeQuery;
|
|
93
|
-
// Execute search
|
|
94
|
-
const response = await client.get(`/api/now/table/${config.table}`, {
|
|
95
|
-
params: {
|
|
96
|
-
sysparm_query: fullQuery,
|
|
97
|
-
sysparm_limit: limit,
|
|
98
|
-
sysparm_fields: `sys_id,${searchFields.join(',')},sys_created_on,sys_updated_on`
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
// Add results
|
|
102
|
-
if (response.data.result.length > 0) {
|
|
103
|
-
results.found.push({
|
|
104
|
-
type,
|
|
105
|
-
table: config.table,
|
|
106
|
-
count: response.data.result.length,
|
|
107
|
-
artifacts: response.data.result.map((r) => ({
|
|
108
|
-
sys_id: r.sys_id,
|
|
109
|
-
name: r[config.name_field],
|
|
110
|
-
title: config.title_field ? r[config.title_field] : undefined,
|
|
111
|
-
description: r.description,
|
|
112
|
-
created: r.sys_created_on,
|
|
113
|
-
updated: r.sys_updated_on
|
|
114
|
-
}))
|
|
115
|
-
});
|
|
116
|
-
results.total += response.data.result.length;
|
|
117
|
-
}
|
|
290
|
+
// Add errors if any
|
|
291
|
+
if (errors.length > 0) {
|
|
292
|
+
response.errors = errors.map(e => ({
|
|
293
|
+
type: e.type,
|
|
294
|
+
table: e.table,
|
|
295
|
+
error: e.error
|
|
296
|
+
}));
|
|
297
|
+
}
|
|
298
|
+
// Add guidance for table searches
|
|
299
|
+
if (!search_tables && totalFound === 0) {
|
|
300
|
+
response.suggestion = 'No artifacts found. Try search_tables=true to also search table definitions, or use snow_query_table for data searches.';
|
|
118
301
|
}
|
|
119
|
-
return (0, error_handler_js_1.createSuccessResult)(
|
|
302
|
+
return (0, error_handler_js_1.createSuccessResult)(response);
|
|
120
303
|
}
|
|
121
304
|
catch (error) {
|
|
122
|
-
return (0, error_handler_js_1.createErrorResult)(error.message);
|
|
305
|
+
return (0, error_handler_js_1.createErrorResult)(`Artifact search failed: ${error.message}`);
|
|
123
306
|
}
|
|
124
307
|
}
|
|
308
|
+
// Keep old name as alias for backwards compatibility
|
|
309
|
+
exports.toolDefinitionAlias = {
|
|
310
|
+
...exports.toolDefinition,
|
|
311
|
+
name: 'snow_comprehensive_search',
|
|
312
|
+
description: '[DEPRECATED - use snow_search_artifacts] ' + exports.toolDefinition.description
|
|
313
|
+
};
|
|
125
314
|
exports.version = '1.0.0';
|
|
126
315
|
exports.author = 'Snow-Flow SDK Migration';
|
|
127
316
|
//# sourceMappingURL=snow_comprehensive_search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snow_comprehensive_search.js","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"snow_comprehensive_search.js","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/operations/snow_comprehensive_search.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Discover platform development tables categorized by type
|
|
5
5
|
* (UI, script, policy, security, system).
|
|
6
|
+
*
|
|
7
|
+
* Optimized with:
|
|
8
|
+
* - Parallel API calls for better performance
|
|
9
|
+
* - Per-category timeout handling
|
|
10
|
+
* - Pre-cached common table definitions
|
|
11
|
+
* - Graceful degradation on slow queries
|
|
6
12
|
*/
|
|
7
13
|
import { MCPToolDefinition, ServiceNowContext, ToolResult } from '../../shared/types.js';
|
|
8
14
|
export declare const toolDefinition: MCPToolDefinition;
|
package/dist/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snow_discover_platform_tables.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"snow_discover_platform_tables.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIzF,eAAO,MAAM,cAAc,EAAE,iBAwC5B,CAAC;AA0KF,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2FxF;AAED,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,MAAM,4BAA4B,CAAC"}
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Discover platform development tables categorized by type
|
|
6
6
|
* (UI, script, policy, security, system).
|
|
7
|
+
*
|
|
8
|
+
* Optimized with:
|
|
9
|
+
* - Parallel API calls for better performance
|
|
10
|
+
* - Per-category timeout handling
|
|
11
|
+
* - Pre-cached common table definitions
|
|
12
|
+
* - Graceful degradation on slow queries
|
|
7
13
|
*/
|
|
8
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
15
|
exports.author = exports.version = exports.toolDefinition = void 0;
|
|
@@ -12,7 +18,7 @@ const auth_js_1 = require("../../shared/auth.js");
|
|
|
12
18
|
const error_handler_js_1 = require("../../shared/error-handler.js");
|
|
13
19
|
exports.toolDefinition = {
|
|
14
20
|
name: 'snow_discover_platform_tables',
|
|
15
|
-
description: 'Discover platform development tables by category (ui, script, policy, action)',
|
|
21
|
+
description: 'Discover platform development tables by category (ui, script, policy, action, security, system). Optimized for fast parallel queries with timeout handling.',
|
|
16
22
|
// Metadata for tool discovery (not sent to LLM)
|
|
17
23
|
category: 'core-operations',
|
|
18
24
|
subcategory: 'discovery',
|
|
@@ -28,14 +34,24 @@ exports.toolDefinition = {
|
|
|
28
34
|
properties: {
|
|
29
35
|
category: {
|
|
30
36
|
type: 'string',
|
|
31
|
-
enum: ['all', 'ui', 'script', 'policy', 'action', 'security', 'system'],
|
|
37
|
+
enum: ['all', 'ui', 'script', 'policy', 'action', 'security', 'system', 'itsm', 'cmdb'],
|
|
32
38
|
description: 'Filter by table category',
|
|
33
39
|
default: 'all'
|
|
34
40
|
},
|
|
35
41
|
limit: {
|
|
36
42
|
type: 'number',
|
|
37
|
-
description: 'Maximum results per category',
|
|
38
|
-
default:
|
|
43
|
+
description: 'Maximum results per category (default: 25)',
|
|
44
|
+
default: 25
|
|
45
|
+
},
|
|
46
|
+
use_cache: {
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
description: 'Use pre-defined common tables instead of querying (faster, but less complete)',
|
|
49
|
+
default: false
|
|
50
|
+
},
|
|
51
|
+
timeout: {
|
|
52
|
+
type: 'number',
|
|
53
|
+
description: 'Timeout per category in milliseconds (default: 10000)',
|
|
54
|
+
default: 10000
|
|
39
55
|
}
|
|
40
56
|
}
|
|
41
57
|
}
|
|
@@ -44,80 +60,221 @@ const TABLE_CATEGORIES = [
|
|
|
44
60
|
{
|
|
45
61
|
category: 'ui',
|
|
46
62
|
query: 'nameSTARTSWITHsys_ui^ORnameSTARTSWITHsp_',
|
|
47
|
-
description: 'UI pages, forms, lists, and portal widgets'
|
|
63
|
+
description: 'UI pages, forms, lists, and portal widgets',
|
|
64
|
+
commonTables: [
|
|
65
|
+
'sys_ui_page', 'sys_ui_script', 'sys_ui_macro', 'sys_ui_list',
|
|
66
|
+
'sys_ui_form', 'sys_ui_section', 'sys_ui_element', 'sys_ui_view',
|
|
67
|
+
'sp_widget', 'sp_page', 'sp_portal', 'sp_instance', 'sp_css',
|
|
68
|
+
'sp_header_footer', 'sp_angular_provider'
|
|
69
|
+
]
|
|
48
70
|
},
|
|
49
71
|
{
|
|
50
72
|
category: 'script',
|
|
51
|
-
query: 'nameSTARTSWITHsys_script^
|
|
52
|
-
description: 'Scripts, script includes, and processors'
|
|
73
|
+
query: 'nameSTARTSWITHsys_script^ORnameINsys_script_include,sys_processor',
|
|
74
|
+
description: 'Scripts, script includes, and processors',
|
|
75
|
+
commonTables: [
|
|
76
|
+
'sys_script', 'sys_script_include', 'sys_script_client',
|
|
77
|
+
'sys_script_ajax', 'sys_processor', 'sys_script_fix'
|
|
78
|
+
]
|
|
53
79
|
},
|
|
54
80
|
{
|
|
55
81
|
category: 'policy',
|
|
56
|
-
query: '
|
|
57
|
-
description: 'UI policies and data policies'
|
|
82
|
+
query: 'nameINsys_ui_policy,sys_data_policy,sys_ui_policy_action,sys_data_policy_rule',
|
|
83
|
+
description: 'UI policies and data policies',
|
|
84
|
+
commonTables: [
|
|
85
|
+
'sys_ui_policy', 'sys_ui_policy_action', 'sys_data_policy', 'sys_data_policy_rule'
|
|
86
|
+
]
|
|
58
87
|
},
|
|
59
88
|
{
|
|
60
89
|
category: 'action',
|
|
61
|
-
query: '
|
|
62
|
-
description: 'UI actions and context menus'
|
|
90
|
+
query: 'nameINsys_ui_action,sys_ui_context_menu,sys_ui_related_list_entry',
|
|
91
|
+
description: 'UI actions and context menus',
|
|
92
|
+
commonTables: [
|
|
93
|
+
'sys_ui_action', 'sys_ui_context_menu', 'sys_ui_related_list_entry'
|
|
94
|
+
]
|
|
63
95
|
},
|
|
64
96
|
{
|
|
65
97
|
category: 'security',
|
|
66
|
-
query: 'nameSTARTSWITHsys_security^
|
|
67
|
-
description: 'Security policies and
|
|
98
|
+
query: 'nameSTARTSWITHsys_security^ORnameINsys_user_role,sys_user_group,sys_acl',
|
|
99
|
+
description: 'Security policies, roles, and ACLs',
|
|
100
|
+
commonTables: [
|
|
101
|
+
'sys_security_acl', 'sys_security_acl_role', 'sys_user_role',
|
|
102
|
+
'sys_user_group', 'sys_user_role_contains', 'sys_acl'
|
|
103
|
+
]
|
|
68
104
|
},
|
|
69
105
|
{
|
|
70
106
|
category: 'system',
|
|
71
|
-
query: '
|
|
72
|
-
description: 'System tables for schema and data'
|
|
107
|
+
query: 'nameINsys_dictionary,sys_db_object,sys_choice,sys_documentation,sys_glide_object',
|
|
108
|
+
description: 'System tables for schema and data',
|
|
109
|
+
commonTables: [
|
|
110
|
+
'sys_dictionary', 'sys_db_object', 'sys_choice', 'sys_documentation',
|
|
111
|
+
'sys_glide_object', 'sys_number', 'sys_properties'
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
category: 'itsm',
|
|
116
|
+
query: 'nameINincident,problem,change_request,task,sc_request,sc_req_item,sc_task',
|
|
117
|
+
description: 'ITSM tables (incidents, problems, changes, requests)',
|
|
118
|
+
commonTables: [
|
|
119
|
+
'incident', 'problem', 'change_request', 'task', 'sc_request',
|
|
120
|
+
'sc_req_item', 'sc_task', 'sn_hr_core_case', 'kb_knowledge'
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
category: 'cmdb',
|
|
125
|
+
query: 'nameSTARTSWITHcmdb^ORnameSTARTSWITHcmdb_ci',
|
|
126
|
+
description: 'CMDB configuration items and relationships',
|
|
127
|
+
commonTables: [
|
|
128
|
+
'cmdb', 'cmdb_ci', 'cmdb_ci_server', 'cmdb_ci_computer',
|
|
129
|
+
'cmdb_ci_service', 'cmdb_ci_appl', 'cmdb_rel_ci', 'cmdb_ci_db_instance'
|
|
130
|
+
]
|
|
73
131
|
}
|
|
74
132
|
];
|
|
133
|
+
/**
|
|
134
|
+
* Query a single category with timeout handling
|
|
135
|
+
*/
|
|
136
|
+
async function queryCategory(client, cat, limit, timeout) {
|
|
137
|
+
try {
|
|
138
|
+
const controller = new AbortController();
|
|
139
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
140
|
+
const response = await client.get('/api/now/table/sys_db_object', {
|
|
141
|
+
params: {
|
|
142
|
+
sysparm_query: cat.query,
|
|
143
|
+
sysparm_limit: limit,
|
|
144
|
+
sysparm_fields: 'sys_id,name,label,super_class,is_extendable'
|
|
145
|
+
},
|
|
146
|
+
signal: controller.signal,
|
|
147
|
+
timeout: timeout
|
|
148
|
+
});
|
|
149
|
+
clearTimeout(timeoutId);
|
|
150
|
+
if (response.data.result && response.data.result.length > 0) {
|
|
151
|
+
return {
|
|
152
|
+
category: cat.category,
|
|
153
|
+
description: cat.description,
|
|
154
|
+
count: response.data.result.length,
|
|
155
|
+
tables: response.data.result.map((table) => ({
|
|
156
|
+
name: table.name,
|
|
157
|
+
label: table.label,
|
|
158
|
+
super_class: table.super_class?.value || table.super_class,
|
|
159
|
+
is_extendable: table.is_extendable === 'true',
|
|
160
|
+
sys_id: table.sys_id
|
|
161
|
+
}))
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
category: cat.category,
|
|
166
|
+
description: cat.description,
|
|
167
|
+
count: 0,
|
|
168
|
+
tables: []
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
// Check if it was a timeout/abort
|
|
173
|
+
if (error.name === 'AbortError' || error.code === 'ECONNABORTED' || error.message?.includes('timeout')) {
|
|
174
|
+
return {
|
|
175
|
+
category: cat.category,
|
|
176
|
+
description: cat.description,
|
|
177
|
+
count: 0,
|
|
178
|
+
tables: [],
|
|
179
|
+
timedOut: true,
|
|
180
|
+
error: `Query timed out after ${timeout}ms`
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
category: cat.category,
|
|
185
|
+
description: cat.description,
|
|
186
|
+
count: 0,
|
|
187
|
+
tables: [],
|
|
188
|
+
error: error.message
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get cached table definitions (fast mode)
|
|
194
|
+
*/
|
|
195
|
+
function getCachedTables(categories) {
|
|
196
|
+
return categories.map(cat => ({
|
|
197
|
+
category: cat.category,
|
|
198
|
+
description: cat.description,
|
|
199
|
+
count: cat.commonTables?.length || 0,
|
|
200
|
+
tables: (cat.commonTables || []).map(name => ({
|
|
201
|
+
name,
|
|
202
|
+
label: name.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()),
|
|
203
|
+
cached: true
|
|
204
|
+
})),
|
|
205
|
+
cached: true
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
75
208
|
async function execute(args, context) {
|
|
76
|
-
const { category = 'all', limit =
|
|
209
|
+
const { category = 'all', limit = 25, use_cache = false, timeout = 10000 } = args;
|
|
77
210
|
try {
|
|
78
|
-
const client = await (0, auth_js_1.getAuthenticatedClient)(context);
|
|
79
|
-
const discoveredTables = [];
|
|
80
211
|
const categoriesToQuery = category === 'all'
|
|
81
212
|
? TABLE_CATEGORIES
|
|
82
213
|
: TABLE_CATEGORIES.filter(cat => cat.category === category);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
214
|
+
if (categoriesToQuery.length === 0) {
|
|
215
|
+
return (0, error_handler_js_1.createErrorResult)(`Unknown category: ${category}. Valid categories: all, ui, script, policy, action, security, system, itsm, cmdb`);
|
|
216
|
+
}
|
|
217
|
+
// Fast mode: return cached tables
|
|
218
|
+
if (use_cache) {
|
|
219
|
+
const cachedResults = getCachedTables(categoriesToQuery);
|
|
220
|
+
const totalTables = cachedResults.reduce((sum, cat) => sum + cat.count, 0);
|
|
221
|
+
return (0, error_handler_js_1.createSuccessResult)({
|
|
222
|
+
discovered: true,
|
|
223
|
+
platform_tables: cachedResults,
|
|
224
|
+
summary: {
|
|
225
|
+
total_tables: totalTables,
|
|
226
|
+
categories_found: cachedResults.length,
|
|
227
|
+
filter_applied: category,
|
|
228
|
+
mode: 'cached'
|
|
229
|
+
},
|
|
230
|
+
message: `Returned ${totalTables} common platform tables from cache (use use_cache=false for live query)`
|
|
90
231
|
});
|
|
91
|
-
if (response.data.result && response.data.result.length > 0) {
|
|
92
|
-
discoveredTables.push({
|
|
93
|
-
category: cat.category,
|
|
94
|
-
description: cat.description,
|
|
95
|
-
count: response.data.result.length,
|
|
96
|
-
tables: response.data.result.map((table) => ({
|
|
97
|
-
name: table.name,
|
|
98
|
-
label: table.label,
|
|
99
|
-
super_class: table.super_class,
|
|
100
|
-
is_extendable: table.is_extendable === 'true',
|
|
101
|
-
extension_model: table.extension_model,
|
|
102
|
-
sys_id: table.sys_id
|
|
103
|
-
}))
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
232
|
}
|
|
233
|
+
// Live query mode: parallel queries with timeout handling
|
|
234
|
+
const client = await (0, auth_js_1.getAuthenticatedClient)(context);
|
|
235
|
+
// Execute all category queries in parallel
|
|
236
|
+
const queryPromises = categoriesToQuery.map(cat => queryCategory(client, cat, limit, timeout));
|
|
237
|
+
const results = await Promise.all(queryPromises);
|
|
238
|
+
// Separate successful results from errors/timeouts
|
|
239
|
+
const successfulResults = results.filter(r => r.count > 0 || (!r.error && !r.timedOut));
|
|
240
|
+
const timedOutCategories = results.filter(r => r.timedOut);
|
|
241
|
+
const errorCategories = results.filter(r => r.error && !r.timedOut);
|
|
242
|
+
const discoveredTables = results.filter(r => r.count > 0);
|
|
107
243
|
const totalTables = discoveredTables.reduce((sum, cat) => sum + cat.count, 0);
|
|
108
|
-
|
|
244
|
+
const response = {
|
|
109
245
|
discovered: true,
|
|
110
246
|
platform_tables: discoveredTables,
|
|
111
247
|
summary: {
|
|
112
248
|
total_tables: totalTables,
|
|
113
249
|
categories_found: discoveredTables.length,
|
|
114
|
-
|
|
250
|
+
categories_queried: categoriesToQuery.length,
|
|
251
|
+
filter_applied: category,
|
|
252
|
+
mode: 'live'
|
|
115
253
|
},
|
|
116
254
|
message: `Discovered ${totalTables} platform development tables across ${discoveredTables.length} categories`
|
|
117
|
-
}
|
|
255
|
+
};
|
|
256
|
+
// Add warnings for timeouts
|
|
257
|
+
if (timedOutCategories.length > 0) {
|
|
258
|
+
response.warnings = {
|
|
259
|
+
timed_out: timedOutCategories.map(c => ({
|
|
260
|
+
category: c.category,
|
|
261
|
+
message: c.error
|
|
262
|
+
})),
|
|
263
|
+
suggestion: 'Use use_cache=true for instant results or increase timeout parameter'
|
|
264
|
+
};
|
|
265
|
+
response.message += ` (${timedOutCategories.length} categories timed out)`;
|
|
266
|
+
}
|
|
267
|
+
// Add errors
|
|
268
|
+
if (errorCategories.length > 0) {
|
|
269
|
+
response.errors = errorCategories.map(c => ({
|
|
270
|
+
category: c.category,
|
|
271
|
+
error: c.error
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
return (0, error_handler_js_1.createSuccessResult)(response);
|
|
118
275
|
}
|
|
119
276
|
catch (error) {
|
|
120
|
-
return (0, error_handler_js_1.createErrorResult)(error.message);
|
|
277
|
+
return (0, error_handler_js_1.createErrorResult)(`Platform table discovery failed: ${error.message}`);
|
|
121
278
|
}
|
|
122
279
|
}
|
|
123
280
|
exports.version = '1.0.0';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snow_discover_platform_tables.js","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"snow_discover_platform_tables.js","sourceRoot":"","sources":["../../../../../src/mcp/servicenow-mcp-unified/tools/platform/snow_discover_platform_tables.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "snow-flow",
|
|
3
|
-
"version": "8.39.
|
|
3
|
+
"version": "8.39.7",
|
|
4
4
|
"description": "ServiceNow development with SnowCode - 75+ LLM providers (Claude, GPT, Gemini, Llama, Mistral, DeepSeek, Groq, Ollama) • 395 Optimized Tools • 2 MCP Servers • Multi-agent orchestration • Use ANY AI coding assistant (ML tools moved to Enterprise)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "commonjs",
|