mcp4openapi 0.3.1 → 0.3.3

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 (152) hide show
  1. package/README.md +7 -0
  2. package/dist/src/core/cli-config.d.ts.map +1 -1
  3. package/dist/src/core/cli-config.js +2 -0
  4. package/dist/src/core/cli-config.js.map +1 -1
  5. package/dist/src/core/index.d.ts.map +1 -1
  6. package/dist/src/core/index.js +18 -3
  7. package/dist/src/core/index.js.map +1 -1
  8. package/dist/src/index.js +0 -0
  9. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  10. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  11. package/dist/src/profile/profile-allowlist.js +68 -0
  12. package/dist/src/profile/profile-allowlist.js.map +1 -0
  13. package/dist/src/profile/profile-registry.d.ts +5 -0
  14. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  15. package/dist/src/profile/profile-registry.js +38 -14
  16. package/dist/src/profile/profile-registry.js.map +1 -1
  17. package/package.json +2 -2
  18. package/profiles/gitlab/developer-profile-oauth.json +243 -41
  19. package/profiles/gitlab/developer-profile-oauth.test.json +1009 -5
  20. package/profiles/gitlab/openapi.yaml +1419 -164
  21. package/profiles/gitlab/profile-optimized-oauth.json +785 -0
  22. package/profiles/gitlab/profile-optimized-oauth.test.json +1566 -0
  23. package/profiles/grafana/openapi.json +28078 -0
  24. package/profiles/grafana/profile.json +1083 -0
  25. package/profiles/grafana/profile.test.json +235 -0
  26. package/profiles/mattermost/openapi.yaml +27434 -0
  27. package/profiles/mattermost/profile.json +463 -0
  28. package/profiles/mattermost/profile.test.json +607 -0
  29. package/profiles/n8n/profile-optimized.json +1002 -364
  30. package/profiles/n8n/profile-optimized.test.json +43 -43
  31. package/dist/src/argument-normalizer.d.ts +0 -5
  32. package/dist/src/argument-normalizer.d.ts.map +0 -1
  33. package/dist/src/argument-normalizer.js +0 -61
  34. package/dist/src/argument-normalizer.js.map +0 -1
  35. package/dist/src/cli-config.d.ts +0 -9
  36. package/dist/src/cli-config.d.ts.map +0 -1
  37. package/dist/src/cli-config.js +0 -111
  38. package/dist/src/cli-config.js.map +0 -1
  39. package/dist/src/composite-executor.d.ts +0 -77
  40. package/dist/src/composite-executor.d.ts.map +0 -1
  41. package/dist/src/composite-executor.js +0 -193
  42. package/dist/src/composite-executor.js.map +0 -1
  43. package/dist/src/constants.d.ts +0 -85
  44. package/dist/src/constants.d.ts.map +0 -1
  45. package/dist/src/constants.js +0 -85
  46. package/dist/src/constants.js.map +0 -1
  47. package/dist/src/dag-executor.d.ts +0 -49
  48. package/dist/src/dag-executor.d.ts.map +0 -1
  49. package/dist/src/dag-executor.js +0 -138
  50. package/dist/src/dag-executor.js.map +0 -1
  51. package/dist/src/errors.d.ts +0 -59
  52. package/dist/src/errors.d.ts.map +0 -1
  53. package/dist/src/errors.js +0 -119
  54. package/dist/src/errors.js.map +0 -1
  55. package/dist/src/filtering.d.ts +0 -19
  56. package/dist/src/filtering.d.ts.map +0 -1
  57. package/dist/src/filtering.js +0 -292
  58. package/dist/src/filtering.js.map +0 -1
  59. package/dist/src/http-client-factory.d.ts +0 -62
  60. package/dist/src/http-client-factory.d.ts.map +0 -1
  61. package/dist/src/http-client-factory.js +0 -133
  62. package/dist/src/http-client-factory.js.map +0 -1
  63. package/dist/src/http-transport-config.d.ts +0 -6
  64. package/dist/src/http-transport-config.d.ts.map +0 -1
  65. package/dist/src/http-transport-config.js +0 -47
  66. package/dist/src/http-transport-config.js.map +0 -1
  67. package/dist/src/http-transport.d.ts +0 -316
  68. package/dist/src/http-transport.d.ts.map +0 -1
  69. package/dist/src/http-transport.js +0 -2412
  70. package/dist/src/http-transport.js.map +0 -1
  71. package/dist/src/interceptors.d.ts +0 -116
  72. package/dist/src/interceptors.d.ts.map +0 -1
  73. package/dist/src/interceptors.js +0 -392
  74. package/dist/src/interceptors.js.map +0 -1
  75. package/dist/src/jsonrpc-validator.d.ts +0 -27
  76. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  77. package/dist/src/jsonrpc-validator.js +0 -58
  78. package/dist/src/jsonrpc-validator.js.map +0 -1
  79. package/dist/src/logger.d.ts +0 -59
  80. package/dist/src/logger.d.ts.map +0 -1
  81. package/dist/src/logger.js +0 -177
  82. package/dist/src/logger.js.map +0 -1
  83. package/dist/src/mcp-server-manager.d.ts +0 -20
  84. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  85. package/dist/src/mcp-server-manager.js +0 -38
  86. package/dist/src/mcp-server-manager.js.map +0 -1
  87. package/dist/src/mcp-server.d.ts +0 -203
  88. package/dist/src/mcp-server.d.ts.map +0 -1
  89. package/dist/src/mcp-server.js +0 -1369
  90. package/dist/src/mcp-server.js.map +0 -1
  91. package/dist/src/metrics.d.ts +0 -97
  92. package/dist/src/metrics.d.ts.map +0 -1
  93. package/dist/src/metrics.js +0 -273
  94. package/dist/src/metrics.js.map +0 -1
  95. package/dist/src/naming-warnings.d.ts +0 -23
  96. package/dist/src/naming-warnings.d.ts.map +0 -1
  97. package/dist/src/naming-warnings.js +0 -83
  98. package/dist/src/naming-warnings.js.map +0 -1
  99. package/dist/src/naming.d.ts +0 -58
  100. package/dist/src/naming.d.ts.map +0 -1
  101. package/dist/src/naming.js +0 -510
  102. package/dist/src/naming.js.map +0 -1
  103. package/dist/src/oauth-provider.d.ts +0 -131
  104. package/dist/src/oauth-provider.d.ts.map +0 -1
  105. package/dist/src/oauth-provider.js +0 -836
  106. package/dist/src/oauth-provider.js.map +0 -1
  107. package/dist/src/openapi-parser.d.ts +0 -70
  108. package/dist/src/openapi-parser.d.ts.map +0 -1
  109. package/dist/src/openapi-parser.js +0 -436
  110. package/dist/src/openapi-parser.js.map +0 -1
  111. package/dist/src/profile-loader.d.ts +0 -78
  112. package/dist/src/profile-loader.d.ts.map +0 -1
  113. package/dist/src/profile-loader.js +0 -483
  114. package/dist/src/profile-loader.js.map +0 -1
  115. package/dist/src/profile-registry.d.ts +0 -18
  116. package/dist/src/profile-registry.d.ts.map +0 -1
  117. package/dist/src/profile-registry.js +0 -26
  118. package/dist/src/profile-registry.js.map +0 -1
  119. package/dist/src/profile-resolver.d.ts +0 -19
  120. package/dist/src/profile-resolver.d.ts.map +0 -1
  121. package/dist/src/profile-resolver.js +0 -167
  122. package/dist/src/profile-resolver.js.map +0 -1
  123. package/dist/src/proxy-executor.d.ts +0 -86
  124. package/dist/src/proxy-executor.d.ts.map +0 -1
  125. package/dist/src/proxy-executor.js +0 -497
  126. package/dist/src/proxy-executor.js.map +0 -1
  127. package/dist/src/schema-validator.d.ts +0 -30
  128. package/dist/src/schema-validator.d.ts.map +0 -1
  129. package/dist/src/schema-validator.js +0 -128
  130. package/dist/src/schema-validator.js.map +0 -1
  131. package/dist/src/startup-profile.d.ts +0 -17
  132. package/dist/src/startup-profile.d.ts.map +0 -1
  133. package/dist/src/startup-profile.js +0 -30
  134. package/dist/src/startup-profile.js.map +0 -1
  135. package/dist/src/startup-validation.d.ts +0 -11
  136. package/dist/src/startup-validation.d.ts.map +0 -1
  137. package/dist/src/startup-validation.js +0 -21
  138. package/dist/src/startup-validation.js.map +0 -1
  139. package/dist/src/tool-filter.d.ts +0 -65
  140. package/dist/src/tool-filter.d.ts.map +0 -1
  141. package/dist/src/tool-filter.js +0 -471
  142. package/dist/src/tool-filter.js.map +0 -1
  143. package/dist/src/tool-generator.d.ts +0 -67
  144. package/dist/src/tool-generator.d.ts.map +0 -1
  145. package/dist/src/tool-generator.js +0 -182
  146. package/dist/src/tool-generator.js.map +0 -1
  147. package/dist/src/validation-utils.d.ts +0 -49
  148. package/dist/src/validation-utils.d.ts.map +0 -1
  149. package/dist/src/validation-utils.js +0 -138
  150. package/dist/src/validation-utils.js.map +0 -1
  151. package/profiles/gitlab/developer-profile.json +0 -1508
  152. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -20,7 +20,7 @@
20
20
  "scenarios": [
21
21
  {
22
22
  "name": "retrieve_n8n - get_credential_schema",
23
- "tool": "retrieve_n8n",
23
+ "tool": "retrieve_content",
24
24
  "arguments": {
25
25
  "action": "get_credential_schema",
26
26
  "credentialTypeName": "{{credentialTypeName}}"
@@ -43,7 +43,7 @@
43
43
  },
44
44
  {
45
45
  "name": "retrieve_n8n - list_executions",
46
- "tool": "retrieve_n8n",
46
+ "tool": "retrieve_content",
47
47
  "arguments": {
48
48
  "action": "list_executions"
49
49
  },
@@ -65,7 +65,7 @@
65
65
  },
66
66
  {
67
67
  "name": "retrieve_n8n - get_execution",
68
- "tool": "retrieve_n8n",
68
+ "tool": "retrieve_content",
69
69
  "arguments": {
70
70
  "action": "get_execution",
71
71
  "id": "{{id}}"
@@ -88,7 +88,7 @@
88
88
  },
89
89
  {
90
90
  "name": "retrieve_n8n - list_projects",
91
- "tool": "retrieve_n8n",
91
+ "tool": "retrieve_content",
92
92
  "arguments": {
93
93
  "action": "list_projects"
94
94
  },
@@ -110,7 +110,7 @@
110
110
  },
111
111
  {
112
112
  "name": "retrieve_n8n - list_tags",
113
- "tool": "retrieve_n8n",
113
+ "tool": "retrieve_content",
114
114
  "arguments": {
115
115
  "action": "list_tags"
116
116
  },
@@ -132,7 +132,7 @@
132
132
  },
133
133
  {
134
134
  "name": "retrieve_n8n - get_tag",
135
- "tool": "retrieve_n8n",
135
+ "tool": "retrieve_content",
136
136
  "arguments": {
137
137
  "action": "get_tag",
138
138
  "id": "{{id}}"
@@ -155,7 +155,7 @@
155
155
  },
156
156
  {
157
157
  "name": "retrieve_n8n - list_users",
158
- "tool": "retrieve_n8n",
158
+ "tool": "retrieve_content",
159
159
  "arguments": {
160
160
  "action": "list_users"
161
161
  },
@@ -177,7 +177,7 @@
177
177
  },
178
178
  {
179
179
  "name": "retrieve_n8n - get_user",
180
- "tool": "retrieve_n8n",
180
+ "tool": "retrieve_content",
181
181
  "arguments": {
182
182
  "action": "get_user",
183
183
  "id": "{{id}}"
@@ -200,7 +200,7 @@
200
200
  },
201
201
  {
202
202
  "name": "retrieve_n8n - list_variables",
203
- "tool": "retrieve_n8n",
203
+ "tool": "retrieve_content",
204
204
  "arguments": {
205
205
  "action": "list_variables"
206
206
  },
@@ -222,7 +222,7 @@
222
222
  },
223
223
  {
224
224
  "name": "retrieve_n8n - list_workflows",
225
- "tool": "retrieve_n8n",
225
+ "tool": "retrieve_content",
226
226
  "arguments": {
227
227
  "action": "list_workflows"
228
228
  },
@@ -244,7 +244,7 @@
244
244
  },
245
245
  {
246
246
  "name": "retrieve_n8n - get_workflow",
247
- "tool": "retrieve_n8n",
247
+ "tool": "retrieve_content",
248
248
  "arguments": {
249
249
  "action": "get_workflow",
250
250
  "id": "{{id}}"
@@ -267,7 +267,7 @@
267
267
  },
268
268
  {
269
269
  "name": "retrieve_n8n - get_workflow_version",
270
- "tool": "retrieve_n8n",
270
+ "tool": "retrieve_content",
271
271
  "arguments": {
272
272
  "action": "get_workflow_version",
273
273
  "id": "{{id}}",
@@ -291,7 +291,7 @@
291
291
  },
292
292
  {
293
293
  "name": "retrieve_n8n - get_workflow_tags",
294
- "tool": "retrieve_n8n",
294
+ "tool": "retrieve_content",
295
295
  "arguments": {
296
296
  "action": "get_workflow_tags",
297
297
  "id": "{{id}}"
@@ -314,7 +314,7 @@
314
314
  },
315
315
  {
316
316
  "name": "modify_n8n - generate_audit",
317
- "tool": "modify_n8n",
317
+ "tool": "run_n8n_operations",
318
318
  "arguments": {
319
319
  "action": "generate_audit"
320
320
  },
@@ -336,7 +336,7 @@
336
336
  },
337
337
  {
338
338
  "name": "modify_n8n - create_credential",
339
- "tool": "modify_n8n",
339
+ "tool": "create_content",
340
340
  "arguments": {
341
341
  "action": "create_credential",
342
342
  "name": "{{name}}",
@@ -363,7 +363,7 @@
363
363
  },
364
364
  {
365
365
  "name": "modify_n8n - update_credential",
366
- "tool": "modify_n8n",
366
+ "tool": "update_content",
367
367
  "arguments": {
368
368
  "action": "update_credential",
369
369
  "id": "{{id}}"
@@ -386,7 +386,7 @@
386
386
  },
387
387
  {
388
388
  "name": "modify_n8n - delete_credential",
389
- "tool": "modify_n8n",
389
+ "tool": "delete_content",
390
390
  "arguments": {
391
391
  "action": "delete_credential",
392
392
  "id": "{{id}}"
@@ -409,7 +409,7 @@
409
409
  },
410
410
  {
411
411
  "name": "modify_n8n - transfer_credential",
412
- "tool": "modify_n8n",
412
+ "tool": "run_n8n_operations",
413
413
  "arguments": {
414
414
  "action": "transfer_credential",
415
415
  "id": "{{id}}",
@@ -433,7 +433,7 @@
433
433
  },
434
434
  {
435
435
  "name": "modify_n8n - delete_execution",
436
- "tool": "modify_n8n",
436
+ "tool": "delete_content",
437
437
  "arguments": {
438
438
  "action": "delete_execution",
439
439
  "id": "{{id}}"
@@ -456,7 +456,7 @@
456
456
  },
457
457
  {
458
458
  "name": "modify_n8n - retry_execution",
459
- "tool": "modify_n8n",
459
+ "tool": "run_n8n_operations",
460
460
  "arguments": {
461
461
  "action": "retry_execution",
462
462
  "id": "{{id}}"
@@ -479,7 +479,7 @@
479
479
  },
480
480
  {
481
481
  "name": "modify_n8n - create_project",
482
- "tool": "modify_n8n",
482
+ "tool": "create_content",
483
483
  "arguments": {
484
484
  "action": "create_project",
485
485
  "name": "{{name}}"
@@ -502,7 +502,7 @@
502
502
  },
503
503
  {
504
504
  "name": "modify_n8n - update_project",
505
- "tool": "modify_n8n",
505
+ "tool": "update_content",
506
506
  "arguments": {
507
507
  "action": "update_project",
508
508
  "name": "{{name}}",
@@ -526,7 +526,7 @@
526
526
  },
527
527
  {
528
528
  "name": "modify_n8n - delete_project",
529
- "tool": "modify_n8n",
529
+ "tool": "delete_content",
530
530
  "arguments": {
531
531
  "action": "delete_project",
532
532
  "projectId": "{{projectId}}"
@@ -549,7 +549,7 @@
549
549
  },
550
550
  {
551
551
  "name": "modify_n8n - add_project_users",
552
- "tool": "modify_n8n",
552
+ "tool": "create_content",
553
553
  "arguments": {
554
554
  "action": "add_project_users",
555
555
  "projectId": "{{projectId}}",
@@ -578,7 +578,7 @@
578
578
  },
579
579
  {
580
580
  "name": "modify_n8n - remove_project_user",
581
- "tool": "modify_n8n",
581
+ "tool": "delete_content",
582
582
  "arguments": {
583
583
  "action": "remove_project_user",
584
584
  "projectId": "{{projectId}}",
@@ -602,7 +602,7 @@
602
602
  },
603
603
  {
604
604
  "name": "modify_n8n - update_project_user_role",
605
- "tool": "modify_n8n",
605
+ "tool": "update_content",
606
606
  "arguments": {
607
607
  "action": "update_project_user_role",
608
608
  "projectId": "{{projectId}}",
@@ -627,7 +627,7 @@
627
627
  },
628
628
  {
629
629
  "name": "modify_n8n - pull_source_control",
630
- "tool": "modify_n8n",
630
+ "tool": "run_n8n_operations",
631
631
  "arguments": {
632
632
  "action": "pull_source_control"
633
633
  },
@@ -649,7 +649,7 @@
649
649
  },
650
650
  {
651
651
  "name": "modify_n8n - create_tag",
652
- "tool": "modify_n8n",
652
+ "tool": "create_content",
653
653
  "arguments": {
654
654
  "action": "create_tag",
655
655
  "name": "{{name}}"
@@ -672,7 +672,7 @@
672
672
  },
673
673
  {
674
674
  "name": "modify_n8n - update_tag",
675
- "tool": "modify_n8n",
675
+ "tool": "update_content",
676
676
  "arguments": {
677
677
  "action": "update_tag",
678
678
  "id": "{{id}}",
@@ -696,7 +696,7 @@
696
696
  },
697
697
  {
698
698
  "name": "modify_n8n - delete_tag",
699
- "tool": "modify_n8n",
699
+ "tool": "delete_content",
700
700
  "arguments": {
701
701
  "action": "delete_tag",
702
702
  "id": "{{id}}"
@@ -719,7 +719,7 @@
719
719
  },
720
720
  {
721
721
  "name": "modify_n8n - create_users",
722
- "tool": "modify_n8n",
722
+ "tool": "create_content",
723
723
  "arguments": {
724
724
  "action": "create_users",
725
725
  "users": [
@@ -747,7 +747,7 @@
747
747
  },
748
748
  {
749
749
  "name": "modify_n8n - delete_user",
750
- "tool": "modify_n8n",
750
+ "tool": "delete_content",
751
751
  "arguments": {
752
752
  "action": "delete_user",
753
753
  "id": "{{id}}"
@@ -770,7 +770,7 @@
770
770
  },
771
771
  {
772
772
  "name": "modify_n8n - update_user_role",
773
- "tool": "modify_n8n",
773
+ "tool": "update_content",
774
774
  "arguments": {
775
775
  "action": "update_user_role",
776
776
  "id": "{{id}}",
@@ -796,7 +796,7 @@
796
796
  },
797
797
  {
798
798
  "name": "modify_n8n - create_variable",
799
- "tool": "modify_n8n",
799
+ "tool": "create_content",
800
800
  "arguments": {
801
801
  "action": "create_variable",
802
802
  "key": "{{key}}",
@@ -820,7 +820,7 @@
820
820
  },
821
821
  {
822
822
  "name": "modify_n8n - update_variable",
823
- "tool": "modify_n8n",
823
+ "tool": "update_content",
824
824
  "arguments": {
825
825
  "action": "update_variable",
826
826
  "id": "{{id}}",
@@ -845,7 +845,7 @@
845
845
  },
846
846
  {
847
847
  "name": "modify_n8n - delete_variable",
848
- "tool": "modify_n8n",
848
+ "tool": "delete_content",
849
849
  "arguments": {
850
850
  "action": "delete_variable",
851
851
  "id": "{{id}}"
@@ -868,7 +868,7 @@
868
868
  },
869
869
  {
870
870
  "name": "modify_n8n - create_workflow",
871
- "tool": "modify_n8n_workflows",
871
+ "tool": "create_content",
872
872
  "arguments": {
873
873
  "action": "create_workflow",
874
874
  "name": "{{name}}",
@@ -908,7 +908,7 @@
908
908
  },
909
909
  {
910
910
  "name": "modify_n8n - update_workflow",
911
- "tool": "modify_n8n_workflows",
911
+ "tool": "update_content",
912
912
  "arguments": {
913
913
  "action": "update_workflow",
914
914
  "id": "{{id}}",
@@ -949,7 +949,7 @@
949
949
  },
950
950
  {
951
951
  "name": "modify_n8n - delete_workflow",
952
- "tool": "modify_n8n_workflows",
952
+ "tool": "delete_content",
953
953
  "arguments": {
954
954
  "action": "delete_workflow",
955
955
  "id": "{{id}}"
@@ -972,7 +972,7 @@
972
972
  },
973
973
  {
974
974
  "name": "modify_n8n - activate_workflow",
975
- "tool": "modify_n8n_workflows",
975
+ "tool": "run_n8n_operations",
976
976
  "arguments": {
977
977
  "action": "activate_workflow",
978
978
  "id": "{{id}}"
@@ -995,7 +995,7 @@
995
995
  },
996
996
  {
997
997
  "name": "modify_n8n - deactivate_workflow",
998
- "tool": "modify_n8n_workflows",
998
+ "tool": "run_n8n_operations",
999
999
  "arguments": {
1000
1000
  "action": "deactivate_workflow",
1001
1001
  "id": "{{id}}"
@@ -1018,7 +1018,7 @@
1018
1018
  },
1019
1019
  {
1020
1020
  "name": "modify_n8n - update_workflow_tags",
1021
- "tool": "modify_n8n_workflows",
1021
+ "tool": "update_content",
1022
1022
  "arguments": {
1023
1023
  "action": "update_workflow_tags",
1024
1024
  "id": "{{id}}",
@@ -1046,7 +1046,7 @@
1046
1046
  },
1047
1047
  {
1048
1048
  "name": "modify_n8n - transfer_workflow",
1049
- "tool": "modify_n8n_workflows",
1049
+ "tool": "run_n8n_operations",
1050
1050
  "arguments": {
1051
1051
  "action": "transfer_workflow",
1052
1052
  "id": "{{id}}",
@@ -1,5 +0,0 @@
1
- import type { ToolDefinition } from './types/profile.js';
2
- type NormalizedArguments = Record<string, unknown>;
3
- export declare function normalizeArguments(toolDef: ToolDefinition, args: Record<string, unknown>): NormalizedArguments;
4
- export {};
5
- //# sourceMappingURL=argument-normalizer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"argument-normalizer.d.ts","sourceRoot":"","sources":["../../src/argument-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE7E,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,mBAAmB,CAsBrB"}
@@ -1,61 +0,0 @@
1
- export function normalizeArguments(toolDef, args) {
2
- const normalized = { ...args };
3
- for (const [paramName, paramDef] of Object.entries(toolDef.parameters)) {
4
- const value = normalized[paramName];
5
- if (value === undefined) {
6
- continue;
7
- }
8
- const mappedEntries = normalizeObjectEntries(paramDef, value);
9
- if (mappedEntries !== undefined) {
10
- normalized[paramName] = mappedEntries;
11
- continue;
12
- }
13
- const mappedArrayItems = normalizeArrayItems(paramDef, value);
14
- if (mappedArrayItems !== undefined) {
15
- normalized[paramName] = mappedArrayItems;
16
- }
17
- }
18
- return normalized;
19
- }
20
- function normalizeObjectEntries(paramDef, value) {
21
- if (!paramDef.object_entries_to_array) {
22
- return undefined;
23
- }
24
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
25
- return undefined;
26
- }
27
- const { key_field, value_field, wrap_value_field } = paramDef.object_entries_to_array;
28
- const entries = Object.entries(value);
29
- return entries.map(([key, entryValue]) => ({
30
- [key_field]: key,
31
- [value_field]: wrapObjectValue(entryValue, wrap_value_field),
32
- }));
33
- }
34
- function wrapObjectValue(value, wrapValueField) {
35
- if (!wrapValueField) {
36
- return value;
37
- }
38
- if (typeof value === 'object' && value !== null) {
39
- return value;
40
- }
41
- return { [wrapValueField]: value };
42
- }
43
- function normalizeArrayItems(paramDef, value) {
44
- if (!paramDef.array_item_to_object) {
45
- return undefined;
46
- }
47
- if (!Array.isArray(value)) {
48
- return undefined;
49
- }
50
- const { key_field } = paramDef.array_item_to_object;
51
- return value.map(item => {
52
- if (typeof item === 'object' && item !== null && !Array.isArray(item)) {
53
- return item;
54
- }
55
- if (['string', 'number', 'boolean'].includes(typeof item)) {
56
- return { [key_field]: item };
57
- }
58
- return item;
59
- });
60
- }
61
- //# sourceMappingURL=argument-normalizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"argument-normalizer.js","sourceRoot":"","sources":["../../src/argument-normalizer.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- /**
2
- * CLI config helpers
3
- *
4
- * Why: Shared parsing and env override logic with tests.
5
- */
6
- export declare function flagToEnvVar(flag: string): string;
7
- export declare function parseCliArgs(argv: string[]): Record<string, string>;
8
- export declare function applyCliEnvOverrides(args: Record<string, string>): void;
9
- //# sourceMappingURL=cli-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-config.d.ts","sourceRoot":"","sources":["../../src/cli-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AA6DD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAuBnE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgBvE"}
@@ -1,111 +0,0 @@
1
- /**
2
- * CLI config helpers
3
- *
4
- * Why: Shared parsing and env override logic with tests.
5
- */
6
- import { UnknownCliFlagError } from './errors.js';
7
- export function flagToEnvVar(flag) {
8
- return `MCP4_${flag.replace(/-/g, '_').toUpperCase()}`;
9
- }
10
- const KNOWN_ENV_VARS = new Set([
11
- 'MCP4_API_TOKEN',
12
- 'MCP4_PROFILE',
13
- 'MCP4_PROFILES_DIR',
14
- 'MCP4_PROFILE_PATH',
15
- 'MCP4_OPENAPI_SPEC_PATH',
16
- 'MCP4_TRANSPORT',
17
- 'MCP4_API_BASE_URL',
18
- 'MCP4_TOOL_FILTER_ALLOW_NAMES',
19
- 'MCP4_TOOL_FILTER_ALLOW_NAME_REGEX',
20
- 'MCP4_TOOL_FILTER_DENY_NAMES',
21
- 'MCP4_TOOL_FILTER_DENY_NAME_REGEX',
22
- 'MCP4_TOOL_FILTER_ALLOW_CATEGORIES',
23
- 'MCP4_TOOL_FILTER_WARN_THRESHOLD_PCT',
24
- 'MCP4_TOOL_FILTER_SESSION_MAX_TOOLS',
25
- 'MCP4_AUTH_ENV_VAR',
26
- 'MCP4_AUTH_FORCE',
27
- 'MCP4_AUTH_TYPE',
28
- 'MCP4_AUTH_HEADER_NAME',
29
- 'MCP4_AUTH_QUERY_PARAM',
30
- 'MCP4_PROXY_MAX_BYTES',
31
- 'MCP4_TOOLNAME_MAX',
32
- 'MCP4_TOOLNAME_STRATEGY',
33
- 'MCP4_TOOLNAME_WARN_ONLY',
34
- 'MCP4_TOOLNAME_SIMILAR_TOP',
35
- 'MCP4_TOOLNAME_SIMILARITY_THRESHOLD',
36
- 'MCP4_TOOLNAME_MIN_PARTS',
37
- 'MCP4_TOOLNAME_MIN_LENGTH',
38
- 'MCP4_HOST',
39
- 'MCP4_PORT',
40
- 'MCP4_ALLOWED_ORIGINS',
41
- 'MCP4_SESSION_TIMEOUT_MS',
42
- 'MCP4_OAUTH_SESSION_TIMEOUT_MS',
43
- 'MCP4_OAUTH_REFRESH_THRESHOLD_MS',
44
- 'MCP4_HEARTBEAT_ENABLED',
45
- 'MCP4_HEARTBEAT_INTERVAL_MS',
46
- 'MCP4_TOKEN_MAX_LENGTH',
47
- 'MCP4_FILTER_MAX_VALUES',
48
- 'MCP4_HTTP_PROFILE_ROUTING',
49
- 'MCP4_SSL_CERT_FILE',
50
- 'MCP4_SSL_KEY_FILE',
51
- 'MCP4_OAUTH_CLIENT_ID',
52
- 'MCP4_OAUTH_CLIENT_SECRET',
53
- 'MCP4_OAUTH_REDIRECT_URI',
54
- 'MCP4_OAUTH_ISSUER',
55
- 'MCP4_OAUTH_AUTHORIZATION_URL',
56
- 'MCP4_OAUTH_TOKEN_URL',
57
- 'MCP4_HTTP_RATE_LIMIT_ENABLED',
58
- 'MCP4_HTTP_RATE_LIMIT_WINDOW_MS',
59
- 'MCP4_HTTP_RATE_LIMIT_MAX_REQUESTS',
60
- 'MCP4_HTTP_RATE_LIMIT_METRICS_MAX',
61
- 'MCP4_OAUTH_RATE_LIMIT_MAX',
62
- 'MCP4_OAUTH_RATE_LIMIT_WINDOW_MS',
63
- 'MCP4_LOG_LEVEL',
64
- 'MCP4_LOG_FORMAT',
65
- 'MCP4_METRICS_ENABLED',
66
- 'MCP4_METRICS_PATH',
67
- ]);
68
- export function parseCliArgs(argv) {
69
- const args = {};
70
- for (let i = 0; i < argv.length; i += 1) {
71
- const arg = argv[i];
72
- if (!arg.startsWith('--'))
73
- continue;
74
- const raw = arg.slice(2);
75
- if (!raw)
76
- continue;
77
- const eqIndex = raw.indexOf('=');
78
- if (eqIndex !== -1) {
79
- const key = raw.slice(0, eqIndex);
80
- const value = raw.slice(eqIndex + 1);
81
- args[key] = value;
82
- continue;
83
- }
84
- const next = argv[i + 1];
85
- if (next && !next.startsWith('--')) {
86
- args[raw] = next;
87
- i += 1;
88
- continue;
89
- }
90
- args[raw] = 'true';
91
- }
92
- return args;
93
- }
94
- export function applyCliEnvOverrides(args) {
95
- const entries = Object.entries(args);
96
- const unknown = [];
97
- for (const [key] of entries) {
98
- const envVar = flagToEnvVar(key);
99
- if (!KNOWN_ENV_VARS.has(envVar)) {
100
- unknown.push(key);
101
- }
102
- }
103
- if (unknown.length > 0) {
104
- throw new UnknownCliFlagError(unknown);
105
- }
106
- for (const [key, value] of entries) {
107
- const envVar = flagToEnvVar(key);
108
- process.env[envVar] = value;
109
- }
110
- }
111
- //# sourceMappingURL=cli-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-config.js","sourceRoot":"","sources":["../../src/cli-config.ts"],"names":[],"mappings":"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"}
@@ -1,77 +0,0 @@
1
- /**
2
- * Composite action executor for chaining API calls
3
- *
4
- * Why: Reduces roundtrips by fetching related data in sequence (e.g., MR + comments).
5
- * Aggregates results into single JSON structure as defined by store_as paths.
6
- */
7
- import type { CompositeStep } from './types/profile.js';
8
- import type { HttpClient } from './interceptors.js';
9
- import { OpenAPIParser } from './openapi-parser.js';
10
- export interface CompositeResult {
11
- data: Record<string, unknown>;
12
- completed_steps: number;
13
- total_steps: number;
14
- errors?: StepError[];
15
- }
16
- export interface StepError {
17
- step_index: number;
18
- step_call: string;
19
- error: string;
20
- timestamp: string;
21
- }
22
- export declare class CompositeExecutor {
23
- private parser;
24
- private httpClient?;
25
- private parameterAliases;
26
- constructor(parser: OpenAPIParser, httpClient?: HttpClient | undefined, parameterAliases?: Record<string, string[]>);
27
- /**
28
- * Execute a series of API calls and merge results
29
- *
30
- * Why parallel: Steps may have dependencies, but independent steps can run concurrently.
31
- * Uses DAG analysis to determine safe parallelization while maintaining correctness.
32
- *
33
- * Supports partial results: If allowPartial=true, continues after errors and returns
34
- * what was completed. Useful for composite actions where some data is better than none.
35
- */
36
- execute(steps: CompositeStep[], args: Record<string, unknown>, allowPartial?: boolean, httpClient?: HttpClient): Promise<CompositeResult>;
37
- /**
38
- * Execute single composite step (extracted for parallel execution)
39
- *
40
- * @param step The composite step to execute
41
- * @param stepIndex Original index for error reporting
42
- * @param args Arguments for parameter substitution
43
- * @param httpClient Optional HTTP client override
44
- * @returns Promise resolving to HTTP response
45
- */
46
- private executeStep;
47
- /**
48
- * Parse composite step call syntax
49
- *
50
- * Format: "GET /projects/{id}/merge_requests/{iid}"
51
- */
52
- private parseCall;
53
- /**
54
- * Resolve path template with actual values
55
- *
56
- * Example: "/projects/{id}" + {id: "123"} => "/projects/123"
57
- * Supports parameter_aliases: {project_id: "123"} can map to {id} if configured
58
- */
59
- private resolvePath;
60
- /**
61
- * Extract query parameters from args based on operation definition
62
- */
63
- private extractQueryParams;
64
- /**
65
- * Store value at JSONPath-like location
66
- *
67
- * Why nested: Allows semantic structure (comments belong under merge_request object).
68
- *
69
- * Examples:
70
- * - "merge_request" => { merge_request: value }
71
- * - "merge_request.comments" => { merge_request: { comments: value } }
72
- *
73
- * Validates path navigation to prevent overwriting non-object values.
74
- */
75
- private storeResult;
76
- }
77
- //# sourceMappingURL=composite-executor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"composite-executor.d.ts","sourceRoot":"","sources":["../../src/composite-executor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,gBAAgB;gBAFhB,MAAM,EAAE,aAAa,EACrB,UAAU,CAAC,EAAE,UAAU,YAAA,EACvB,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAGzD;;;;;;;;OAQG;IACG,OAAO,CACX,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,YAAY,GAAE,OAAe,EAC7B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,eAAe,CAAC;IA+D3B;;;;;;;;OAQG;YACW,WAAW;IA6BzB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAQjB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,WAAW;CAmCpB"}