mcp4openapi 0.1.0 → 0.2.1

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 +137 -95
  2. package/dist/scripts/validate-profile.js +3 -3
  3. package/dist/scripts/validate-profile.js.map +1 -1
  4. package/dist/src/composite-executor.d.ts +3 -1
  5. package/dist/src/composite-executor.d.ts.map +1 -1
  6. package/dist/src/composite-executor.js +16 -5
  7. package/dist/src/composite-executor.js.map +1 -1
  8. package/dist/src/constants.d.ts +49 -0
  9. package/dist/src/constants.d.ts.map +1 -1
  10. package/dist/src/constants.js +49 -0
  11. package/dist/src/constants.js.map +1 -1
  12. package/dist/src/errors.d.ts +6 -0
  13. package/dist/src/errors.d.ts.map +1 -1
  14. package/dist/src/errors.js +13 -0
  15. package/dist/src/errors.js.map +1 -1
  16. package/dist/src/generated-schemas.d.ts +832 -52
  17. package/dist/src/generated-schemas.d.ts.map +1 -1
  18. package/dist/src/generated-schemas.js +31 -8
  19. package/dist/src/generated-schemas.js.map +1 -1
  20. package/dist/src/http-client-factory.d.ts.map +1 -1
  21. package/dist/src/http-client-factory.js +14 -3
  22. package/dist/src/http-client-factory.js.map +1 -1
  23. package/dist/src/http-transport.d.ts +65 -0
  24. package/dist/src/http-transport.d.ts.map +1 -1
  25. package/dist/src/http-transport.js +921 -77
  26. package/dist/src/http-transport.js.map +1 -1
  27. package/dist/src/index.js +108 -8
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/interceptors.d.ts +3 -0
  30. package/dist/src/interceptors.d.ts.map +1 -1
  31. package/dist/src/interceptors.js +76 -8
  32. package/dist/src/interceptors.js.map +1 -1
  33. package/dist/src/logger.d.ts +1 -1
  34. package/dist/src/logger.js +3 -3
  35. package/dist/src/logger.js.map +1 -1
  36. package/dist/src/mcp-server.d.ts +33 -0
  37. package/dist/src/mcp-server.d.ts.map +1 -1
  38. package/dist/src/mcp-server.js +263 -54
  39. package/dist/src/mcp-server.js.map +1 -1
  40. package/dist/src/oauth-provider.d.ts +92 -0
  41. package/dist/src/oauth-provider.d.ts.map +1 -0
  42. package/dist/src/oauth-provider.js +588 -0
  43. package/dist/src/oauth-provider.js.map +1 -0
  44. package/dist/src/openapi-parser.d.ts +16 -0
  45. package/dist/src/openapi-parser.d.ts.map +1 -1
  46. package/dist/src/openapi-parser.js +141 -6
  47. package/dist/src/openapi-parser.js.map +1 -1
  48. package/dist/src/profile-loader.d.ts +2 -2
  49. package/dist/src/profile-loader.d.ts.map +1 -1
  50. package/dist/src/profile-loader.js +45 -24
  51. package/dist/src/profile-loader.js.map +1 -1
  52. package/dist/src/testing/fixtures.d.ts +189 -0
  53. package/dist/src/testing/fixtures.d.ts.map +1 -1
  54. package/dist/src/testing/fixtures.js +144 -0
  55. package/dist/src/testing/fixtures.js.map +1 -1
  56. package/dist/src/testing/mock-gitlab-server.d.ts +26 -17
  57. package/dist/src/testing/mock-gitlab-server.d.ts.map +1 -1
  58. package/dist/src/testing/mock-gitlab-server.js +567 -304
  59. package/dist/src/testing/mock-gitlab-server.js.map +1 -1
  60. package/dist/src/types/http-transport.d.ts +16 -0
  61. package/dist/src/types/http-transport.d.ts.map +1 -1
  62. package/dist/src/types/openapi.d.ts +5 -0
  63. package/dist/src/types/openapi.d.ts.map +1 -1
  64. package/dist/src/types/profile.d.ts +112 -3
  65. package/dist/src/types/profile.d.ts.map +1 -1
  66. package/dist/src/validation-utils.d.ts +12 -0
  67. package/dist/src/validation-utils.d.ts.map +1 -1
  68. package/dist/src/validation-utils.js +17 -0
  69. package/dist/src/validation-utils.js.map +1 -1
  70. package/package.json +12 -3
  71. package/profile-schema.json +169 -7
  72. package/dist/composite-executor.d.ts +0 -65
  73. package/dist/composite-executor.d.ts.map +0 -1
  74. package/dist/composite-executor.js +0 -147
  75. package/dist/composite-executor.js.map +0 -1
  76. package/dist/constants.d.ts +0 -36
  77. package/dist/constants.d.ts.map +0 -1
  78. package/dist/constants.js +0 -36
  79. package/dist/constants.js.map +0 -1
  80. package/dist/http-transport.d.ts +0 -195
  81. package/dist/http-transport.d.ts.map +0 -1
  82. package/dist/http-transport.js +0 -760
  83. package/dist/http-transport.js.map +0 -1
  84. package/dist/interceptors.d.ts +0 -74
  85. package/dist/interceptors.d.ts.map +0 -1
  86. package/dist/interceptors.js +0 -220
  87. package/dist/interceptors.js.map +0 -1
  88. package/dist/logger.d.ts +0 -81
  89. package/dist/logger.d.ts.map +0 -1
  90. package/dist/logger.js +0 -264
  91. package/dist/logger.js.map +0 -1
  92. package/dist/mcp-server.d.ts +0 -110
  93. package/dist/mcp-server.d.ts.map +0 -1
  94. package/dist/mcp-server.js +0 -568
  95. package/dist/mcp-server.js.map +0 -1
  96. package/dist/metrics.d.ts +0 -86
  97. package/dist/metrics.d.ts.map +0 -1
  98. package/dist/metrics.js +0 -229
  99. package/dist/metrics.js.map +0 -1
  100. package/dist/openapi-parser.d.ts +0 -35
  101. package/dist/openapi-parser.d.ts.map +0 -1
  102. package/dist/openapi-parser.js +0 -160
  103. package/dist/openapi-parser.js.map +0 -1
  104. package/dist/profile-loader.d.ts +0 -25
  105. package/dist/profile-loader.d.ts.map +0 -1
  106. package/dist/profile-loader.js +0 -134
  107. package/dist/profile-loader.js.map +0 -1
  108. package/dist/schema-validator.d.ts +0 -32
  109. package/dist/schema-validator.d.ts.map +0 -1
  110. package/dist/schema-validator.js +0 -126
  111. package/dist/schema-validator.js.map +0 -1
  112. package/dist/testing/fixtures.d.ts +0 -186
  113. package/dist/testing/fixtures.d.ts.map +0 -1
  114. package/dist/testing/fixtures.js +0 -135
  115. package/dist/testing/fixtures.js.map +0 -1
  116. package/dist/testing/http-integration.test.d.ts +0 -7
  117. package/dist/testing/http-integration.test.d.ts.map +0 -1
  118. package/dist/testing/http-integration.test.js +0 -383
  119. package/dist/testing/http-integration.test.js.map +0 -1
  120. package/dist/testing/http-multiuser.test.d.ts +0 -10
  121. package/dist/testing/http-multiuser.test.d.ts.map +0 -1
  122. package/dist/testing/http-multiuser.test.js +0 -255
  123. package/dist/testing/http-multiuser.test.js.map +0 -1
  124. package/dist/testing/integration.test.d.ts +0 -8
  125. package/dist/testing/integration.test.d.ts.map +0 -1
  126. package/dist/testing/integration.test.js +0 -247
  127. package/dist/testing/integration.test.js.map +0 -1
  128. package/dist/testing/mock-gitlab-server.d.ts +0 -34
  129. package/dist/testing/mock-gitlab-server.d.ts.map +0 -1
  130. package/dist/testing/mock-gitlab-server.js +0 -224
  131. package/dist/testing/mock-gitlab-server.js.map +0 -1
  132. package/dist/testing/test-types.d.ts +0 -59
  133. package/dist/testing/test-types.d.ts.map +0 -1
  134. package/dist/testing/test-types.js +0 -7
  135. package/dist/testing/test-types.js.map +0 -1
  136. package/dist/tool-generator.d.ts +0 -43
  137. package/dist/tool-generator.d.ts.map +0 -1
  138. package/dist/tool-generator.js +0 -123
  139. package/dist/tool-generator.js.map +0 -1
  140. package/dist/tsconfig.tsbuildinfo +0 -1
  141. package/dist/types/http-transport.d.ts +0 -39
  142. package/dist/types/http-transport.d.ts.map +0 -1
  143. package/dist/types/http-transport.js +0 -8
  144. package/dist/types/http-transport.js.map +0 -1
  145. package/dist/types/openapi.d.ts +0 -50
  146. package/dist/types/openapi.d.ts.map +0 -1
  147. package/dist/types/openapi.js +0 -9
  148. package/dist/types/openapi.js.map +0 -1
  149. package/dist/types/profile.d.ts +0 -76
  150. package/dist/types/profile.d.ts.map +0 -1
  151. package/dist/types/profile.js +0 -9
  152. package/dist/types/profile.js.map +0 -1
package/dist/logger.js DELETED
@@ -1,264 +0,0 @@
1
- /**
2
- * Logger interfaces and implementations
3
- *
4
- * Why: Replaces console.error with structured, level-based logging.
5
- * Enables production-ready logging with context and proper error handling.
6
- *
7
- * Security: Profile-aware token redaction prevents sensitive data leakage.
8
- */
9
- export var LogLevel;
10
- (function (LogLevel) {
11
- LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
12
- LogLevel[LogLevel["INFO"] = 1] = "INFO";
13
- LogLevel[LogLevel["WARN"] = 2] = "WARN";
14
- LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
15
- LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
16
- })(LogLevel || (LogLevel = {}));
17
- /**
18
- * Default logger - writes to stderr, respects LOG_LEVEL env var
19
- *
20
- * Security: Redacts auth tokens based on profile configuration
21
- */
22
- export class ConsoleLogger {
23
- level;
24
- authConfig;
25
- constructor(level, authConfig) {
26
- if (level !== undefined) {
27
- this.level = level;
28
- }
29
- else {
30
- // Parse from env
31
- const envLevel = process.env.LOG_LEVEL?.toUpperCase();
32
- this.level = envLevel && envLevel in LogLevel
33
- ? LogLevel[envLevel]
34
- : LogLevel.INFO;
35
- }
36
- this.authConfig = authConfig;
37
- }
38
- debug(message, context) {
39
- if (this.level <= LogLevel.DEBUG) {
40
- this.write('DEBUG', message, context);
41
- }
42
- }
43
- info(message, context) {
44
- if (this.level <= LogLevel.INFO) {
45
- this.write('INFO', message, context);
46
- }
47
- }
48
- warn(message, context) {
49
- if (this.level <= LogLevel.WARN) {
50
- this.write('WARN', message, context);
51
- }
52
- }
53
- error(message, error, context) {
54
- if (this.level <= LogLevel.ERROR) {
55
- const errorContext = error ? {
56
- error: error.message,
57
- stack: error.stack,
58
- ...context,
59
- } : context;
60
- this.write('ERROR', message, errorContext);
61
- }
62
- }
63
- write(level, message, context) {
64
- const timestamp = new Date().toISOString();
65
- const redacted = context ? this.redactSensitive(context) : undefined;
66
- const ctx = redacted ? ` ${JSON.stringify(redacted)}` : '';
67
- console.error(`[${timestamp}] ${level}: ${message}${ctx}`);
68
- }
69
- /**
70
- * Redact sensitive data based on auth configuration
71
- *
72
- * Why: Prevent token leakage in logs
73
- */
74
- redactSensitive(data) {
75
- if (!this.authConfig)
76
- return data;
77
- const redacted = { ...data };
78
- switch (this.authConfig.type) {
79
- case 'bearer':
80
- // Redact standard Authorization header
81
- redacted.headers = this.redactHeader(redacted.headers, 'authorization');
82
- break;
83
- case 'custom-header':
84
- // Redact custom header (e.g., X-API-Key)
85
- if (this.authConfig.header_name) {
86
- redacted.headers = this.redactHeader(redacted.headers, this.authConfig.header_name.toLowerCase());
87
- }
88
- break;
89
- case 'query':
90
- // Redact query parameter (e.g., ?api_key=secret)
91
- if (this.authConfig.query_param) {
92
- redacted.url = this.redactQueryParam(redacted.url, this.authConfig.query_param);
93
- redacted.params = this.redactParam(redacted.params, this.authConfig.query_param);
94
- }
95
- break;
96
- }
97
- return redacted;
98
- }
99
- /**
100
- * Redact specific header (case-insensitive)
101
- */
102
- redactHeader(headers, headerName) {
103
- if (!headers || typeof headers !== 'object')
104
- return {};
105
- const redacted = { ...headers };
106
- // Case-insensitive header matching
107
- for (const key of Object.keys(redacted)) {
108
- if (key.toLowerCase() === headerName.toLowerCase()) {
109
- redacted[key] = '[REDACTED]';
110
- }
111
- }
112
- return redacted;
113
- }
114
- /**
115
- * Redact query parameter from URL string
116
- */
117
- redactQueryParam(url, paramName) {
118
- if (!url)
119
- return '';
120
- try {
121
- const urlObj = new URL(url);
122
- if (urlObj.searchParams.has(paramName)) {
123
- urlObj.searchParams.set(paramName, '[REDACTED]');
124
- }
125
- return urlObj.toString();
126
- }
127
- catch {
128
- // Fallback: simple string replace for relative URLs
129
- const regex = new RegExp(`([?&]${paramName}=)[^&]+`, 'gi');
130
- return url.replace(regex, `$1[REDACTED]`);
131
- }
132
- }
133
- /**
134
- * Redact parameter from params object
135
- */
136
- redactParam(params, paramName) {
137
- if (!params || typeof params !== 'object')
138
- return {};
139
- const redacted = { ...params };
140
- if (paramName in redacted) {
141
- redacted[paramName] = '[REDACTED]';
142
- }
143
- return redacted;
144
- }
145
- }
146
- /**
147
- * Structured JSON logger for production
148
- *
149
- * Why: Machine-readable logs for log aggregation systems (ELK, Splunk, etc.)
150
- * Security: Redacts auth tokens based on profile configuration
151
- */
152
- export class JsonLogger {
153
- level;
154
- authConfig;
155
- constructor(level, authConfig) {
156
- if (level !== undefined) {
157
- this.level = level;
158
- }
159
- else {
160
- const envLevel = process.env.LOG_LEVEL?.toUpperCase();
161
- this.level = envLevel && envLevel in LogLevel
162
- ? LogLevel[envLevel]
163
- : LogLevel.INFO;
164
- }
165
- this.authConfig = authConfig;
166
- }
167
- debug(message, context) {
168
- if (this.level <= LogLevel.DEBUG) {
169
- this.write('debug', message, context);
170
- }
171
- }
172
- info(message, context) {
173
- if (this.level <= LogLevel.INFO) {
174
- this.write('info', message, context);
175
- }
176
- }
177
- warn(message, context) {
178
- if (this.level <= LogLevel.WARN) {
179
- this.write('warn', message, context);
180
- }
181
- }
182
- error(message, error, context) {
183
- if (this.level <= LogLevel.ERROR) {
184
- this.write('error', message, {
185
- error: error?.message,
186
- stack: error?.stack,
187
- ...context,
188
- });
189
- }
190
- }
191
- write(level, message, context) {
192
- const redacted = context ? this.redactSensitive(context) : undefined;
193
- const log = {
194
- timestamp: new Date().toISOString(),
195
- level,
196
- message,
197
- ...redacted,
198
- };
199
- console.error(JSON.stringify(log));
200
- }
201
- /**
202
- * Redact sensitive data based on auth configuration
203
- *
204
- * Why: Prevent token leakage in logs (same logic as ConsoleLogger)
205
- */
206
- redactSensitive(data) {
207
- if (!this.authConfig)
208
- return data;
209
- const redacted = { ...data };
210
- switch (this.authConfig.type) {
211
- case 'bearer':
212
- redacted.headers = this.redactHeader(redacted.headers, 'authorization');
213
- break;
214
- case 'custom-header':
215
- if (this.authConfig.header_name) {
216
- redacted.headers = this.redactHeader(redacted.headers, this.authConfig.header_name.toLowerCase());
217
- }
218
- break;
219
- case 'query':
220
- if (this.authConfig.query_param) {
221
- redacted.url = this.redactQueryParam(redacted.url, this.authConfig.query_param);
222
- redacted.params = this.redactParam(redacted.params, this.authConfig.query_param);
223
- }
224
- break;
225
- }
226
- return redacted;
227
- }
228
- redactHeader(headers, headerName) {
229
- if (!headers || typeof headers !== 'object')
230
- return {};
231
- const redacted = { ...headers };
232
- for (const key of Object.keys(redacted)) {
233
- if (key.toLowerCase() === headerName.toLowerCase()) {
234
- redacted[key] = '[REDACTED]';
235
- }
236
- }
237
- return redacted;
238
- }
239
- redactQueryParam(url, paramName) {
240
- if (!url)
241
- return '';
242
- try {
243
- const urlObj = new URL(url);
244
- if (urlObj.searchParams.has(paramName)) {
245
- urlObj.searchParams.set(paramName, '[REDACTED]');
246
- }
247
- return urlObj.toString();
248
- }
249
- catch {
250
- const regex = new RegExp(`([?&]${paramName}=)[^&]+`, 'gi');
251
- return url.replace(regex, `$1[REDACTED]`);
252
- }
253
- }
254
- redactParam(params, paramName) {
255
- if (!params || typeof params !== 'object')
256
- return {};
257
- const redacted = { ...params };
258
- if (paramName in redacted) {
259
- redacted[paramName] = '[REDACTED]';
260
- }
261
- return redacted;
262
- }
263
- }
264
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,CAAN,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,2CAAU,CAAA;AACZ,CAAC,EANW,QAAQ,KAAR,QAAQ,QAMnB;AASD;;;;GAIG;AACH,MAAM,OAAO,aAAa;IAChB,KAAK,CAAW;IAChB,UAAU,CAAmB;IAErC,YAAY,KAAgB,EAAE,UAA4B;QACxD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,GAAG,QAAQ,IAAI,QAAQ,IAAI,QAAQ;gBAC3C,CAAC,CAAC,QAAQ,CAAC,QAAiC,CAAC;gBAC7C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,OAAiC;QACrE,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;gBAC3B,KAAK,EAAE,KAAK,CAAC,OAAO;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,OAAO;aACX,CAAC,CAAC,CAAC,OAAO,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAa,EAAE,OAAe,EAAE,OAAiC;QAC7E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,KAAK,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,IAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAElC,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAE7B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,QAAQ;gBACX,uCAAuC;gBACvC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACxE,MAAM;YAER,KAAK,eAAe;gBAClB,yCAAyC;gBACzC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAChC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAClC,QAAQ,CAAC,OAAO,EAChB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,CAC1C,CAAC;gBACJ,CAAC;gBACD,MAAM;YAER,KAAK,OAAO;gBACV,iDAAiD;gBACjD,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAChC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAClC,QAAQ,CAAC,GAAyB,EAClC,IAAI,CAAC,UAAU,CAAC,WAAW,CAC5B,CAAC;oBACF,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAChC,QAAQ,CAAC,MAAM,EACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAC5B,CAAC;gBACJ,CAAC;gBACD,MAAM;QACV,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,YAAY,CAClB,OAAgB,EAChB,UAAkB;QAElB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEvD,MAAM,QAAQ,GAAG,EAAE,GAAI,OAAmC,EAAE,CAAC;QAE7D,mCAAmC;QACnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,GAAuB,EACvB,SAAiB;QAEjB,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;YACpD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,SAAS,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3D,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,MAAe,EACf,SAAiB;QAEjB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAErD,MAAM,QAAQ,GAAG,EAAE,GAAI,MAAkC,EAAE,CAAC;QAC5D,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;QACrC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACb,KAAK,CAAW;IAChB,UAAU,CAAmB;IAErC,YAAY,KAAgB,EAAE,UAA4B;QACxD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,GAAG,QAAQ,IAAI,QAAQ,IAAI,QAAQ;gBAC3C,CAAC,CAAC,QAAQ,CAAC,QAAiC,CAAC;gBAC7C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAiC;QACtD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAiC;QACrD,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,OAAiC;QACrE,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE;gBAC3B,KAAK,EAAE,KAAK,EAAE,OAAO;gBACrB,KAAK,EAAE,KAAK,EAAE,KAAK;gBACnB,GAAG,OAAO;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,KAAa,EAAE,OAAe,EAAE,OAAiC;QAC7E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,GAAG,GAAG;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,OAAO;YACP,GAAG,QAAQ;SACZ,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,IAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAElC,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAE7B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC7B,KAAK,QAAQ;gBACX,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;gBACxE,MAAM;YAER,KAAK,eAAe;gBAClB,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAChC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAClC,QAAQ,CAAC,OAAO,EAChB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,CAC1C,CAAC;gBACJ,CAAC;gBACD,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAChC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAClC,QAAQ,CAAC,GAAyB,EAClC,IAAI,CAAC,UAAU,CAAC,WAAW,CAC5B,CAAC;oBACF,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAChC,QAAQ,CAAC,MAAM,EACf,IAAI,CAAC,UAAU,CAAC,WAAW,CAC5B,CAAC;gBACJ,CAAC;gBACD,MAAM;QACV,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,YAAY,CAClB,OAAgB,EAChB,UAAkB;QAElB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAEvD,MAAM,QAAQ,GAAG,EAAE,GAAI,OAAmC,EAAE,CAAC;QAE7D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,gBAAgB,CACtB,GAAuB,EACvB,SAAiB;QAEjB,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,SAAS,SAAS,EAAE,IAAI,CAAC,CAAC;YAC3D,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAEO,WAAW,CACjB,MAAe,EACf,SAAiB;QAEjB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAErD,MAAM,QAAQ,GAAG,EAAE,GAAI,MAAkC,EAAE,CAAC;QAC5D,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;QACrC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF"}
@@ -1,110 +0,0 @@
1
- /**
2
- * Main MCP server implementation
3
- *
4
- * Why: Coordinates OpenAPI parser, profile loader, tool generator, and request execution.
5
- * Single entry point for tool registration and invocation.
6
- */
7
- import type { Logger } from './logger.js';
8
- export declare class MCPServer {
9
- private server;
10
- private parser;
11
- private profile?;
12
- private toolGenerator;
13
- private httpClient?;
14
- private compositeExecutor?;
15
- private schemaValidator;
16
- private logger;
17
- private httpTransport;
18
- private sessionHttpClients;
19
- /**
20
- * Filter response object to include only specified fields
21
- * Supports nested objects but keeps first level of arrays
22
- */
23
- private filterFields;
24
- constructor(logger?: Logger);
25
- initialize(specPath: string, profilePath?: string): Promise<void>;
26
- /**
27
- * Create logger with auth configuration for token redaction
28
- *
29
- * Why: Prevents sensitive tokens from appearing in logs
30
- */
31
- private createLoggerWithAuth;
32
- /**
33
- * Get base URL from profile config or OpenAPI spec
34
- */
35
- private getBaseUrl;
36
- /**
37
- * Get or create HTTP client for session
38
- */
39
- private getHttpClientForSession;
40
- /**
41
- * Get auth token from HTTP transport session
42
- */
43
- private getAuthTokenFromSession;
44
- /**
45
- * Cleanup HTTP client for destroyed session
46
- *
47
- * Why: Prevent memory leak - sessions expire but cached clients stay forever
48
- */
49
- private cleanupSessionClient;
50
- /**
51
- * Setup MCP request handlers
52
- */
53
- private setupHandlers;
54
- /**
55
- * Execute simple (non-composite) tool
56
- *
57
- * Why separate: Simple tools map directly to single OpenAPI operation.
58
- * No result aggregation needed.
59
- */
60
- private executeSimpleTool;
61
- /**
62
- * Resolve path parameters using profile aliases
63
- *
64
- * Why aliases: Different tools may use different parameter names for same path param.
65
- * Example: GitLab uses "resource_id", "project_id", "group_id" all mapping to "{id}"
66
- */
67
- private resolvePath;
68
- /**
69
- * Extract query parameters from args
70
- *
71
- * Why: Separate query params from body params. Array handling is done by HttpClient
72
- * based on profile's array_format setting.
73
- */
74
- private extractQueryParams;
75
- /**
76
- * Extract request body from args
77
- *
78
- * Why: For create/update operations, collect non-metadata fields into body.
79
- * Metadata (action, resource_type, etc.) are not sent to API.
80
- * Path/query parameters are also excluded from body.
81
- *
82
- * Uses metadata_params from tool definition, defaults to ['action', 'resource_type']
83
- */
84
- private extractBody;
85
- /**
86
- * Start server with stdio transport
87
- */
88
- runStdio(): Promise<void>;
89
- /**
90
- * Start server with HTTP transport
91
- *
92
- * Implements MCP Specification 2025-03-26 Streamable HTTP transport
93
- *
94
- * Why: Enables remote MCP server access with SSE streaming, session management,
95
- * and resumability for reliable communication over HTTP.
96
- */
97
- runHttp(host: string, port: number): Promise<void>;
98
- /**
99
- * Handle JSON-RPC message from HTTP transport
100
- *
101
- * Why: Unified message handling for both stdio and HTTP transports
102
- */
103
- private handleJsonRpcMessage;
104
- private isInitializeRequest;
105
- private isToolCallRequest;
106
- private handleInitialize;
107
- private handleToolCall;
108
- private handleOtherRequest;
109
- }
110
- //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,kBAAkB,CAAsC;IAEhE;;;OAGG;IACH,OAAO,CAAC,YAAY;gBAkBR,MAAM,CAAC,EAAE,MAAM;IAqBrB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DvE;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkE/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAiErB;;;;;OAKG;YACW,iBAAiB;IA+D/B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAwBnB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAsB1B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCxD;;;;OAIG;YACW,oBAAoB;IAgBlC,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;YAkBV,cAAc;IA0D5B,OAAO,CAAC,kBAAkB;CA4B3B"}