snow-flow 2.6.3 → 2.6.5

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 (26) hide show
  1. package/dist/mcp/servicenow-development-assistant-mcp.js +38 -18
  2. package/package.json +1 -1
  3. package/dist/mcp/example-refactored-server.d.ts +0 -18
  4. package/dist/mcp/example-refactored-server.js +0 -57
  5. package/dist/mcp/servicenow-automation-mcp-refactored.d.ts +0 -26
  6. package/dist/mcp/servicenow-automation-mcp-refactored.js +0 -632
  7. package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts +0 -74
  8. package/dist/mcp/servicenow-deployment-mcp-refactored.js +0 -1044
  9. package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts +0 -25
  10. package/dist/mcp/servicenow-flow-composer-mcp-refactored.js +0 -565
  11. package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts +0 -32
  12. package/dist/mcp/servicenow-graph-memory-mcp-refactored.js +0 -642
  13. package/dist/mcp/servicenow-integration-mcp-refactored.d.ts +0 -24
  14. package/dist/mcp/servicenow-integration-mcp-refactored.js +0 -612
  15. package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts +0 -63
  16. package/dist/mcp/servicenow-intelligent-mcp-refactored.js +0 -782
  17. package/dist/mcp/servicenow-operations-mcp-refactored.d.ts +0 -63
  18. package/dist/mcp/servicenow-operations-mcp-refactored.js +0 -1770
  19. package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts +0 -25
  20. package/dist/mcp/servicenow-platform-development-mcp-refactored.js +0 -542
  21. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts +0 -26
  22. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js +0 -648
  23. package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts +0 -25
  24. package/dist/mcp/servicenow-security-compliance-mcp-refactored.js +0 -600
  25. package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts +0 -31
  26. package/dist/mcp/servicenow-update-set-mcp-refactored.js +0 -662
@@ -1,632 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * servicenow-automation MCP Server - REFACTORED
5
- * Uses BaseMCPServer to eliminate code duplication
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ServiceNowAutomationMCP = void 0;
9
- const base_mcp_server_js_1 = require("./base-mcp-server.js");
10
- class ServiceNowAutomationMCP extends base_mcp_server_js_1.BaseMCPServer {
11
- constructor() {
12
- super({
13
- name: 'servicenow-automation',
14
- version: '2.0.0',
15
- description: 'Handles scheduled tasks, events, and automated processes'
16
- });
17
- }
18
- setupTools() {
19
- // Tools are defined in getTools() method
20
- }
21
- getTools() {
22
- return [
23
- {
24
- name: 'snow_create_scheduled_job',
25
- description: 'Create Scheduled Job with dynamic schedule discovery - NO hardcoded values',
26
- inputSchema: {
27
- type: 'object',
28
- properties: {
29
- name: { type: 'string', description: 'Scheduled Job name' },
30
- script: { type: 'string', description: 'JavaScript code to execute' },
31
- description: { type: 'string', description: 'Job description' },
32
- schedule: { type: 'string', description: 'Schedule pattern (daily, weekly, monthly, or cron)' },
33
- active: { type: 'boolean', description: 'Job active status' },
34
- runAsUser: { type: 'string', description: 'User to run job as' },
35
- timeZone: { type: 'string', description: 'Time zone for execution' }
36
- },
37
- required: ['name', 'script', 'schedule']
38
- }
39
- },
40
- {
41
- name: 'snow_create_event_rule',
42
- description: 'Create Event Rule with dynamic event discovery - NO hardcoded values',
43
- inputSchema: {
44
- type: 'object',
45
- properties: {
46
- name: { type: 'string', description: 'Event Rule name' },
47
- eventName: { type: 'string', description: 'Event name to listen for' },
48
- condition: { type: 'string', description: 'Event condition script' },
49
- script: { type: 'string', description: 'Action script to execute' },
50
- description: { type: 'string', description: 'Rule description' },
51
- active: { type: 'boolean', description: 'Rule active status' },
52
- order: { type: 'number', description: 'Execution order' }
53
- },
54
- required: ['name', 'eventName', 'script']
55
- }
56
- },
57
- {
58
- name: 'snow_create_notification',
59
- description: 'Create Notification with dynamic template discovery - NO hardcoded values',
60
- inputSchema: {
61
- type: 'object',
62
- properties: {
63
- name: { type: 'string', description: 'Notification name' },
64
- table: { type: 'string', description: 'Table to monitor' },
65
- when: { type: 'string', description: 'When to send (inserted, updated, deleted)' },
66
- condition: { type: 'string', description: 'Condition script' },
67
- recipients: { type: 'string', description: 'Recipient specification' },
68
- subject: { type: 'string', description: 'Email subject' },
69
- message: { type: 'string', description: 'Email message body' },
70
- active: { type: 'boolean', description: 'Notification active status' }
71
- },
72
- required: ['name', 'table', 'when', 'recipients', 'subject', 'message']
73
- }
74
- },
75
- {
76
- name: 'snow_create_sla_definition',
77
- description: 'Create SLA Definition with dynamic field discovery - NO hardcoded values',
78
- inputSchema: {
79
- type: 'object',
80
- properties: {
81
- name: { type: 'string', description: 'SLA Definition name' },
82
- table: { type: 'string', description: 'Table to apply SLA to' },
83
- condition: { type: 'string', description: 'SLA condition script' },
84
- duration: { type: 'string', description: 'Duration specification' },
85
- durationType: { type: 'string', description: 'Duration type (business, calendar)' },
86
- schedule: { type: 'string', description: 'Schedule to use' },
87
- active: { type: 'boolean', description: 'SLA active status' },
88
- description: { type: 'string', description: 'SLA description' }
89
- },
90
- required: ['name', 'table', 'condition', 'duration']
91
- }
92
- },
93
- {
94
- name: 'snow_create_escalation_rule',
95
- description: 'Create Escalation Rule with dynamic escalation discovery - NO hardcoded values',
96
- inputSchema: {
97
- type: 'object',
98
- properties: {
99
- name: { type: 'string', description: 'Escalation Rule name' },
100
- table: { type: 'string', description: 'Table to monitor' },
101
- condition: { type: 'string', description: 'Escalation condition' },
102
- escalationTime: { type: 'number', description: 'Escalation time in minutes' },
103
- escalationScript: { type: 'string', description: 'Escalation action script' },
104
- active: { type: 'boolean', description: 'Rule active status' },
105
- order: { type: 'number', description: 'Execution order' },
106
- description: { type: 'string', description: 'Rule description' }
107
- },
108
- required: ['name', 'table', 'condition', 'escalationTime', 'escalationScript']
109
- }
110
- },
111
- {
112
- name: 'snow_create_workflow_activity',
113
- description: 'Create Workflow Activity with dynamic workflow discovery - NO hardcoded values',
114
- inputSchema: {
115
- type: 'object',
116
- properties: {
117
- name: { type: 'string', description: 'Activity name' },
118
- workflowName: { type: 'string', description: 'Parent workflow name' },
119
- activityType: { type: 'string', description: 'Activity type' },
120
- script: { type: 'string', description: 'Activity script' },
121
- condition: { type: 'string', description: 'Activity condition' },
122
- order: { type: 'number', description: 'Activity order' },
123
- description: { type: 'string', description: 'Activity description' }
124
- },
125
- required: ['name', 'workflowName', 'activityType']
126
- }
127
- },
128
- {
129
- name: 'snow_discover_schedules',
130
- description: 'Discover all available schedules dynamically',
131
- inputSchema: {
132
- type: 'object',
133
- properties: {
134
- type: { type: 'string', description: 'Filter by schedule type' }
135
- }
136
- }
137
- },
138
- {
139
- name: 'snow_discover_events',
140
- description: 'Discover all available events dynamically',
141
- inputSchema: {
142
- type: 'object',
143
- properties: {
144
- table: { type: 'string', description: 'Filter by table' }
145
- }
146
- }
147
- },
148
- {
149
- name: 'snow_discover_automation_jobs',
150
- description: 'Discover all automation jobs dynamically',
151
- inputSchema: {
152
- type: 'object',
153
- properties: {
154
- status: { type: 'string', description: 'Filter by status: active, inactive, all' }
155
- }
156
- }
157
- },
158
- {
159
- name: 'snow_test_scheduled_job',
160
- description: 'Test scheduled job execution',
161
- inputSchema: {
162
- type: 'object',
163
- properties: {
164
- jobName: { type: 'string', description: 'Scheduled job name to test' }
165
- },
166
- required: ['jobName']
167
- }
168
- }
169
- ];
170
- }
171
- async executeTool(name, args) {
172
- const startTime = Date.now();
173
- switch (name) {
174
- case 'snow_create_scheduled_job':
175
- return await this.handleSnowCreateScheduledJob(args);
176
- case 'snow_create_event_rule':
177
- return await this.handleSnowCreateEventRule(args);
178
- case 'snow_create_notification':
179
- return await this.handleSnowCreateNotification(args);
180
- case 'snow_create_sla_definition':
181
- return await this.handleSnowCreateSlaDefinition(args);
182
- case 'snow_create_escalation_rule':
183
- return await this.handleSnowCreateEscalationRule(args);
184
- case 'snow_create_workflow_activity':
185
- return await this.handleSnowCreateWorkflowActivity(args);
186
- case 'snow_discover_schedules':
187
- return await this.handleSnowDiscoverSchedules(args);
188
- case 'snow_discover_events':
189
- return await this.handleSnowDiscoverEvents(args);
190
- case 'snow_discover_automation_jobs':
191
- return await this.handleSnowDiscoverAutomationJobs(args);
192
- case 'snow_test_scheduled_job':
193
- return await this.handleSnowTestScheduledJob(args);
194
- default:
195
- return {
196
- success: false,
197
- error: `Unknown tool: ${name}`
198
- };
199
- }
200
- }
201
- // Tool handlers
202
- async handleSnowCreateScheduledJob(args) {
203
- const startTime = Date.now();
204
- try {
205
- const jobData = {
206
- name: args.name,
207
- script: args.script,
208
- description: args.description || '',
209
- run_type: this.parseScheduleType(args.schedule),
210
- run_time: this.parseScheduleTime(args.schedule),
211
- active: args.active !== false,
212
- run_as: args.runAsUser || 'system',
213
- time_zone: args.timeZone || 'UTC'
214
- };
215
- const result = await this.client.createRecord('sysauto_script', jobData);
216
- return {
217
- success: result.success,
218
- result: result.result,
219
- error: result.success ? undefined : 'Failed to create scheduled job',
220
- executionTime: Date.now() - startTime
221
- };
222
- }
223
- catch (error) {
224
- return {
225
- success: false,
226
- error: error instanceof Error ? error.message : 'Failed to create scheduled job',
227
- executionTime: Date.now() - startTime
228
- };
229
- }
230
- }
231
- async handleSnowCreateEventRule(args) {
232
- const startTime = Date.now();
233
- try {
234
- const ruleData = {
235
- name: args.name,
236
- event_name: args.eventName,
237
- condition: args.condition || '',
238
- script: args.script,
239
- description: args.description || '',
240
- active: args.active !== false,
241
- order: args.order || 100
242
- };
243
- const result = await this.client.createRecord('sysevent_script', ruleData);
244
- return {
245
- success: result.success,
246
- result: result.result,
247
- error: result.success ? undefined : 'Failed to create event rule',
248
- executionTime: Date.now() - startTime
249
- };
250
- }
251
- catch (error) {
252
- return {
253
- success: false,
254
- error: error instanceof Error ? error.message : 'Failed to create event rule',
255
- executionTime: Date.now() - startTime
256
- };
257
- }
258
- }
259
- async handleSnowCreateNotification(args) {
260
- const startTime = Date.now();
261
- try {
262
- const notificationData = {
263
- name: args.name,
264
- collection: args.table,
265
- when: args.when,
266
- condition: args.condition || '',
267
- recipients: args.recipients,
268
- subject: args.subject,
269
- message_html: args.message,
270
- active: args.active !== false
271
- };
272
- const result = await this.client.createRecord('sysevent_email_action', notificationData);
273
- return {
274
- success: result.success,
275
- result: result.result,
276
- error: result.success ? undefined : 'Failed to create notification',
277
- executionTime: Date.now() - startTime
278
- };
279
- }
280
- catch (error) {
281
- return {
282
- success: false,
283
- error: error instanceof Error ? error.message : 'Failed to create notification',
284
- executionTime: Date.now() - startTime
285
- };
286
- }
287
- }
288
- async handleSnowCreateSlaDefinition(args) {
289
- const startTime = Date.now();
290
- try {
291
- const slaData = {
292
- name: args.name,
293
- collection: args.table,
294
- start_condition: args.condition,
295
- duration: args.duration,
296
- duration_type: args.durationType || 'business',
297
- schedule: args.schedule || '',
298
- active: args.active !== false,
299
- short_description: args.description || ''
300
- };
301
- const result = await this.client.createRecord('contract_sla', slaData);
302
- return {
303
- success: result.success,
304
- result: result.result,
305
- error: result.success ? undefined : 'Failed to create SLA definition',
306
- executionTime: Date.now() - startTime
307
- };
308
- }
309
- catch (error) {
310
- return {
311
- success: false,
312
- error: error instanceof Error ? error.message : 'Failed to create SLA definition',
313
- executionTime: Date.now() - startTime
314
- };
315
- }
316
- }
317
- async handleSnowCreateEscalationRule(args) {
318
- const startTime = Date.now();
319
- try {
320
- const escalationData = {
321
- name: args.name,
322
- table: args.table,
323
- condition: args.condition,
324
- escalation_time: args.escalationTime,
325
- script: args.escalationScript,
326
- active: args.active !== false,
327
- order: args.order || 100,
328
- description: args.description || ''
329
- };
330
- // Note: ServiceNow might use different tables for escalations
331
- const result = await this.client.createRecord('sys_trigger', escalationData);
332
- return {
333
- success: result.success,
334
- result: result.result,
335
- error: result.success ? undefined : 'Failed to create escalation rule',
336
- executionTime: Date.now() - startTime
337
- };
338
- }
339
- catch (error) {
340
- return {
341
- success: false,
342
- error: error instanceof Error ? error.message : 'Failed to create escalation rule',
343
- executionTime: Date.now() - startTime
344
- };
345
- }
346
- }
347
- async handleSnowCreateWorkflowActivity(args) {
348
- const startTime = Date.now();
349
- try {
350
- // First find the parent workflow
351
- const workflowResponse = await this.client.searchRecords('wf_workflow', `name=${args.workflowName}`, 1);
352
- if (!workflowResponse.success || !workflowResponse.data?.result?.length) {
353
- throw new Error(`Workflow not found: ${args.workflowName}`);
354
- }
355
- const workflowId = workflowResponse.data.result[0].sys_id;
356
- const activityData = {
357
- workflow_version: workflowId,
358
- name: args.name,
359
- activity_type: args.activityType,
360
- script: args.script || '',
361
- condition: args.condition || '',
362
- order: args.order || 100,
363
- description: args.description || ''
364
- };
365
- const result = await this.client.createRecord('wf_activity', activityData);
366
- return {
367
- success: result.success,
368
- result: result.result,
369
- error: result.success ? undefined : 'Failed to create workflow activity',
370
- executionTime: Date.now() - startTime
371
- };
372
- }
373
- catch (error) {
374
- return {
375
- success: false,
376
- error: error instanceof Error ? error.message : 'Failed to create workflow activity',
377
- executionTime: Date.now() - startTime
378
- };
379
- }
380
- }
381
- async handleSnowDiscoverSchedules(args) {
382
- const startTime = Date.now();
383
- try {
384
- const schedules = [];
385
- // Discover schedules
386
- const scheduleResponse = await this.client.searchRecords('cmn_schedule', '', 50);
387
- if (scheduleResponse.success && scheduleResponse.data) {
388
- schedules.push(...scheduleResponse.data.result.map((schedule) => ({
389
- name: schedule.name,
390
- type: schedule.type,
391
- time_zone: schedule.time_zone,
392
- description: schedule.description
393
- })));
394
- }
395
- return {
396
- success: true,
397
- result: { schedules },
398
- executionTime: Date.now() - startTime
399
- };
400
- }
401
- catch (error) {
402
- return {
403
- success: false,
404
- error: error instanceof Error ? error.message : 'Failed to discover schedules',
405
- executionTime: Date.now() - startTime
406
- };
407
- }
408
- }
409
- async handleSnowDiscoverEvents(args) {
410
- const startTime = Date.now();
411
- try {
412
- const events = [];
413
- // Build query based on table filter
414
- let query = '';
415
- if (args.table) {
416
- query = `table=${args.table}`;
417
- }
418
- // Discover event definitions
419
- const eventResponse = await this.client.searchRecords('sysevent', query, 50);
420
- if (eventResponse.success && eventResponse.data) {
421
- events.push(...eventResponse.data.result.map((event) => ({
422
- name: event.name,
423
- table: event.table,
424
- description: event.description,
425
- parm1_label: event.parm1,
426
- parm2_label: event.parm2
427
- })));
428
- }
429
- return {
430
- success: true,
431
- result: { events },
432
- executionTime: Date.now() - startTime
433
- };
434
- }
435
- catch (error) {
436
- return {
437
- success: false,
438
- error: error instanceof Error ? error.message : 'Failed to discover events',
439
- executionTime: Date.now() - startTime
440
- };
441
- }
442
- }
443
- async handleSnowDiscoverAutomationJobs(args) {
444
- const startTime = Date.now();
445
- try {
446
- const jobs = [];
447
- const status = args?.status || 'all';
448
- // Build query based on status filter
449
- let query = '';
450
- if (status === 'active') {
451
- query = 'active=true';
452
- }
453
- else if (status === 'inactive') {
454
- query = 'active=false';
455
- }
456
- // Discover scheduled jobs
457
- const scheduledResponse = await this.client.searchRecords('sysauto_script', query, 50);
458
- if (scheduledResponse.success && scheduledResponse.data) {
459
- jobs.push(...scheduledResponse.data.result.map((job) => ({
460
- type: 'scheduled_job',
461
- name: job.name,
462
- active: job.active,
463
- run_type: job.run_type,
464
- last_run: job.last_run_time
465
- })));
466
- }
467
- // Discover event scripts
468
- const eventResponse = await this.client.searchRecords('sysevent_script', query, 50);
469
- if (eventResponse.success && eventResponse.data) {
470
- jobs.push(...eventResponse.data.result.map((job) => ({
471
- type: 'event_script',
472
- name: job.name,
473
- active: job.active,
474
- event_name: job.event_name
475
- })));
476
- }
477
- return {
478
- success: true,
479
- result: { jobs },
480
- executionTime: Date.now() - startTime
481
- };
482
- }
483
- catch (error) {
484
- return {
485
- success: false,
486
- error: error instanceof Error ? error.message : 'Failed to discover automation jobs',
487
- executionTime: Date.now() - startTime
488
- };
489
- }
490
- }
491
- async handleSnowTestScheduledJob(args) {
492
- const startTime = Date.now();
493
- try {
494
- // Find the scheduled job
495
- const jobResponse = await this.client.searchRecords('sysauto_script', `name=${args.jobName}`, 1);
496
- if (!jobResponse.success || !jobResponse.data?.result?.length) {
497
- throw new Error(`Scheduled job not found: ${args.jobName}`);
498
- }
499
- const job = jobResponse.data.result[0];
500
- // Execute the scheduled job and monitor its execution
501
- const executionStartTime = Date.now();
502
- let testResult;
503
- try {
504
- // Trigger the scheduled job execution
505
- this.logger.info('Triggering scheduled job execution', {
506
- jobName: job.name,
507
- jobId: job.sys_id
508
- });
509
- // Method 1: Try to execute via sys_trigger endpoint
510
- const triggerResponse = await this.client.post('/api/now/table/sys_trigger', {
511
- script: `gs.eventQueue('sysauto.script.execute', null, '${job.sys_id}', '');`,
512
- name: `Test execution of ${job.name}`,
513
- next_action: new Date(Date.now() + 5000).toISOString() // Execute in 5 seconds
514
- });
515
- if (triggerResponse.result) {
516
- this.logger.info('Job execution trigger created', {
517
- triggerId: triggerResponse.result.sys_id
518
- });
519
- // Wait a brief moment for execution to begin
520
- await new Promise(resolve => setTimeout(resolve, 2000));
521
- // Check for recent execution history
522
- const executionHistoryResponse = await this.client.get(`/api/now/table/sys_execution_tracker?sysparm_query=source=${job.sys_id}^ORDERBYDESCsys_created_on&sysparm_limit=1`);
523
- const realExecutionTime = Date.now() - executionStartTime;
524
- if (executionHistoryResponse.result && executionHistoryResponse.result.length > 0) {
525
- const execution = executionHistoryResponse.result[0];
526
- testResult = {
527
- job_name: job.name,
528
- job_id: job.sys_id,
529
- test_status: 'executed',
530
- execution_time: realExecutionTime,
531
- trigger_id: triggerResponse.result.sys_id,
532
- execution_tracker_id: execution.sys_id,
533
- execution_state: execution.state,
534
- execution_progress: execution.completion_percentage || 0,
535
- message: `Job execution initiated successfully. Trigger created: ${triggerResponse.result.sys_id}`,
536
- details: {
537
- job_active: job.active,
538
- job_script: job.script ? 'Present' : 'Missing',
539
- job_condition: job.condition_script || 'None',
540
- execution_history_found: true
541
- }
542
- };
543
- }
544
- else {
545
- testResult = {
546
- job_name: job.name,
547
- job_id: job.sys_id,
548
- test_status: 'triggered',
549
- execution_time: realExecutionTime,
550
- trigger_id: triggerResponse.result.sys_id,
551
- message: `Job execution trigger created successfully. Check sys_execution_tracker for progress.`,
552
- details: {
553
- job_active: job.active,
554
- job_script: job.script ? 'Present' : 'Missing',
555
- job_condition: job.condition_script || 'None',
556
- execution_history_found: false
557
- }
558
- };
559
- }
560
- }
561
- else {
562
- throw new Error('Failed to create execution trigger');
563
- }
564
- }
565
- catch (executionError) {
566
- // If direct execution fails, perform validation instead
567
- this.logger.warn('Job execution failed, performing validation instead', {
568
- jobName: job.name,
569
- error: executionError instanceof Error ? executionError.message : String(executionError)
570
- });
571
- const realExecutionTime = Date.now() - executionStartTime;
572
- testResult = {
573
- job_name: job.name,
574
- job_id: job.sys_id,
575
- test_status: 'validated',
576
- execution_time: realExecutionTime,
577
- message: `Job validation completed. Execution failed: ${executionError instanceof Error ? executionError.message : String(executionError)}`,
578
- details: {
579
- job_active: job.active,
580
- job_script: job.script ? 'Present' : 'Missing',
581
- job_condition: job.condition_script || 'None',
582
- job_run_as: job.run_as || 'system',
583
- job_schedule: job.run_period || 'Not scheduled',
584
- validation_performed: true,
585
- execution_attempted: true,
586
- execution_error: executionError instanceof Error ? executionError.message : String(executionError)
587
- }
588
- };
589
- }
590
- return {
591
- success: true,
592
- result: testResult,
593
- executionTime: Date.now() - startTime
594
- };
595
- }
596
- catch (error) {
597
- return {
598
- success: false,
599
- error: error instanceof Error ? error.message : 'Failed to test scheduled job',
600
- executionTime: Date.now() - startTime
601
- };
602
- }
603
- }
604
- // Helper methods
605
- parseScheduleType(schedule) {
606
- const scheduleLower = schedule.toLowerCase();
607
- if (scheduleLower.includes('daily'))
608
- return 'daily';
609
- if (scheduleLower.includes('weekly'))
610
- return 'weekly';
611
- if (scheduleLower.includes('monthly'))
612
- return 'monthly';
613
- if (scheduleLower.includes('cron'))
614
- return 'cron';
615
- return 'periodically';
616
- }
617
- parseScheduleTime(schedule) {
618
- // Simple parsing - in real implementation would be more sophisticated
619
- const timeMatch = schedule.match(/(\d{1,2}):(\d{2})/);
620
- if (timeMatch) {
621
- return `${timeMatch[1]}:${timeMatch[2]}:00`;
622
- }
623
- return '00:00:00';
624
- }
625
- }
626
- exports.ServiceNowAutomationMCP = ServiceNowAutomationMCP;
627
- // Create and run the server
628
- if (require.main === module) {
629
- const server = new ServiceNowAutomationMCP();
630
- server.start().catch(console.error);
631
- }
632
- //# sourceMappingURL=servicenow-automation-mcp-refactored.js.map