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.
- package/README.md +137 -95
- package/dist/scripts/validate-profile.js +3 -3
- package/dist/scripts/validate-profile.js.map +1 -1
- package/dist/src/composite-executor.d.ts +3 -1
- package/dist/src/composite-executor.d.ts.map +1 -1
- package/dist/src/composite-executor.js +16 -5
- package/dist/src/composite-executor.js.map +1 -1
- package/dist/src/constants.d.ts +49 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +49 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +13 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/generated-schemas.d.ts +832 -52
- package/dist/src/generated-schemas.d.ts.map +1 -1
- package/dist/src/generated-schemas.js +31 -8
- package/dist/src/generated-schemas.js.map +1 -1
- package/dist/src/http-client-factory.d.ts.map +1 -1
- package/dist/src/http-client-factory.js +14 -3
- package/dist/src/http-client-factory.js.map +1 -1
- package/dist/src/http-transport.d.ts +65 -0
- package/dist/src/http-transport.d.ts.map +1 -1
- package/dist/src/http-transport.js +921 -77
- package/dist/src/http-transport.js.map +1 -1
- package/dist/src/index.js +108 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/interceptors.d.ts +3 -0
- package/dist/src/interceptors.d.ts.map +1 -1
- package/dist/src/interceptors.js +76 -8
- package/dist/src/interceptors.js.map +1 -1
- package/dist/src/logger.d.ts +1 -1
- package/dist/src/logger.js +3 -3
- package/dist/src/logger.js.map +1 -1
- package/dist/src/mcp-server.d.ts +33 -0
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +263 -54
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/oauth-provider.d.ts +92 -0
- package/dist/src/oauth-provider.d.ts.map +1 -0
- package/dist/src/oauth-provider.js +588 -0
- package/dist/src/oauth-provider.js.map +1 -0
- package/dist/src/openapi-parser.d.ts +16 -0
- package/dist/src/openapi-parser.d.ts.map +1 -1
- package/dist/src/openapi-parser.js +141 -6
- package/dist/src/openapi-parser.js.map +1 -1
- package/dist/src/profile-loader.d.ts +2 -2
- package/dist/src/profile-loader.d.ts.map +1 -1
- package/dist/src/profile-loader.js +45 -24
- package/dist/src/profile-loader.js.map +1 -1
- package/dist/src/testing/fixtures.d.ts +189 -0
- package/dist/src/testing/fixtures.d.ts.map +1 -1
- package/dist/src/testing/fixtures.js +144 -0
- package/dist/src/testing/fixtures.js.map +1 -1
- package/dist/src/testing/mock-gitlab-server.d.ts +26 -17
- package/dist/src/testing/mock-gitlab-server.d.ts.map +1 -1
- package/dist/src/testing/mock-gitlab-server.js +567 -304
- package/dist/src/testing/mock-gitlab-server.js.map +1 -1
- package/dist/src/types/http-transport.d.ts +16 -0
- package/dist/src/types/http-transport.d.ts.map +1 -1
- package/dist/src/types/openapi.d.ts +5 -0
- package/dist/src/types/openapi.d.ts.map +1 -1
- package/dist/src/types/profile.d.ts +112 -3
- package/dist/src/types/profile.d.ts.map +1 -1
- package/dist/src/validation-utils.d.ts +12 -0
- package/dist/src/validation-utils.d.ts.map +1 -1
- package/dist/src/validation-utils.js +17 -0
- package/dist/src/validation-utils.js.map +1 -1
- package/package.json +12 -3
- package/profile-schema.json +169 -7
- package/dist/composite-executor.d.ts +0 -65
- package/dist/composite-executor.d.ts.map +0 -1
- package/dist/composite-executor.js +0 -147
- package/dist/composite-executor.js.map +0 -1
- package/dist/constants.d.ts +0 -36
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js +0 -36
- package/dist/constants.js.map +0 -1
- package/dist/http-transport.d.ts +0 -195
- package/dist/http-transport.d.ts.map +0 -1
- package/dist/http-transport.js +0 -760
- package/dist/http-transport.js.map +0 -1
- package/dist/interceptors.d.ts +0 -74
- package/dist/interceptors.d.ts.map +0 -1
- package/dist/interceptors.js +0 -220
- package/dist/interceptors.js.map +0 -1
- package/dist/logger.d.ts +0 -81
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -264
- package/dist/logger.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -110
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -568
- package/dist/mcp-server.js.map +0 -1
- package/dist/metrics.d.ts +0 -86
- package/dist/metrics.d.ts.map +0 -1
- package/dist/metrics.js +0 -229
- package/dist/metrics.js.map +0 -1
- package/dist/openapi-parser.d.ts +0 -35
- package/dist/openapi-parser.d.ts.map +0 -1
- package/dist/openapi-parser.js +0 -160
- package/dist/openapi-parser.js.map +0 -1
- package/dist/profile-loader.d.ts +0 -25
- package/dist/profile-loader.d.ts.map +0 -1
- package/dist/profile-loader.js +0 -134
- package/dist/profile-loader.js.map +0 -1
- package/dist/schema-validator.d.ts +0 -32
- package/dist/schema-validator.d.ts.map +0 -1
- package/dist/schema-validator.js +0 -126
- package/dist/schema-validator.js.map +0 -1
- package/dist/testing/fixtures.d.ts +0 -186
- package/dist/testing/fixtures.d.ts.map +0 -1
- package/dist/testing/fixtures.js +0 -135
- package/dist/testing/fixtures.js.map +0 -1
- package/dist/testing/http-integration.test.d.ts +0 -7
- package/dist/testing/http-integration.test.d.ts.map +0 -1
- package/dist/testing/http-integration.test.js +0 -383
- package/dist/testing/http-integration.test.js.map +0 -1
- package/dist/testing/http-multiuser.test.d.ts +0 -10
- package/dist/testing/http-multiuser.test.d.ts.map +0 -1
- package/dist/testing/http-multiuser.test.js +0 -255
- package/dist/testing/http-multiuser.test.js.map +0 -1
- package/dist/testing/integration.test.d.ts +0 -8
- package/dist/testing/integration.test.d.ts.map +0 -1
- package/dist/testing/integration.test.js +0 -247
- package/dist/testing/integration.test.js.map +0 -1
- package/dist/testing/mock-gitlab-server.d.ts +0 -34
- package/dist/testing/mock-gitlab-server.d.ts.map +0 -1
- package/dist/testing/mock-gitlab-server.js +0 -224
- package/dist/testing/mock-gitlab-server.js.map +0 -1
- package/dist/testing/test-types.d.ts +0 -59
- package/dist/testing/test-types.d.ts.map +0 -1
- package/dist/testing/test-types.js +0 -7
- package/dist/testing/test-types.js.map +0 -1
- package/dist/tool-generator.d.ts +0 -43
- package/dist/tool-generator.d.ts.map +0 -1
- package/dist/tool-generator.js +0 -123
- package/dist/tool-generator.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/types/http-transport.d.ts +0 -39
- package/dist/types/http-transport.d.ts.map +0 -1
- package/dist/types/http-transport.js +0 -8
- package/dist/types/http-transport.js.map +0 -1
- package/dist/types/openapi.d.ts +0 -50
- package/dist/types/openapi.d.ts.map +0 -1
- package/dist/types/openapi.js +0 -9
- package/dist/types/openapi.js.map +0 -1
- package/dist/types/profile.d.ts +0 -76
- package/dist/types/profile.d.ts.map +0 -1
- package/dist/types/profile.js +0 -9
- 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
|
package/dist/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.d.ts
DELETED
|
@@ -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
|
package/dist/mcp-server.d.ts.map
DELETED
|
@@ -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"}
|