langflow-mcp-server 3.1.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +228 -79
  2. package/dist/__tests__/fixtures/vertices.d.ts +1 -2
  3. package/dist/__tests__/fixtures/vertices.d.ts.map +1 -1
  4. package/dist/__tests__/fixtures/vertices.js +1 -5
  5. package/dist/__tests__/fixtures/vertices.js.map +1 -1
  6. package/dist/mcp/server-consolidated.d.ts +13 -0
  7. package/dist/mcp/server-consolidated.d.ts.map +1 -1
  8. package/dist/mcp/server-consolidated.js +713 -44
  9. package/dist/mcp/server-consolidated.js.map +1 -1
  10. package/dist/mcp/server.d.ts.map +1 -1
  11. package/dist/mcp/server.js +749 -50
  12. package/dist/mcp/server.js.map +1 -1
  13. package/dist/mcp/tools-consolidated.d.ts.map +1 -1
  14. package/dist/mcp/tools-consolidated.js +722 -43
  15. package/dist/mcp/tools-consolidated.js.map +1 -1
  16. package/dist/mcp/tools.d.ts.map +1 -1
  17. package/dist/mcp/tools.js +1701 -66
  18. package/dist/mcp/tools.js.map +1 -1
  19. package/dist/mcp/validation-consolidated.d.ts +681 -9
  20. package/dist/mcp/validation-consolidated.d.ts.map +1 -1
  21. package/dist/mcp/validation-consolidated.js +635 -15
  22. package/dist/mcp/validation-consolidated.js.map +1 -1
  23. package/dist/mcp/validation.d.ts +769 -11
  24. package/dist/mcp/validation.d.ts.map +1 -1
  25. package/dist/mcp/validation.js +600 -11
  26. package/dist/mcp/validation.js.map +1 -1
  27. package/dist/services/langflow-client.d.ts +133 -51
  28. package/dist/services/langflow-client.d.ts.map +1 -1
  29. package/dist/services/langflow-client.js +1102 -154
  30. package/dist/services/langflow-client.js.map +1 -1
  31. package/dist/types/index.d.ts +395 -4
  32. package/dist/types/index.d.ts.map +1 -1
  33. package/package.json +16 -13
@@ -16,35 +16,37 @@ class LangflowMCPServerConsolidated {
16
16
  this.client = null;
17
17
  const baseUrl = process.env.LANGFLOW_BASE_URL;
18
18
  const apiKey = process.env.LANGFLOW_API_KEY;
19
- if (!baseUrl || !apiKey) {
20
- throw new Error('LANGFLOW_BASE_URL and LANGFLOW_API_KEY must be set in environment');
21
- }
22
- try {
23
- const url = new URL(baseUrl);
24
- if (!['http:', 'https:'].includes(url.protocol)) {
25
- throw new Error(`Invalid protocol: ${url.protocol}. Only http: and https: are allowed.`);
26
- }
27
- }
28
- catch (error) {
29
- if (error instanceof TypeError) {
30
- throw new Error(`Invalid LANGFLOW_BASE_URL format: ${baseUrl}`);
19
+ if (baseUrl && apiKey) {
20
+ try {
21
+ const url = new URL(baseUrl);
22
+ if (!['http:', 'https:'].includes(url.protocol)) {
23
+ throw new Error(`Invalid protocol: ${url.protocol}. Only http: and https: are allowed.`);
24
+ }
31
25
  }
32
- throw error;
33
- }
34
- if (apiKey.length < 10) {
35
- throw new Error('LANGFLOW_API_KEY appears to be invalid (too short)');
26
+ catch (error) {
27
+ if (error instanceof TypeError) {
28
+ throw new Error(`Invalid LANGFLOW_BASE_URL format: ${baseUrl}`);
29
+ }
30
+ throw error;
31
+ }
32
+ if (apiKey.length < 10) {
33
+ throw new Error('LANGFLOW_API_KEY appears to be invalid (too short)');
34
+ }
35
+ const DEFAULT_TIMEOUT = 30000;
36
+ const MIN_TIMEOUT = 1000;
37
+ const MAX_TIMEOUT = 300000;
38
+ const timeoutStr = process.env.LANGFLOW_TIMEOUT || String(DEFAULT_TIMEOUT);
39
+ let timeout = parseInt(timeoutStr, 10);
40
+ if (isNaN(timeout) || timeout < MIN_TIMEOUT || timeout > MAX_TIMEOUT) {
41
+ logger_1.logger.warn(`Invalid LANGFLOW_TIMEOUT: ${timeoutStr}, using default: ${DEFAULT_TIMEOUT}`);
42
+ timeout = DEFAULT_TIMEOUT;
43
+ }
44
+ const config = { baseUrl, apiKey, timeout };
45
+ this.client = new langflow_client_1.LangflowClient(config);
36
46
  }
37
- const DEFAULT_TIMEOUT = 30000;
38
- const MIN_TIMEOUT = 1000;
39
- const MAX_TIMEOUT = 300000;
40
- const timeoutStr = process.env.LANGFLOW_TIMEOUT || String(DEFAULT_TIMEOUT);
41
- let timeout = parseInt(timeoutStr, 10);
42
- if (isNaN(timeout) || timeout < MIN_TIMEOUT || timeout > MAX_TIMEOUT) {
43
- logger_1.logger.warn(`Invalid LANGFLOW_TIMEOUT: ${timeoutStr}, using default: ${DEFAULT_TIMEOUT}`);
44
- timeout = DEFAULT_TIMEOUT;
47
+ else {
48
+ logger_1.logger.warn('LANGFLOW_BASE_URL or LANGFLOW_API_KEY not set. Server will start but tools will return errors until configured.');
45
49
  }
46
- const config = { baseUrl, apiKey, timeout };
47
- this.client = new langflow_client_1.LangflowClient(config);
48
50
  logger_1.logger.info('Initializing Langflow MCP server (consolidated tools)');
49
51
  let serverVersion = 'dev';
50
52
  try {
@@ -150,6 +152,10 @@ class LangflowMCPServerConsolidated {
150
152
  if (!base64Regex.test(fileContent)) {
151
153
  throw new Error('Invalid base64 format');
152
154
  }
155
+ if (fileContent.length % 4 !== 0 ||
156
+ Buffer.from(fileContent, 'base64').toString('base64') !== fileContent) {
157
+ throw new Error('Invalid base64 format');
158
+ }
153
159
  const estimatedSize = (fileContent.length * 3) / 4;
154
160
  if (estimatedSize > maxSizeBytes) {
155
161
  throw new Error(`File size exceeds maximum allowed size of ${maxSizeBytes} bytes (10MB)`);
@@ -206,7 +212,7 @@ class LangflowMCPServerConsolidated {
206
212
  });
207
213
  this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
208
214
  if (!this.client) {
209
- throw new Error('Langflow client not initialized');
215
+ throw new Error('Langflow client not initialized. Set LANGFLOW_BASE_URL and LANGFLOW_API_KEY environment variables.');
210
216
  }
211
217
  const { name, arguments: rawArgs } = request.params;
212
218
  if (rawArgs !== undefined && rawArgs !== null) {
@@ -247,6 +253,32 @@ class LangflowMCPServerConsolidated {
247
253
  return await this.handleValidationTool(args);
248
254
  case 'system':
249
255
  return await this.handleSystemTool(args);
256
+ case 'flow_version':
257
+ return await this.handleFlowVersionTool(args);
258
+ case 'file_v2':
259
+ return await this.handleFileV2Tool(args);
260
+ case 'model':
261
+ return await this.handleModelTool(args);
262
+ case 'agentic':
263
+ return await this.handleAgenticTool(args);
264
+ case 'workflow':
265
+ return await this.handleWorkflowTool(args);
266
+ case 'a2a':
267
+ return await this.handleA2aTool(args);
268
+ case 'mcp_server':
269
+ return await this.handleMcpServerTool(args);
270
+ case 'mcp_project':
271
+ return await this.handleMcpProjectTool(args);
272
+ case 'trace':
273
+ return await this.handleTraceTool(args);
274
+ case 'response':
275
+ return await this.handleResponseTool(args);
276
+ case 'authz':
277
+ return await this.handleAuthzTool(args);
278
+ case 'memory':
279
+ return await this.handleMemoryTool(args);
280
+ case 'extension':
281
+ return await this.handleExtensionTool(args);
250
282
  default:
251
283
  throw new Error(`Unknown tool: ${name}`);
252
284
  }
@@ -310,14 +342,27 @@ class LangflowMCPServerConsolidated {
310
342
  const starters = await this.client.listStarterProjects();
311
343
  return this.formatSuccessResponse(starters);
312
344
  }
345
+ case 'replace': {
346
+ const { action: _, flow_id, ...body } = validated;
347
+ const result = await this.client.replaceFlow(flow_id, body);
348
+ return this.formatSuccessResponse(result);
349
+ }
350
+ case 'expand': {
351
+ const result = await this.client.expandFlows(validated.body);
352
+ return this.formatSuccessResponse(result);
353
+ }
354
+ case 'note_translations': {
355
+ const result = await this.client.getFlowNoteTranslations(validated.flow_id);
356
+ return this.formatSuccessResponse(result);
357
+ }
313
358
  }
314
359
  }
315
360
  async handleFlowExecutionTool(args) {
316
361
  const validated = validation_consolidated_1.FlowExecutionToolSchema.parse(args);
317
362
  switch (validated.action) {
318
363
  case 'run': {
319
- const { action: _, flow_id_or_name, stream, ...inputRequest } = validated;
320
- const result = await this.client.runFlow(flow_id_or_name, inputRequest, stream);
364
+ const { action: _, flow_id_or_name, stream, context, ...inputRequest } = validated;
365
+ const result = await this.client.runFlow(flow_id_or_name, inputRequest, stream, context);
321
366
  return this.formatSuccessResponse(result);
322
367
  }
323
368
  case 'run_advanced': {
@@ -368,10 +413,6 @@ class LangflowMCPServerConsolidated {
368
413
  const result = await this.client.buildVertices(flow_id, request);
369
414
  return this.formatSuccessResponse(result);
370
415
  }
371
- case 'get_vertex': {
372
- const result = await this.client.getVertex({ flow_id: validated.flow_id, vertex_id: validated.vertex_id });
373
- return this.formatSuccessResponse(result);
374
- }
375
416
  case 'stream_vertex': {
376
417
  const result = await this.client.streamVertexBuild({ flow_id: validated.flow_id, vertex_id: validated.vertex_id });
377
418
  return this.formatSuccessResponse(result);
@@ -479,6 +520,10 @@ class LangflowMCPServerConsolidated {
479
520
  await this.client.deleteVariable(validated.variable_id);
480
521
  return this.formatSuccessResponse({ success: true, message: 'Variable deleted successfully' });
481
522
  }
523
+ case 'detect': {
524
+ const result = await this.client.detectVariables({ flow_version_ids: validated.flow_version_ids });
525
+ return this.formatSuccessResponse(result);
526
+ }
482
527
  }
483
528
  }
484
529
  async handleKnowledgeBaseTool(args) {
@@ -505,6 +550,66 @@ class LangflowMCPServerConsolidated {
505
550
  const result = await this.client.uploadKnowledgeBase(validated.kb_name, fileBuffer, validated.file_name);
506
551
  return this.formatSuccessResponse(result);
507
552
  }
553
+ case 'create': {
554
+ const { action: _, ...body } = validated;
555
+ const result = await this.client.createKnowledgeBase(body);
556
+ return this.formatSuccessResponse(result);
557
+ }
558
+ case 'list_detailed': {
559
+ const result = await this.client.listKnowledgeBasesDetailed();
560
+ return this.formatSuccessResponse(result);
561
+ }
562
+ case 'list_chunks': {
563
+ const { action: _, kb_name, ...params } = validated;
564
+ const result = await this.client.listKnowledgeBaseChunks(kb_name, params);
565
+ return this.formatSuccessResponse(result);
566
+ }
567
+ case 'ingest': {
568
+ const fileBuffer = this.validateFileSize(validated.file_content);
569
+ const result = await this.client.ingestKnowledgeBase(validated.kb_name, [{ buffer: fileBuffer, filename: validated.file_name }], validated.params);
570
+ return this.formatSuccessResponse(result);
571
+ }
572
+ case 'preview_chunks': {
573
+ const fileBuffer = this.validateFileSize(validated.file_content);
574
+ const result = await this.client.previewKnowledgeBaseChunks([{ buffer: fileBuffer, filename: validated.file_name }], validated.params);
575
+ return this.formatSuccessResponse(result);
576
+ }
577
+ case 'cancel_ingest': {
578
+ const result = await this.client.cancelKnowledgeBaseIngest(validated.kb_name);
579
+ return this.formatSuccessResponse(result);
580
+ }
581
+ case 'test_connection': {
582
+ const { action: _, ...body } = validated;
583
+ const result = await this.client.testKnowledgeBaseConnection(body);
584
+ return this.formatSuccessResponse(result);
585
+ }
586
+ case 'list_connectors': {
587
+ const result = await this.client.listKnowledgeBaseConnectors();
588
+ return this.formatSuccessResponse(result);
589
+ }
590
+ case 'ingest_folder': {
591
+ const { action: _, kb_name, ...body } = validated;
592
+ const result = await this.client.ingestKnowledgeBaseFolder(kb_name, body);
593
+ return this.formatSuccessResponse(result);
594
+ }
595
+ case 'ingest_connector': {
596
+ const { action: _, kb_name, ...body } = validated;
597
+ const result = await this.client.ingestKnowledgeBaseConnector(kb_name, body);
598
+ return this.formatSuccessResponse(result);
599
+ }
600
+ case 'metadata_keys': {
601
+ const result = await this.client.getKnowledgeBaseMetadataKeys(validated.kb_name);
602
+ return this.formatSuccessResponse(result);
603
+ }
604
+ case 'list_runs': {
605
+ const { action: _, kb_name, ...params } = validated;
606
+ const result = await this.client.listKnowledgeBaseRuns(kb_name, params);
607
+ return this.formatSuccessResponse(result);
608
+ }
609
+ case 'get_run': {
610
+ const result = await this.client.getKnowledgeBaseRun(validated.kb_name, validated.run_id);
611
+ return this.formatSuccessResponse(result);
612
+ }
508
613
  }
509
614
  }
510
615
  async handleFileTool(args) {
@@ -528,7 +633,7 @@ class LangflowMCPServerConsolidated {
528
633
  flow_id: validated.flow_id,
529
634
  file_name: validated.file_name
530
635
  });
531
- if (!fileData)
636
+ if (!fileData || (fileData.byteLength ?? fileData.length) === 0)
532
637
  throw new Error('No file data received from server');
533
638
  const base64Data = Buffer.from(fileData).toString('base64');
534
639
  return this.formatSuccessResponse({ file_name: validated.file_name, content: base64Data });
@@ -545,7 +650,7 @@ class LangflowMCPServerConsolidated {
545
650
  flow_id: validated.flow_id,
546
651
  file_name: validated.file_name
547
652
  });
548
- if (!imageData)
653
+ if (!imageData || (imageData.byteLength ?? imageData.length) === 0)
549
654
  throw new Error('No image data received from server');
550
655
  const base64Data = Buffer.from(imageData).toString('base64');
551
656
  return this.formatSuccessResponse({ file_name: validated.file_name, content: base64Data });
@@ -597,6 +702,48 @@ class LangflowMCPServerConsolidated {
597
702
  const result = await this.client.getMonitorTransactions({ flow_id: flow_id, ...params });
598
703
  return this.formatSuccessResponse(result);
599
704
  }
705
+ case 'update_message': {
706
+ const { action: _, message_id, ...body } = validated;
707
+ const result = await this.client.updateMonitorMessage(message_id, body);
708
+ return this.formatSuccessResponse(result);
709
+ }
710
+ case 'delete_session_messages': {
711
+ const result = await this.client.deleteMonitorSessionMessages(validated.session_id);
712
+ return this.formatSuccessResponse(result);
713
+ }
714
+ case 'delete_sessions': {
715
+ const result = await this.client.deleteMonitorSessions(validated.session_ids);
716
+ return this.formatSuccessResponse(result);
717
+ }
718
+ case 'get_shared': {
719
+ const { action: _, ...params } = validated;
720
+ const result = await this.client.getSharedMessages(params);
721
+ return this.formatSuccessResponse(result);
722
+ }
723
+ case 'get_shared_sessions': {
724
+ const result = await this.client.getSharedSessions(validated.source_flow_id);
725
+ return this.formatSuccessResponse(result);
726
+ }
727
+ case 'update_shared': {
728
+ const { action: _, message_id, source_flow_id, ...body } = validated;
729
+ const result = await this.client.updateSharedMessage(message_id, source_flow_id, body);
730
+ return this.formatSuccessResponse(result);
731
+ }
732
+ case 'migrate_shared_session': {
733
+ const result = await this.client.migrateSharedSession(validated.session_id, {
734
+ new_session_id: validated.new_session_id,
735
+ source_flow_id: validated.source_flow_id
736
+ });
737
+ return this.formatSuccessResponse(result);
738
+ }
739
+ case 'delete_shared_session': {
740
+ const result = await this.client.deleteSharedSession(validated.session_id, validated.source_flow_id);
741
+ return this.formatSuccessResponse(result);
742
+ }
743
+ case 'job_queue': {
744
+ const result = await this.client.getJobQueueMetrics();
745
+ return this.formatSuccessResponse(result);
746
+ }
600
747
  }
601
748
  }
602
749
  async handleUserTool(args) {
@@ -609,10 +756,6 @@ class LangflowMCPServerConsolidated {
609
756
  const result = await this.client.listUsers(params);
610
757
  return this.formatSuccessResponse(result);
611
758
  }
612
- case 'get': {
613
- const result = await this.client.getUser(validated.user_id);
614
- return this.formatSuccessResponse(result);
615
- }
616
759
  case 'get_current': {
617
760
  const result = await this.client.getCurrentUser();
618
761
  return this.formatSuccessResponse(result);
@@ -626,6 +769,11 @@ class LangflowMCPServerConsolidated {
626
769
  const result = await this.client.resetUserPassword(validated.user_id, validated.new_password);
627
770
  return this.formatSuccessResponse(result);
628
771
  }
772
+ case 'create': {
773
+ const { action: _, ...body } = validated;
774
+ const result = await this.client.createUser(body);
775
+ return this.formatSuccessResponse(result);
776
+ }
629
777
  }
630
778
  }
631
779
  async handleAuthTool(args) {
@@ -662,6 +810,10 @@ class LangflowMCPServerConsolidated {
662
810
  await this.client.deleteApiKey(validated.api_key_id);
663
811
  return this.formatSuccessResponse({ success: true, message: 'API key deleted successfully' });
664
812
  }
813
+ case 'save_store_key': {
814
+ const result = await this.client.saveStoreApiKey(validated.api_key);
815
+ return this.formatSuccessResponse(result);
816
+ }
665
817
  }
666
818
  }
667
819
  async handleStoreTool(args) {
@@ -671,10 +823,6 @@ class LangflowMCPServerConsolidated {
671
823
  const components = await this.client.listComponents();
672
824
  return this.formatSuccessResponse(components);
673
825
  }
674
- case 'list_custom': {
675
- const result = await this.client.listCustomComponents();
676
- return this.formatSuccessResponse(result);
677
- }
678
826
  case 'create_custom': {
679
827
  const result = await this.client.createCustomComponent({ name: validated.name, code: validated.code });
680
828
  return this.formatSuccessResponse(result);
@@ -704,6 +852,25 @@ class LangflowMCPServerConsolidated {
704
852
  const likes = await this.client.getUserLikes();
705
853
  return this.formatSuccessResponse(likes);
706
854
  }
855
+ case 'create_store': {
856
+ const { action: _, ...body } = validated;
857
+ const result = await this.client.createStoreComponent({
858
+ description: null,
859
+ tags: null,
860
+ is_component: null,
861
+ ...body
862
+ });
863
+ return this.formatSuccessResponse(result);
864
+ }
865
+ case 'like': {
866
+ const result = await this.client.likeStoreComponent(validated.component_id);
867
+ return this.formatSuccessResponse(result);
868
+ }
869
+ case 'update_custom': {
870
+ const { action: _, ...body } = validated;
871
+ const result = await this.client.updateCustomComponentCode(body);
872
+ return this.formatSuccessResponse(result);
873
+ }
707
874
  }
708
875
  }
709
876
  async handleRegistrationTool(args) {
@@ -753,7 +920,7 @@ class LangflowMCPServerConsolidated {
753
920
  }
754
921
  case 'get_picture': {
755
922
  const pictureData = await this.client.getProfilePicture(validated.folder_name, validated.file_name);
756
- if (!pictureData)
923
+ if (!pictureData || (pictureData.byteLength ?? pictureData.length) === 0)
757
924
  throw new Error('No picture data received from server');
758
925
  const base64Data = Buffer.from(pictureData).toString('base64');
759
926
  return this.formatSuccessResponse({ file_name: validated.file_name, content: base64Data });
@@ -762,6 +929,508 @@ class LangflowMCPServerConsolidated {
762
929
  const voices = await this.client.listElevenLabsVoices();
763
930
  return this.formatSuccessResponse(voices);
764
931
  }
932
+ case 'session': {
933
+ const result = await this.client.getSession();
934
+ return this.formatSuccessResponse(result);
935
+ }
936
+ case 'webhook_events': {
937
+ const result = await this.client.getWebhookEvents(validated.flow_id_or_name, validated.user_id ? { user_id: validated.user_id } : undefined);
938
+ return this.formatSuccessResponse(result);
939
+ }
940
+ case 'health_check': {
941
+ const result = await this.client.getHealthCheck();
942
+ return this.formatSuccessResponse(result);
943
+ }
944
+ }
945
+ }
946
+ async handleFlowVersionTool(args) {
947
+ const validated = validation_consolidated_1.FlowVersionToolSchema.parse(args);
948
+ switch (validated.action) {
949
+ case 'list': {
950
+ const { action: _, flow_id, ...params } = validated;
951
+ const result = await this.client.listFlowVersions(flow_id, params);
952
+ return this.formatSuccessResponse(result);
953
+ }
954
+ case 'create': {
955
+ const result = await this.client.createFlowVersion(validated.flow_id, validated.body);
956
+ return this.formatSuccessResponse(result);
957
+ }
958
+ case 'get': {
959
+ const result = await this.client.getFlowVersion(validated.flow_id, validated.version_id);
960
+ return this.formatSuccessResponse(result);
961
+ }
962
+ case 'delete': {
963
+ await this.client.deleteFlowVersion(validated.flow_id, validated.version_id);
964
+ return this.formatSuccessResponse({ success: true, message: 'Flow version deleted successfully' });
965
+ }
966
+ case 'activate': {
967
+ const result = await this.client.activateFlowVersion(validated.flow_id, validated.version_id, validated.save_draft !== undefined ? { save_draft: validated.save_draft } : undefined);
968
+ return this.formatSuccessResponse(result);
969
+ }
970
+ case 'get_events': {
971
+ const result = await this.client.getFlowEvents(validated.flow_id, validated.since !== undefined ? { since: validated.since } : undefined);
972
+ return this.formatSuccessResponse(result);
973
+ }
974
+ case 'create_event': {
975
+ const { action: _, flow_id, ...body } = validated;
976
+ const result = await this.client.createFlowEvent(flow_id, body);
977
+ return this.formatSuccessResponse(result);
978
+ }
979
+ }
980
+ }
981
+ async handleFileV2Tool(args) {
982
+ const validated = validation_consolidated_1.FileV2ToolSchema.parse(args);
983
+ switch (validated.action) {
984
+ case 'list': {
985
+ const result = await this.client.listFilesV2();
986
+ return this.formatSuccessResponse(result);
987
+ }
988
+ case 'upload': {
989
+ const fileBuffer = this.validateFileSize(validated.file_content);
990
+ const params = {};
991
+ if (validated.append !== undefined)
992
+ params.append = validated.append;
993
+ if (validated.ephemeral !== undefined)
994
+ params.ephemeral = validated.ephemeral;
995
+ const result = await this.client.uploadFileV2(fileBuffer, validated.file_name, params);
996
+ return this.formatSuccessResponse(result);
997
+ }
998
+ case 'get': {
999
+ const result = await this.client.getFileV2(validated.file_id, validated.return_content !== undefined ? { return_content: validated.return_content } : undefined);
1000
+ return this.formatSuccessResponse(result);
1001
+ }
1002
+ case 'rename': {
1003
+ const result = await this.client.renameFileV2(validated.file_id, validated.name);
1004
+ return this.formatSuccessResponse(result);
1005
+ }
1006
+ case 'delete': {
1007
+ const result = await this.client.deleteFileV2(validated.file_id);
1008
+ return this.formatSuccessResponse(result);
1009
+ }
1010
+ case 'delete_all': {
1011
+ const result = await this.client.deleteAllFilesV2();
1012
+ return this.formatSuccessResponse(result);
1013
+ }
1014
+ case 'batch_download': {
1015
+ const result = await this.client.batchDownloadFilesV2(validated.file_ids);
1016
+ return this.formatSuccessResponse(result);
1017
+ }
1018
+ case 'batch_delete': {
1019
+ const result = await this.client.batchDeleteFilesV2(validated.file_ids);
1020
+ return this.formatSuccessResponse(result);
1021
+ }
1022
+ }
1023
+ }
1024
+ async handleModelTool(args) {
1025
+ const validated = validation_consolidated_1.ModelToolSchema.parse(args);
1026
+ switch (validated.action) {
1027
+ case 'list': {
1028
+ const { action: _, ...params } = validated;
1029
+ const result = await this.client.listModels(params);
1030
+ return this.formatSuccessResponse(result);
1031
+ }
1032
+ case 'providers': {
1033
+ const result = await this.client.listModelProviders();
1034
+ return this.formatSuccessResponse(result);
1035
+ }
1036
+ case 'enabled_providers': {
1037
+ const result = await this.client.listEnabledProviders(validated.providers ? { providers: validated.providers } : undefined);
1038
+ return this.formatSuccessResponse(result);
1039
+ }
1040
+ case 'enabled_models': {
1041
+ const result = await this.client.listEnabledModels(validated.model_names ? { model_names: validated.model_names } : undefined);
1042
+ return this.formatSuccessResponse(result);
1043
+ }
1044
+ case 'set_enabled': {
1045
+ const result = await this.client.setEnabledModels(validated.models);
1046
+ return this.formatSuccessResponse(result);
1047
+ }
1048
+ case 'get_default': {
1049
+ const result = await this.client.getDefaultModel({ model_type: validated.model_type });
1050
+ return this.formatSuccessResponse(result);
1051
+ }
1052
+ case 'set_default': {
1053
+ const result = await this.client.setDefaultModel({
1054
+ provider: validated.provider,
1055
+ model_name: validated.model_name,
1056
+ model_type: validated.model_type
1057
+ });
1058
+ return this.formatSuccessResponse(result);
1059
+ }
1060
+ case 'delete_default': {
1061
+ const result = await this.client.deleteDefaultModel({ model_type: validated.model_type });
1062
+ return this.formatSuccessResponse(result);
1063
+ }
1064
+ case 'provider_mapping': {
1065
+ const result = await this.client.getProviderVariableMapping();
1066
+ return this.formatSuccessResponse(result);
1067
+ }
1068
+ case 'validate_provider': {
1069
+ const result = await this.client.validateModelProvider({
1070
+ provider: validated.provider,
1071
+ variables: validated.variables
1072
+ });
1073
+ return this.formatSuccessResponse(result);
1074
+ }
1075
+ case 'options_language': {
1076
+ const result = await this.client.getLanguageModelOptions();
1077
+ return this.formatSuccessResponse(result);
1078
+ }
1079
+ case 'options_embedding': {
1080
+ const result = await this.client.getEmbeddingModelOptions();
1081
+ return this.formatSuccessResponse(result);
1082
+ }
1083
+ }
1084
+ }
1085
+ async handleAgenticTool(args) {
1086
+ const validated = validation_consolidated_1.AgenticToolSchema.parse(args);
1087
+ switch (validated.action) {
1088
+ case 'assist': {
1089
+ const { action: _, ...body } = validated;
1090
+ const result = await this.client.agenticAssist(body);
1091
+ return this.formatSuccessResponse(result);
1092
+ }
1093
+ case 'check_config': {
1094
+ const result = await this.client.agenticCheckConfig();
1095
+ return this.formatSuccessResponse(result);
1096
+ }
1097
+ case 'execute': {
1098
+ const { action: _, flow_name, ...body } = validated;
1099
+ const result = await this.client.agenticExecute(flow_name, body);
1100
+ return this.formatSuccessResponse(result);
1101
+ }
1102
+ case 'get_file': {
1103
+ const result = await this.client.getAgenticFile({
1104
+ path: validated.path,
1105
+ download: validated.download
1106
+ });
1107
+ return this.formatSuccessResponse(result);
1108
+ }
1109
+ case 'reset_session': {
1110
+ const result = await this.client.resetAgenticSession(validated.session_id !== undefined ? { session_id: validated.session_id } : undefined);
1111
+ return this.formatSuccessResponse(result);
1112
+ }
1113
+ }
1114
+ }
1115
+ async handleWorkflowTool(args) {
1116
+ const validated = validation_consolidated_1.WorkflowToolSchema.parse(args);
1117
+ switch (validated.action) {
1118
+ case 'run': {
1119
+ const { action: _, ...body } = validated;
1120
+ const result = await this.client.runWorkflow(body);
1121
+ return this.formatSuccessResponse(result);
1122
+ }
1123
+ case 'get_result': {
1124
+ const result = await this.client.getWorkflowResult(validated.job_id ? { job_id: validated.job_id } : undefined);
1125
+ return this.formatSuccessResponse(result);
1126
+ }
1127
+ case 'stop': {
1128
+ const result = await this.client.stopWorkflow(validated.job_id);
1129
+ return this.formatSuccessResponse(result);
1130
+ }
1131
+ case 'pending': {
1132
+ const result = await this.client.listPendingWorkflows(validated.flow_id ? { flow_id: validated.flow_id } : undefined);
1133
+ return this.formatSuccessResponse(result);
1134
+ }
1135
+ case 'events': {
1136
+ const result = await this.client.getWorkflowEvents(validated.job_id);
1137
+ return this.formatSuccessResponse(result);
1138
+ }
1139
+ case 'resume': {
1140
+ const { action: _, job_id, ...body } = validated;
1141
+ const result = await this.client.resumeWorkflow(job_id, body);
1142
+ return this.formatSuccessResponse(result);
1143
+ }
1144
+ case 'run_public': {
1145
+ const { action: _, ...body } = validated;
1146
+ const result = await this.client.runPublicWorkflow(body);
1147
+ return this.formatSuccessResponse(result);
1148
+ }
1149
+ }
1150
+ }
1151
+ async handleA2aTool(args) {
1152
+ const validated = validation_consolidated_1.A2aToolSchema.parse(args);
1153
+ switch (validated.action) {
1154
+ case 'list_agents': {
1155
+ const result = await this.client.listA2aAgents();
1156
+ return this.formatSuccessResponse(result);
1157
+ }
1158
+ case 'agent_card': {
1159
+ const result = await this.client.getA2aAgentCard(validated.flow_id);
1160
+ return this.formatSuccessResponse(result);
1161
+ }
1162
+ case 'jsonrpc': {
1163
+ const { action: _, flow_id, ...body } = validated;
1164
+ const result = await this.client.invokeA2aJsonrpc(flow_id, body);
1165
+ return this.formatSuccessResponse(result);
1166
+ }
1167
+ }
1168
+ }
1169
+ async handleMcpServerTool(args) {
1170
+ const validated = validation_consolidated_1.McpServerToolSchema.parse(args);
1171
+ switch (validated.action) {
1172
+ case 'list': {
1173
+ const result = await this.client.listMcpServers(validated.action_count !== undefined ? { action_count: validated.action_count } : undefined);
1174
+ return this.formatSuccessResponse(result);
1175
+ }
1176
+ case 'get': {
1177
+ const result = await this.client.getMcpServer(validated.server_name);
1178
+ return this.formatSuccessResponse(result);
1179
+ }
1180
+ case 'create': {
1181
+ const result = await this.client.createMcpServer(validated.server_name, validated.config);
1182
+ return this.formatSuccessResponse(result);
1183
+ }
1184
+ case 'update': {
1185
+ const result = await this.client.updateMcpServer(validated.server_name, validated.config);
1186
+ return this.formatSuccessResponse(result);
1187
+ }
1188
+ case 'delete': {
1189
+ const result = await this.client.deleteMcpServer(validated.server_name);
1190
+ return this.formatSuccessResponse(result);
1191
+ }
1192
+ }
1193
+ }
1194
+ async handleMcpProjectTool(args) {
1195
+ const validated = validation_consolidated_1.McpProjectToolSchema.parse(args);
1196
+ switch (validated.action) {
1197
+ case 'get_config': {
1198
+ const result = await this.client.getMcpProjectConfig(validated.project_id, validated.mcp_enabled !== undefined ? { mcp_enabled: validated.mcp_enabled } : undefined);
1199
+ return this.formatSuccessResponse(result);
1200
+ }
1201
+ case 'update_config': {
1202
+ const result = await this.client.updateMcpProjectConfig(validated.project_id, {
1203
+ settings: validated.settings,
1204
+ auth_settings: validated.auth_settings
1205
+ });
1206
+ return this.formatSuccessResponse(result);
1207
+ }
1208
+ case 'get_installed': {
1209
+ const result = await this.client.getMcpProjectInstalled(validated.project_id);
1210
+ return this.formatSuccessResponse(result);
1211
+ }
1212
+ case 'install': {
1213
+ const result = await this.client.installMcpProject(validated.project_id, {
1214
+ client: validated.client,
1215
+ transport: validated.transport
1216
+ });
1217
+ return this.formatSuccessResponse(result);
1218
+ }
1219
+ case 'get_composer_url': {
1220
+ const result = await this.client.getMcpProjectComposerUrl(validated.project_id);
1221
+ return this.formatSuccessResponse(result);
1222
+ }
1223
+ }
1224
+ }
1225
+ async handleTraceTool(args) {
1226
+ const validated = validation_consolidated_1.TraceToolSchema.parse(args);
1227
+ switch (validated.action) {
1228
+ case 'list': {
1229
+ const { action: _, ...params } = validated;
1230
+ const result = await this.client.listTraces(params);
1231
+ return this.formatSuccessResponse(result);
1232
+ }
1233
+ case 'get': {
1234
+ const result = await this.client.getTrace(validated.trace_id);
1235
+ return this.formatSuccessResponse(result);
1236
+ }
1237
+ case 'delete': {
1238
+ await this.client.deleteTrace(validated.trace_id);
1239
+ return this.formatSuccessResponse({ success: true, message: 'Trace deleted successfully' });
1240
+ }
1241
+ case 'delete_by_flow': {
1242
+ const result = await this.client.deleteTraces(validated.flow_id);
1243
+ return this.formatSuccessResponse(result);
1244
+ }
1245
+ }
1246
+ }
1247
+ async handleResponseTool(args) {
1248
+ const validated = validation_consolidated_1.ResponseToolSchema.parse(args);
1249
+ switch (validated.action) {
1250
+ case 'create': {
1251
+ const { action: _, ...body } = validated;
1252
+ const result = await this.client.createResponse(body);
1253
+ return this.formatSuccessResponse(result);
1254
+ }
1255
+ }
1256
+ }
1257
+ async handleAuthzTool(args) {
1258
+ const validated = validation_consolidated_1.AuthzToolSchema.parse(args);
1259
+ switch (validated.action) {
1260
+ case 'list_roles': {
1261
+ const { action: _, ...params } = validated;
1262
+ const result = await this.client.listAuthzRoles(params);
1263
+ return this.formatSuccessResponse(result);
1264
+ }
1265
+ case 'get_role': {
1266
+ const result = await this.client.getAuthzRole(validated.role_id);
1267
+ return this.formatSuccessResponse(result);
1268
+ }
1269
+ case 'create_role': {
1270
+ const { action: _, ...body } = validated;
1271
+ const result = await this.client.createAuthzRole(body);
1272
+ return this.formatSuccessResponse(result);
1273
+ }
1274
+ case 'update_role': {
1275
+ const { action: _, role_id, ...body } = validated;
1276
+ const result = await this.client.updateAuthzRole(role_id, body);
1277
+ return this.formatSuccessResponse(result);
1278
+ }
1279
+ case 'delete_role': {
1280
+ await this.client.deleteAuthzRole(validated.role_id);
1281
+ return this.formatSuccessResponse({ success: true, message: 'Role deleted successfully' });
1282
+ }
1283
+ case 'list_role_assignments': {
1284
+ const { action: _, ...params } = validated;
1285
+ const result = await this.client.listAuthzRoleAssignments(params);
1286
+ return this.formatSuccessResponse(result);
1287
+ }
1288
+ case 'create_role_assignment': {
1289
+ const { action: _, ...body } = validated;
1290
+ const result = await this.client.createAuthzRoleAssignment(body);
1291
+ return this.formatSuccessResponse(result);
1292
+ }
1293
+ case 'delete_role_assignment': {
1294
+ await this.client.deleteAuthzRoleAssignment(validated.assignment_id);
1295
+ return this.formatSuccessResponse({ success: true, message: 'Role assignment deleted successfully' });
1296
+ }
1297
+ case 'list_teams': {
1298
+ const { action: _, ...params } = validated;
1299
+ const result = await this.client.listAuthzTeams(params);
1300
+ return this.formatSuccessResponse(result);
1301
+ }
1302
+ case 'get_team': {
1303
+ const result = await this.client.getAuthzTeam(validated.team_id);
1304
+ return this.formatSuccessResponse(result);
1305
+ }
1306
+ case 'create_team': {
1307
+ const { action: _, ...body } = validated;
1308
+ const result = await this.client.createAuthzTeam(body);
1309
+ return this.formatSuccessResponse(result);
1310
+ }
1311
+ case 'update_team': {
1312
+ const { action: _, team_id, ...body } = validated;
1313
+ const result = await this.client.updateAuthzTeam(team_id, body);
1314
+ return this.formatSuccessResponse(result);
1315
+ }
1316
+ case 'delete_team': {
1317
+ await this.client.deleteAuthzTeam(validated.team_id);
1318
+ return this.formatSuccessResponse({ success: true, message: 'Team deleted successfully' });
1319
+ }
1320
+ case 'list_team_members': {
1321
+ const { action: _, team_id, ...params } = validated;
1322
+ const result = await this.client.listAuthzTeamMembers(team_id, params);
1323
+ return this.formatSuccessResponse(result);
1324
+ }
1325
+ case 'add_team_member': {
1326
+ const { action: _, team_id, ...body } = validated;
1327
+ const result = await this.client.addAuthzTeamMember(team_id, body);
1328
+ return this.formatSuccessResponse(result);
1329
+ }
1330
+ case 'remove_team_member': {
1331
+ await this.client.removeAuthzTeamMember(validated.team_id, validated.user_id);
1332
+ return this.formatSuccessResponse({ success: true, message: 'Team member removed successfully' });
1333
+ }
1334
+ case 'list_shares': {
1335
+ const { action: _, ...params } = validated;
1336
+ const result = await this.client.listAuthzShares(params);
1337
+ return this.formatSuccessResponse(result);
1338
+ }
1339
+ case 'get_share': {
1340
+ const result = await this.client.getAuthzShare(validated.share_id);
1341
+ return this.formatSuccessResponse(result);
1342
+ }
1343
+ case 'create_share': {
1344
+ const { action: _, ...body } = validated;
1345
+ const result = await this.client.createAuthzShare(body);
1346
+ return this.formatSuccessResponse(result);
1347
+ }
1348
+ case 'update_share': {
1349
+ const result = await this.client.updateAuthzShare(validated.share_id, {
1350
+ permission_level: validated.permission_level
1351
+ });
1352
+ return this.formatSuccessResponse(result);
1353
+ }
1354
+ case 'delete_share': {
1355
+ await this.client.deleteAuthzShare(validated.share_id);
1356
+ return this.formatSuccessResponse({ success: true, message: 'Share deleted successfully' });
1357
+ }
1358
+ case 'audit': {
1359
+ const { action: _, audit_action, ...rest } = validated;
1360
+ const params = { ...rest, ...(audit_action !== undefined ? { action: audit_action } : {}) };
1361
+ const result = await this.client.getAuthzAudit(params);
1362
+ return this.formatSuccessResponse(result);
1363
+ }
1364
+ case 'my_permissions': {
1365
+ const { action: _, ...body } = validated;
1366
+ const result = await this.client.getMyPermissions(body);
1367
+ return this.formatSuccessResponse(result);
1368
+ }
1369
+ }
1370
+ }
1371
+ async handleMemoryTool(args) {
1372
+ const validated = validation_consolidated_1.MemoryToolSchema.parse(args);
1373
+ switch (validated.action) {
1374
+ case 'create': {
1375
+ const { action: _, ...body } = validated;
1376
+ const result = await this.client.createMemoryBase(body);
1377
+ return this.formatSuccessResponse(result);
1378
+ }
1379
+ case 'list': {
1380
+ const { action: _, ...params } = validated;
1381
+ const result = await this.client.listMemoryBases(params);
1382
+ return this.formatSuccessResponse(result);
1383
+ }
1384
+ case 'get': {
1385
+ const result = await this.client.getMemoryBase(validated.memory_base_id);
1386
+ return this.formatSuccessResponse(result);
1387
+ }
1388
+ case 'list_sessions': {
1389
+ const { action: _, memory_base_id, ...params } = validated;
1390
+ const result = await this.client.listMemoryBaseSessions(memory_base_id, params);
1391
+ return this.formatSuccessResponse(result);
1392
+ }
1393
+ case 'list_messages': {
1394
+ const { action: _, memory_base_id, ...params } = validated;
1395
+ const result = await this.client.listMemoryBaseMessages(memory_base_id, params);
1396
+ return this.formatSuccessResponse(result);
1397
+ }
1398
+ case 'update': {
1399
+ const { action: _, memory_base_id, ...body } = validated;
1400
+ const result = await this.client.updateMemoryBase(memory_base_id, body);
1401
+ return this.formatSuccessResponse(result);
1402
+ }
1403
+ case 'delete': {
1404
+ await this.client.deleteMemoryBase(validated.memory_base_id);
1405
+ return this.formatSuccessResponse({ success: true, message: 'Memory base deleted successfully' });
1406
+ }
1407
+ case 'flush': {
1408
+ const result = await this.client.flushMemoryBase(validated.memory_base_id, {
1409
+ session_id: validated.session_id
1410
+ });
1411
+ return this.formatSuccessResponse(result);
1412
+ }
1413
+ case 'mismatch': {
1414
+ const result = await this.client.checkMemoryBaseMismatch(validated.memory_base_id);
1415
+ return this.formatSuccessResponse(result);
1416
+ }
1417
+ case 'regenerate': {
1418
+ const result = await this.client.regenerateMemoryBase(validated.memory_base_id);
1419
+ return this.formatSuccessResponse(result);
1420
+ }
1421
+ }
1422
+ }
1423
+ async handleExtensionTool(args) {
1424
+ const validated = validation_consolidated_1.ExtensionToolSchema.parse(args);
1425
+ switch (validated.action) {
1426
+ case 'reload': {
1427
+ const result = await this.client.reloadExtensionBundle(validated.extension_id, validated.bundle_name);
1428
+ return this.formatSuccessResponse(result);
1429
+ }
1430
+ case 'events': {
1431
+ const result = await this.client.getExtensionEvents(validated.since !== undefined ? { since: validated.since } : undefined);
1432
+ return this.formatSuccessResponse(result);
1433
+ }
765
1434
  }
766
1435
  }
767
1436
  async run() {