elasticsearch-mcp-vsee 0.5.9 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/build/tools/get-platform-breakdown.js +9 -5
  2. package/build/tools/get-platform-breakdown.js.map +1 -1
  3. package/build/tools/top-change.js +8 -4
  4. package/build/tools/top-change.js.map +1 -1
  5. package/package.json +1 -1
  6. package/build/tools/create-index.d.ts +0 -24
  7. package/build/tools/create-index.d.ts.map +0 -1
  8. package/build/tools/create-index.js +0 -140
  9. package/build/tools/create-index.js.map +0 -1
  10. package/build/tools/delete-document.d.ts +0 -32
  11. package/build/tools/delete-document.d.ts.map +0 -1
  12. package/build/tools/delete-document.js +0 -164
  13. package/build/tools/delete-document.js.map +0 -1
  14. package/build/tools/export-to-csv.d.ts +0 -37
  15. package/build/tools/export-to-csv.d.ts.map +0 -1
  16. package/build/tools/export-to-csv.js +0 -304
  17. package/build/tools/export-to-csv.js.map +0 -1
  18. package/build/tools/fetch-indices.d.ts +0 -30
  19. package/build/tools/fetch-indices.d.ts.map +0 -1
  20. package/build/tools/fetch-indices.js +0 -105
  21. package/build/tools/fetch-indices.js.map +0 -1
  22. package/build/tools/get-account-summary.d.ts +0 -31
  23. package/build/tools/get-account-summary.d.ts.map +0 -1
  24. package/build/tools/get-account-summary.js +0 -181
  25. package/build/tools/get-account-summary.js.map +0 -1
  26. package/build/tools/get-dashboard-summary.d.ts +0 -52
  27. package/build/tools/get-dashboard-summary.d.ts.map +0 -1
  28. package/build/tools/get-dashboard-summary.js +0 -277
  29. package/build/tools/get-dashboard-summary.js.map +0 -1
  30. package/build/tools/get-group-summary.d.ts +0 -44
  31. package/build/tools/get-group-summary.d.ts.map +0 -1
  32. package/build/tools/get-group-summary.js +0 -300
  33. package/build/tools/get-group-summary.js.map +0 -1
  34. package/build/tools/get-summary.d.ts +0 -52
  35. package/build/tools/get-summary.d.ts.map +0 -1
  36. package/build/tools/get-summary.js +0 -286
  37. package/build/tools/get-summary.js.map +0 -1
  38. package/build/tools/insert-data.d.ts +0 -25
  39. package/build/tools/insert-data.d.ts.map +0 -1
  40. package/build/tools/insert-data.js +0 -135
  41. package/build/tools/insert-data.js.map +0 -1
  42. package/build/tools/period-summary.d.ts +0 -36
  43. package/build/tools/period-summary.d.ts.map +0 -1
  44. package/build/tools/period-summary.js +0 -209
  45. package/build/tools/period-summary.js.map +0 -1
  46. package/build/tools/search-elasticsearch.d.ts +0 -45
  47. package/build/tools/search-elasticsearch.d.ts.map +0 -1
  48. package/build/tools/search-elasticsearch.js +0 -249
  49. package/build/tools/search-elasticsearch.js.map +0 -1
  50. package/build/tools/update-document.d.ts +0 -31
  51. package/build/tools/update-document.d.ts.map +0 -1
  52. package/build/tools/update-document.js +0 -163
  53. package/build/tools/update-document.js.map +0 -1
@@ -1,249 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SearchElasticsearchTool = void 0;
4
- const schemas_js_1 = require("../validation/schemas.js");
5
- const handlers_js_1 = require("../errors/handlers.js");
6
- class SearchElasticsearchTool {
7
- elasticsearch;
8
- logger;
9
- constructor(elasticsearch, logger) {
10
- this.elasticsearch = elasticsearch;
11
- this.logger = logger.child({ tool: 'search-elasticsearch' });
12
- }
13
- async execute(args) {
14
- try {
15
- const validatedArgs = schemas_js_1.SearchArgsSchema.parse(args);
16
- this.logger.info('Executing search', {
17
- index: validatedArgs.index,
18
- hasQuery: !!validatedArgs.query,
19
- size: validatedArgs.size,
20
- from: validatedArgs.from,
21
- hasSort: !!validatedArgs.sort,
22
- hasAggregations: !!validatedArgs.aggregations,
23
- hasHighlight: !!validatedArgs.highlight,
24
- });
25
- const client = this.elasticsearch.getClient();
26
- // Skip existence check for wildcard patterns (they may require cluster permissions)
27
- // The search itself will fail gracefully if no matching indices exist
28
- const isWildcardPattern = validatedArgs.index.includes('*') || validatedArgs.index.includes('?');
29
- if (!isWildcardPattern) {
30
- // Check if index exists (only for non-wildcard patterns)
31
- try {
32
- const indexExists = await client.indices.exists({
33
- index: validatedArgs.index,
34
- });
35
- if (!indexExists) {
36
- throw new handlers_js_1.NotFoundError(`Index '${validatedArgs.index}' does not exist`);
37
- }
38
- }
39
- catch (error) {
40
- // If existence check fails due to permissions, log and continue
41
- // The search will fail gracefully if the index doesn't exist
42
- this.logger.warn('Could not verify index existence (may require permissions), proceeding with search', {
43
- index: validatedArgs.index,
44
- error: error instanceof Error ? error.message : String(error),
45
- });
46
- }
47
- }
48
- // Build search request
49
- const searchRequest = this.buildSearchRequest(validatedArgs);
50
- // Execute search
51
- const response = await client.search(searchRequest);
52
- this.logger.info('Search executed successfully', {
53
- index: validatedArgs.index,
54
- totalHits: response.hits.total,
55
- took: response.took,
56
- hasAggregations: !!response.aggregations,
57
- });
58
- return this.formatSearchResponse(response);
59
- }
60
- catch (error) {
61
- if (error instanceof Error && error.name === 'ZodError') {
62
- throw new handlers_js_1.ValidationError('Invalid arguments for search_elasticsearch', {
63
- details: error.message,
64
- });
65
- }
66
- if (error instanceof handlers_js_1.ValidationError || error instanceof handlers_js_1.NotFoundError) {
67
- throw error;
68
- }
69
- this.logger.error('Failed to execute search', {}, error);
70
- throw new handlers_js_1.ElasticsearchError('Failed to execute search in Elasticsearch', error, { args });
71
- }
72
- }
73
- buildSearchRequest(args) {
74
- const request = {
75
- index: args.index,
76
- body: {},
77
- };
78
- // Add query
79
- if (args.query) {
80
- const sanitizedQuery = (0, schemas_js_1.sanitizeQuery)(args.query);
81
- this.validateQuery(sanitizedQuery || {});
82
- request.body.query = sanitizedQuery || { match_all: {} };
83
- }
84
- else {
85
- request.body.query = { match_all: {} };
86
- }
87
- // Add pagination with safeguard: cap at 50
88
- if (args.size !== undefined) {
89
- const cappedSize = Math.min(args.size, 50); // Safeguard: cap at 50
90
- request.body.size = Math.min(cappedSize, 10000); // Elasticsearch limit
91
- }
92
- if (args.from !== undefined) {
93
- request.body.from = args.from;
94
- }
95
- // Add sorting
96
- if (args.sort && args.sort.length > 0) {
97
- this.validateSort(args.sort);
98
- request.body.sort = args.sort;
99
- }
100
- // Add aggregations
101
- if (args.aggregations) {
102
- this.validateAggregations(args.aggregations);
103
- request.body.aggs = args.aggregations;
104
- }
105
- // Add highlighting
106
- if (args.highlight) {
107
- this.validateHighlight(args.highlight);
108
- request.body.highlight = args.highlight;
109
- }
110
- // Add source filtering
111
- if (args.source !== undefined) {
112
- if (Array.isArray(args.source)) {
113
- this.validateSourceFields(args.source);
114
- }
115
- request.body._source = args.source;
116
- }
117
- // Add timeout
118
- request.timeout = '30s';
119
- return request;
120
- }
121
- validateQuery(query) {
122
- // Check for script queries (potential security risk)
123
- const queryStr = JSON.stringify(query).toLowerCase();
124
- if (queryStr.includes('script_score') || queryStr.includes('script_query')) {
125
- throw new handlers_js_1.ValidationError('Script-based queries require additional security validation');
126
- }
127
- // Validate query depth
128
- this.validateQueryDepth(query, 0);
129
- // Check for wildcard queries on analyzed fields (performance concern)
130
- if (queryStr.includes('wildcard') || queryStr.includes('prefix')) {
131
- this.logger.warn('Wildcard/prefix queries detected - may impact performance', { query });
132
- }
133
- }
134
- validateSort(sort) {
135
- if (sort.length > 20) {
136
- throw new handlers_js_1.ValidationError('Too many sort criteria (max 20)');
137
- }
138
- for (const sortItem of sort) {
139
- if (typeof sortItem !== 'object' || Array.isArray(sortItem)) {
140
- throw new handlers_js_1.ValidationError('Each sort item must be an object');
141
- }
142
- // Check for script-based sorting
143
- const sortStr = JSON.stringify(sortItem).toLowerCase();
144
- if (sortStr.includes('_script')) {
145
- throw new handlers_js_1.ValidationError('Script-based sorting is not allowed');
146
- }
147
- }
148
- }
149
- validateAggregations(aggregations) {
150
- // Check for script-based aggregations - look for actual script objects, not just the substring
151
- const hasScriptAggregation = this.hasScriptInAggregations(aggregations);
152
- if (hasScriptAggregation) {
153
- throw new handlers_js_1.ValidationError('Script-based aggregations require additional security validation');
154
- }
155
- // Validate aggregation depth
156
- this.validateQueryDepth(aggregations, 0);
157
- // Check number of aggregations
158
- if (Object.keys(aggregations).length > 50) {
159
- throw new handlers_js_1.ValidationError('Too many aggregations (max 50)');
160
- }
161
- }
162
- hasScriptInAggregations(aggregations) {
163
- // Recursively check for script objects in aggregations
164
- for (const [, value] of Object.entries(aggregations)) {
165
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
166
- const aggObj = value;
167
- // Check if this is a script aggregation (has 'script' as a key)
168
- if ('script' in aggObj || '_script' in aggObj) {
169
- return true;
170
- }
171
- // Recursively check nested aggregations
172
- if ('aggs' in aggObj || 'aggregations' in aggObj) {
173
- const nestedAggs = (aggObj.aggs || aggObj.aggregations);
174
- if (this.hasScriptInAggregations(nestedAggs)) {
175
- return true;
176
- }
177
- }
178
- }
179
- }
180
- return false;
181
- }
182
- validateHighlight(highlight) {
183
- // Validate highlight configuration
184
- if (highlight.fields && typeof highlight.fields === 'object') {
185
- const fieldCount = Object.keys(highlight.fields).length;
186
- if (fieldCount > 20) {
187
- throw new handlers_js_1.ValidationError('Too many highlight fields (max 20)');
188
- }
189
- }
190
- // Check for script-based highlighting
191
- const highlightStr = JSON.stringify(highlight).toLowerCase();
192
- if (highlightStr.includes('script')) {
193
- throw new handlers_js_1.ValidationError('Script-based highlighting is not allowed');
194
- }
195
- }
196
- validateSourceFields(fields) {
197
- if (fields.length > 100) {
198
- throw new handlers_js_1.ValidationError('Too many source fields specified (max 100)');
199
- }
200
- for (const field of fields) {
201
- if (typeof field !== 'string' || field.length === 0) {
202
- throw new handlers_js_1.ValidationError('Source fields must be non-empty strings');
203
- }
204
- if (field.length > 256) {
205
- throw new handlers_js_1.ValidationError(`Source field name too long: '${field}' (max 256 characters)`);
206
- }
207
- }
208
- }
209
- validateQueryDepth(obj, depth) {
210
- const MAX_QUERY_DEPTH = 30; // Increased from 20 to support more complex queries
211
- if (depth > MAX_QUERY_DEPTH) {
212
- throw new handlers_js_1.ValidationError(`Query nesting exceeds maximum depth of ${MAX_QUERY_DEPTH}`);
213
- }
214
- for (const value of Object.values(obj)) {
215
- if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
216
- this.validateQueryDepth(value, depth + 1);
217
- }
218
- else if (Array.isArray(value)) {
219
- // Also check depth in array elements
220
- for (const item of value) {
221
- if (typeof item === 'object' && item !== null) {
222
- this.validateQueryDepth(item, depth + 1);
223
- }
224
- }
225
- }
226
- }
227
- }
228
- formatSearchResponse(response) {
229
- const hits = response.hits.hits.map((hit) => ({
230
- _id: hit._id,
231
- _source: hit._source || {},
232
- _score: hit._score || 0,
233
- ...(hit.highlight && { highlight: hit.highlight }),
234
- }));
235
- return {
236
- hits: {
237
- total: {
238
- value: response.hits.total?.value || response.hits.total || 0,
239
- relation: response.hits.total?.relation || 'eq',
240
- },
241
- hits,
242
- },
243
- ...(response.aggregations && { aggregations: response.aggregations }),
244
- took: response.took || 0,
245
- };
246
- }
247
- }
248
- exports.SearchElasticsearchTool = SearchElasticsearchTool;
249
- //# sourceMappingURL=search-elasticsearch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-elasticsearch.js","sourceRoot":"","sources":["../../src/tools/search-elasticsearch.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { ElasticsearchManager } from '../elasticsearch/client.js';
2
- import { Logger } from '../logger.js';
3
- export interface UpdateDocumentArgs {
4
- index: string;
5
- id: string;
6
- document?: Record<string, unknown>;
7
- script?: {
8
- source: string;
9
- params?: Record<string, unknown>;
10
- };
11
- upsert?: boolean;
12
- refresh?: boolean | 'wait_for' | 'false' | 'true';
13
- }
14
- export interface UpdateDocumentResult {
15
- _id: string;
16
- _index: string;
17
- _version: number;
18
- result: 'updated' | 'created' | 'noop';
19
- }
20
- export declare class UpdateDocumentTool {
21
- private elasticsearch;
22
- private logger;
23
- constructor(elasticsearch: ElasticsearchManager, logger: Logger);
24
- execute(args: unknown): Promise<UpdateDocumentResult>;
25
- private validateDocument;
26
- private validateAndPrepareScript;
27
- private validateScriptParams;
28
- private isValidDottedField;
29
- private normalizeRefreshParameter;
30
- }
31
- //# sourceMappingURL=update-document.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-document.d.ts","sourceRoot":"","sources":["../../src/tools/update-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;CACxC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAS;gBAEX,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAKzD,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA8F3D,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,yBAAyB;CAelC"}
@@ -1,163 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UpdateDocumentTool = void 0;
4
- const schemas_js_1 = require("../validation/schemas.js");
5
- const handlers_js_1 = require("../errors/handlers.js");
6
- class UpdateDocumentTool {
7
- elasticsearch;
8
- logger;
9
- constructor(elasticsearch, logger) {
10
- this.elasticsearch = elasticsearch;
11
- this.logger = logger.child({ tool: 'update-document' });
12
- }
13
- async execute(args) {
14
- try {
15
- const validatedArgs = schemas_js_1.UpdateDocumentArgsSchema.parse(args);
16
- this.logger.info('Updating document', {
17
- index: validatedArgs.index,
18
- id: validatedArgs.id,
19
- hasDocument: !!validatedArgs.document,
20
- hasScript: !!validatedArgs.script,
21
- upsert: validatedArgs.upsert,
22
- refresh: validatedArgs.refresh,
23
- });
24
- const client = this.elasticsearch.getClient();
25
- // Check if index exists
26
- const indexExists = await client.indices.exists({
27
- index: validatedArgs.index,
28
- });
29
- if (!indexExists) {
30
- throw new handlers_js_1.NotFoundError(`Index '${validatedArgs.index}' does not exist`);
31
- }
32
- // Prepare update body
33
- const updateBody = {};
34
- if (validatedArgs.document) {
35
- this.validateDocument(validatedArgs.document);
36
- updateBody.doc = validatedArgs.document;
37
- if (validatedArgs.upsert) {
38
- updateBody.doc_as_upsert = true;
39
- }
40
- }
41
- if (validatedArgs.script) {
42
- updateBody.script = this.validateAndPrepareScript(validatedArgs.script);
43
- if (validatedArgs.upsert && validatedArgs.document) {
44
- updateBody.upsert = validatedArgs.document;
45
- }
46
- }
47
- // Execute update
48
- const response = await client.update({
49
- index: validatedArgs.index,
50
- id: validatedArgs.id,
51
- body: updateBody,
52
- refresh: this.normalizeRefreshParameter(validatedArgs.refresh),
53
- retry_on_conflict: 3, // Retry on version conflicts
54
- });
55
- this.logger.info('Successfully updated document', {
56
- id: response._id,
57
- index: response._index,
58
- version: response._version,
59
- result: response.result,
60
- });
61
- return {
62
- _id: response._id,
63
- _index: response._index,
64
- _version: response._version,
65
- result: response.result,
66
- };
67
- }
68
- catch (error) {
69
- if (error instanceof Error && error.name === 'ZodError') {
70
- throw new handlers_js_1.ValidationError('Invalid arguments for update_document', {
71
- details: error.message,
72
- });
73
- }
74
- // Handle Elasticsearch specific errors
75
- if (error instanceof Error) {
76
- const errorMessage = error.message.toLowerCase();
77
- if (errorMessage.includes('document_missing_exception') || errorMessage.includes('not_found')) {
78
- throw new handlers_js_1.NotFoundError(`Document with ID '${args?.id}' not found in index '${args?.index}'`);
79
- }
80
- if (errorMessage.includes('version_conflict')) {
81
- throw new handlers_js_1.ValidationError('Document was modified by another process, please retry');
82
- }
83
- }
84
- this.logger.error('Failed to update document', {}, error);
85
- throw new handlers_js_1.ElasticsearchError('Failed to update document in Elasticsearch', error, { args });
86
- }
87
- }
88
- validateDocument(document) {
89
- // Check if document is empty
90
- if (Object.keys(document).length === 0) {
91
- throw new handlers_js_1.ValidationError('Update document cannot be empty');
92
- }
93
- // Check for invalid field names
94
- for (const key of Object.keys(document)) {
95
- if (key.startsWith('_')) {
96
- throw new handlers_js_1.ValidationError(`Field name '${key}' cannot start with underscore (reserved)`);
97
- }
98
- if (key.includes('.') && !this.isValidDottedField(key)) {
99
- throw new handlers_js_1.ValidationError(`Invalid field name '${key}': improper dot notation`);
100
- }
101
- }
102
- // Validate document size
103
- const documentSize = JSON.stringify(document).length;
104
- if (documentSize > 100 * 1024 * 1024) { // 100MB limit
105
- throw new handlers_js_1.ValidationError('Document size exceeds 100MB limit');
106
- }
107
- }
108
- validateAndPrepareScript(script) {
109
- if (!script.source || script.source.trim().length === 0) {
110
- throw new handlers_js_1.ValidationError('Script source cannot be empty');
111
- }
112
- // Sanitize script source for security
113
- const sanitizedSource = (0, schemas_js_1.sanitizeScriptSource)(script.source);
114
- // Validate script parameters
115
- if (script.params) {
116
- this.validateScriptParams(script.params);
117
- }
118
- return {
119
- source: sanitizedSource,
120
- ...(script.params && { params: script.params }),
121
- lang: 'painless', // Default to Painless scripting language
122
- };
123
- }
124
- validateScriptParams(params) {
125
- const maxParams = 50;
126
- const paramKeys = Object.keys(params);
127
- if (paramKeys.length > maxParams) {
128
- throw new handlers_js_1.ValidationError(`Too many script parameters (max ${maxParams})`);
129
- }
130
- for (const [key, value] of Object.entries(params)) {
131
- // Check parameter name
132
- if (key.length > 128) {
133
- throw new handlers_js_1.ValidationError(`Parameter name '${key}' too long (max 128 characters)`);
134
- }
135
- if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(key)) {
136
- throw new handlers_js_1.ValidationError(`Invalid parameter name '${key}': must be a valid identifier`);
137
- }
138
- // Check parameter value size
139
- const valueSize = JSON.stringify(value).length;
140
- if (valueSize > 1024 * 1024) { // 1MB limit per parameter
141
- throw new handlers_js_1.ValidationError(`Parameter '${key}' value exceeds 1MB limit`);
142
- }
143
- }
144
- }
145
- isValidDottedField(fieldName) {
146
- // Check for valid dot notation (no consecutive dots, no leading/trailing dots)
147
- return !/^\.|\.$|\.\./.test(fieldName);
148
- }
149
- normalizeRefreshParameter(refresh) {
150
- if (refresh === undefined || refresh === false || refresh === 'false') {
151
- return false;
152
- }
153
- if (refresh === true || refresh === 'true') {
154
- return true;
155
- }
156
- if (refresh === 'wait_for') {
157
- return 'wait_for';
158
- }
159
- return false;
160
- }
161
- }
162
- exports.UpdateDocumentTool = UpdateDocumentTool;
163
- //# sourceMappingURL=update-document.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-document.js","sourceRoot":"","sources":["../../src/tools/update-document.ts"],"names":[],"mappings":"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"}