mcp4openapi 0.3.0 → 0.3.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/dist/src/argument-normalizer.d.ts +5 -0
- package/dist/src/argument-normalizer.d.ts.map +1 -0
- package/dist/src/argument-normalizer.js +61 -0
- package/dist/src/argument-normalizer.js.map +1 -0
- package/dist/src/auth/oauth-provider.d.ts.map +1 -1
- package/dist/src/auth/oauth-provider.js +5 -2
- package/dist/src/auth/oauth-provider.js.map +1 -1
- package/dist/src/cli-config.d.ts +9 -0
- package/dist/src/cli-config.d.ts.map +1 -0
- package/dist/src/cli-config.js +111 -0
- package/dist/src/cli-config.js.map +1 -0
- package/dist/src/composite-executor.d.ts +77 -0
- package/dist/src/composite-executor.d.ts.map +1 -0
- package/dist/src/composite-executor.js +193 -0
- package/dist/src/composite-executor.js.map +1 -0
- package/dist/src/constants.d.ts +85 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +85 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/core/cli-config.d.ts.map +1 -1
- package/dist/src/core/cli-config.js +1 -0
- package/dist/src/core/cli-config.js.map +1 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +1 -0
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/dag-executor.d.ts +49 -0
- package/dist/src/dag-executor.d.ts.map +1 -0
- package/dist/src/dag-executor.js +138 -0
- package/dist/src/dag-executor.js.map +1 -0
- package/dist/src/errors.d.ts +59 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +119 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/filtering.d.ts +19 -0
- package/dist/src/filtering.d.ts.map +1 -0
- package/dist/src/filtering.js +292 -0
- package/dist/src/filtering.js.map +1 -0
- package/dist/src/generated-schemas.d.ts +45 -0
- package/dist/src/generated-schemas.d.ts.map +1 -1
- package/dist/src/generated-schemas.js +3 -0
- package/dist/src/generated-schemas.js.map +1 -1
- package/dist/src/http-client-factory.d.ts +62 -0
- package/dist/src/http-client-factory.d.ts.map +1 -0
- package/dist/src/http-client-factory.js +133 -0
- package/dist/src/http-client-factory.js.map +1 -0
- package/dist/src/http-transport-config.d.ts +6 -0
- package/dist/src/http-transport-config.d.ts.map +1 -0
- package/dist/src/http-transport-config.js +47 -0
- package/dist/src/http-transport-config.js.map +1 -0
- package/dist/src/http-transport.d.ts +316 -0
- package/dist/src/http-transport.d.ts.map +1 -0
- package/dist/src/http-transport.js +2412 -0
- package/dist/src/http-transport.js.map +1 -0
- package/dist/src/index.js +0 -0
- package/dist/src/interceptors.d.ts +116 -0
- package/dist/src/interceptors.d.ts.map +1 -0
- package/dist/src/interceptors.js +392 -0
- package/dist/src/interceptors.js.map +1 -0
- package/dist/src/jsonrpc-validator.d.ts +27 -0
- package/dist/src/jsonrpc-validator.d.ts.map +1 -0
- package/dist/src/jsonrpc-validator.js +58 -0
- package/dist/src/jsonrpc-validator.js.map +1 -0
- package/dist/src/logger.d.ts +59 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +177 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/mcp-server-manager.d.ts +20 -0
- package/dist/src/mcp-server-manager.d.ts.map +1 -0
- package/dist/src/mcp-server-manager.js +38 -0
- package/dist/src/mcp-server-manager.js.map +1 -0
- package/dist/src/mcp-server.d.ts +203 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +1369 -0
- package/dist/src/mcp-server.js.map +1 -0
- package/dist/src/metrics.d.ts +97 -0
- package/dist/src/metrics.d.ts.map +1 -0
- package/dist/src/metrics.js +273 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/naming-warnings.d.ts +23 -0
- package/dist/src/naming-warnings.d.ts.map +1 -0
- package/dist/src/naming-warnings.js +83 -0
- package/dist/src/naming-warnings.js.map +1 -0
- package/dist/src/naming.d.ts +58 -0
- package/dist/src/naming.d.ts.map +1 -0
- package/dist/src/naming.js +510 -0
- package/dist/src/naming.js.map +1 -0
- package/dist/src/oauth-provider.d.ts +131 -0
- package/dist/src/oauth-provider.d.ts.map +1 -0
- package/dist/src/oauth-provider.js +836 -0
- package/dist/src/oauth-provider.js.map +1 -0
- package/dist/src/openapi/openapi-parser.d.ts.map +1 -1
- package/dist/src/openapi/openapi-parser.js +22 -0
- package/dist/src/openapi/openapi-parser.js.map +1 -1
- package/dist/src/openapi-parser.d.ts +70 -0
- package/dist/src/openapi-parser.d.ts.map +1 -0
- package/dist/src/openapi-parser.js +436 -0
- package/dist/src/openapi-parser.js.map +1 -0
- package/dist/src/profile/profile-loader.d.ts.map +1 -1
- package/dist/src/profile/profile-loader.js +8 -1
- package/dist/src/profile/profile-loader.js.map +1 -1
- package/dist/src/profile/profile-registry.d.ts +2 -1
- package/dist/src/profile/profile-registry.d.ts.map +1 -1
- package/dist/src/profile/profile-registry.js +18 -1
- package/dist/src/profile/profile-registry.js.map +1 -1
- package/dist/src/profile/profile-resolver.d.ts +16 -0
- package/dist/src/profile/profile-resolver.d.ts.map +1 -1
- package/dist/src/profile/profile-resolver.js +120 -0
- package/dist/src/profile/profile-resolver.js.map +1 -1
- package/dist/src/profile-loader.d.ts +78 -0
- package/dist/src/profile-loader.d.ts.map +1 -0
- package/dist/src/profile-loader.js +483 -0
- package/dist/src/profile-loader.js.map +1 -0
- package/dist/src/profile-registry.d.ts +18 -0
- package/dist/src/profile-registry.d.ts.map +1 -0
- package/dist/src/profile-registry.js +26 -0
- package/dist/src/profile-registry.js.map +1 -0
- package/dist/src/profile-resolver.d.ts +19 -0
- package/dist/src/profile-resolver.d.ts.map +1 -0
- package/dist/src/profile-resolver.js +167 -0
- package/dist/src/profile-resolver.js.map +1 -0
- package/dist/src/proxy-executor.d.ts +86 -0
- package/dist/src/proxy-executor.d.ts.map +1 -0
- package/dist/src/proxy-executor.js +497 -0
- package/dist/src/proxy-executor.js.map +1 -0
- package/dist/src/schema-validator.d.ts +30 -0
- package/dist/src/schema-validator.d.ts.map +1 -0
- package/dist/src/schema-validator.js +128 -0
- package/dist/src/schema-validator.js.map +1 -0
- package/dist/src/startup-profile.d.ts +17 -0
- package/dist/src/startup-profile.d.ts.map +1 -0
- package/dist/src/startup-profile.js +30 -0
- package/dist/src/startup-profile.js.map +1 -0
- package/dist/src/startup-validation.d.ts +11 -0
- package/dist/src/startup-validation.d.ts.map +1 -0
- package/dist/src/startup-validation.js +21 -0
- package/dist/src/startup-validation.js.map +1 -0
- package/dist/src/tool-filter.d.ts +65 -0
- package/dist/src/tool-filter.d.ts.map +1 -0
- package/dist/src/tool-filter.js +471 -0
- package/dist/src/tool-filter.js.map +1 -0
- package/dist/src/tool-generator.d.ts +67 -0
- package/dist/src/tool-generator.d.ts.map +1 -0
- package/dist/src/tool-generator.js +182 -0
- package/dist/src/tool-generator.js.map +1 -0
- package/dist/src/tooling/composite-executor.d.ts.map +1 -1
- package/dist/src/tooling/composite-executor.js +7 -2
- package/dist/src/tooling/composite-executor.js.map +1 -1
- package/dist/src/tooling/proxy-executor.d.ts.map +1 -1
- package/dist/src/tooling/proxy-executor.js +4 -0
- package/dist/src/tooling/proxy-executor.js.map +1 -1
- package/dist/src/tooling/tool-generator.d.ts.map +1 -1
- package/dist/src/tooling/tool-generator.js +36 -3
- package/dist/src/tooling/tool-generator.js.map +1 -1
- package/dist/src/transport/http-transport-config.d.ts.map +1 -1
- package/dist/src/transport/http-transport-config.js +1 -0
- package/dist/src/transport/http-transport-config.js.map +1 -1
- package/dist/src/transport/http-transport.d.ts +5 -0
- package/dist/src/transport/http-transport.d.ts.map +1 -1
- package/dist/src/transport/http-transport.js +63 -1
- package/dist/src/transport/http-transport.js.map +1 -1
- package/dist/src/transport/profile-index.d.ts +84 -0
- package/dist/src/transport/profile-index.d.ts.map +1 -0
- package/dist/src/transport/profile-index.js +405 -0
- package/dist/src/transport/profile-index.js.map +1 -0
- package/dist/src/types/http-transport.d.ts +1 -0
- package/dist/src/types/http-transport.d.ts.map +1 -1
- package/dist/src/types/openapi.d.ts +3 -0
- package/dist/src/types/openapi.d.ts.map +1 -1
- package/dist/src/types/profile.d.ts +3 -0
- package/dist/src/types/profile.d.ts.map +1 -1
- package/dist/src/validation/validation-utils.d.ts.map +1 -1
- package/dist/src/validation/validation-utils.js +1 -0
- package/dist/src/validation/validation-utils.js.map +1 -1
- package/dist/src/validation-utils.d.ts +49 -0
- package/dist/src/validation-utils.d.ts.map +1 -0
- package/dist/src/validation-utils.js +138 -0
- package/dist/src/validation-utils.js.map +1 -0
- package/html/profile-index.html +386 -0
- package/package.json +2 -1
- package/profile-schema.json +14 -0
- package/profiles/gitlab/developer-profile-oauth.json +1 -1
- package/profiles/gitlab/developer-profile.json +1508 -0
- package/profiles/gitlab/developer-profile.test.json +3432 -0
- package/profiles/n8n/profile-optimized.json +1 -1
- package/profiles/n8n/profile.json +1 -1
- package/profiles/n8n-nodes/profile-nodes.json +1 -1
- package/profiles/semgrep/profile.json +1 -1
- package/profiles/youtrack/profile.json +1 -1
|
@@ -0,0 +1,177 @@
|
|
|
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
|
+
import { redactHeader, redactQueryParam, redactParam } from './validation-utils.js';
|
|
10
|
+
const WELL_KNOWN_SECRET_KEYS = new Set([
|
|
11
|
+
'access_token',
|
|
12
|
+
'refresh_token',
|
|
13
|
+
'id_token',
|
|
14
|
+
'client_secret',
|
|
15
|
+
'client_assertion',
|
|
16
|
+
'code',
|
|
17
|
+
'code_verifier',
|
|
18
|
+
]);
|
|
19
|
+
function deepRedactWellKnownSecrets(value, depth = 0, seen) {
|
|
20
|
+
if (depth > 20)
|
|
21
|
+
return value;
|
|
22
|
+
if (value === null || typeof value !== 'object')
|
|
23
|
+
return value;
|
|
24
|
+
if (!seen)
|
|
25
|
+
seen = new WeakSet();
|
|
26
|
+
if (seen.has(value))
|
|
27
|
+
return value;
|
|
28
|
+
seen.add(value);
|
|
29
|
+
if (Array.isArray(value)) {
|
|
30
|
+
return value.map(item => deepRedactWellKnownSecrets(item, depth + 1, seen));
|
|
31
|
+
}
|
|
32
|
+
const record = value;
|
|
33
|
+
const out = {};
|
|
34
|
+
for (const [key, val] of Object.entries(record)) {
|
|
35
|
+
if (WELL_KNOWN_SECRET_KEYS.has(key)) {
|
|
36
|
+
out[key] = '[REDACTED]';
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
out[key] = deepRedactWellKnownSecrets(val, depth + 1, seen);
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
function resolveLogLevel(explicitLevel) {
|
|
44
|
+
if (explicitLevel !== undefined)
|
|
45
|
+
return explicitLevel;
|
|
46
|
+
const envLevel = process.env.MCP4_LOG_LEVEL?.toUpperCase();
|
|
47
|
+
return envLevel && envLevel in LogLevel
|
|
48
|
+
? LogLevel[envLevel]
|
|
49
|
+
: LogLevel.INFO;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Sanitize log message to prevent log injection
|
|
53
|
+
* Replaces newlines with escaped string representation
|
|
54
|
+
*/
|
|
55
|
+
export function sanitizeLogMessage(message) {
|
|
56
|
+
return message.replace(/\n/g, '\\n').replace(/\r/g, '\\r');
|
|
57
|
+
}
|
|
58
|
+
function redactSensitiveContext(data, authConfig) {
|
|
59
|
+
const redacted = deepRedactWellKnownSecrets(data);
|
|
60
|
+
if (!authConfig)
|
|
61
|
+
return redacted;
|
|
62
|
+
switch (authConfig.type) {
|
|
63
|
+
case 'bearer':
|
|
64
|
+
redacted.headers = redactHeader(redacted.headers, 'authorization');
|
|
65
|
+
break;
|
|
66
|
+
case 'custom-header':
|
|
67
|
+
if (authConfig.header_name) {
|
|
68
|
+
redacted.headers = redactHeader(redacted.headers, authConfig.header_name.toLowerCase());
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
case 'query':
|
|
72
|
+
if (authConfig.query_param) {
|
|
73
|
+
redacted.url = redactQueryParam(redacted.url, authConfig.query_param);
|
|
74
|
+
redacted.params = redactParam(redacted.params, authConfig.query_param);
|
|
75
|
+
}
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
return redacted;
|
|
79
|
+
}
|
|
80
|
+
export var LogLevel;
|
|
81
|
+
(function (LogLevel) {
|
|
82
|
+
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
83
|
+
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
84
|
+
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
85
|
+
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
86
|
+
LogLevel[LogLevel["SILENT"] = 4] = "SILENT";
|
|
87
|
+
})(LogLevel || (LogLevel = {}));
|
|
88
|
+
/**
|
|
89
|
+
* Default logger - writes to stderr, respects MCP4_LOG_LEVEL env var
|
|
90
|
+
*
|
|
91
|
+
* Security: Redacts auth tokens based on profile configuration
|
|
92
|
+
*/
|
|
93
|
+
export class ConsoleLogger {
|
|
94
|
+
constructor(level, authConfig) {
|
|
95
|
+
this.level = resolveLogLevel(level);
|
|
96
|
+
this.authConfig = authConfig;
|
|
97
|
+
}
|
|
98
|
+
debug(message, context) {
|
|
99
|
+
if (this.level <= LogLevel.DEBUG) {
|
|
100
|
+
this.write('DEBUG', message, context);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
info(message, context) {
|
|
104
|
+
if (this.level <= LogLevel.INFO) {
|
|
105
|
+
this.write('INFO', message, context);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
warn(message, context) {
|
|
109
|
+
if (this.level <= LogLevel.WARN) {
|
|
110
|
+
this.write('WARN', message, context);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
error(message, error, context) {
|
|
114
|
+
if (this.level <= LogLevel.ERROR) {
|
|
115
|
+
const errorContext = error ? {
|
|
116
|
+
error: error.message,
|
|
117
|
+
stack: error.stack,
|
|
118
|
+
...context,
|
|
119
|
+
} : context;
|
|
120
|
+
this.write('ERROR', message, errorContext);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
write(level, message, context) {
|
|
124
|
+
const timestamp = new Date().toISOString();
|
|
125
|
+
const redacted = context ? redactSensitiveContext(context, this.authConfig) : undefined;
|
|
126
|
+
const ctx = redacted ? ` ${JSON.stringify(redacted)}` : '';
|
|
127
|
+
const safeMessage = sanitizeLogMessage(message);
|
|
128
|
+
console.error(`[${timestamp}] ${level}: ${safeMessage}${ctx}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Structured JSON logger for production
|
|
133
|
+
*
|
|
134
|
+
* Why: Machine-readable logs for log aggregation systems (ELK, Splunk, etc.)
|
|
135
|
+
* Security: Redacts auth tokens based on profile configuration
|
|
136
|
+
*/
|
|
137
|
+
export class JsonLogger {
|
|
138
|
+
constructor(level, authConfig) {
|
|
139
|
+
this.level = resolveLogLevel(level);
|
|
140
|
+
this.authConfig = authConfig;
|
|
141
|
+
}
|
|
142
|
+
debug(message, context) {
|
|
143
|
+
if (this.level <= LogLevel.DEBUG) {
|
|
144
|
+
this.write('debug', message, context);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
info(message, context) {
|
|
148
|
+
if (this.level <= LogLevel.INFO) {
|
|
149
|
+
this.write('info', message, context);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
warn(message, context) {
|
|
153
|
+
if (this.level <= LogLevel.WARN) {
|
|
154
|
+
this.write('warn', message, context);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
error(message, error, context) {
|
|
158
|
+
if (this.level <= LogLevel.ERROR) {
|
|
159
|
+
this.write('error', message, {
|
|
160
|
+
error: error?.message,
|
|
161
|
+
stack: error?.stack,
|
|
162
|
+
...context,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
write(level, message, context) {
|
|
167
|
+
const redacted = context ? redactSensitiveContext(context, this.authConfig) : undefined;
|
|
168
|
+
const log = {
|
|
169
|
+
timestamp: new Date().toISOString(),
|
|
170
|
+
level,
|
|
171
|
+
message,
|
|
172
|
+
...redacted,
|
|
173
|
+
};
|
|
174
|
+
console.error(JSON.stringify(log));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server manager for multi-profile HTTP routing.
|
|
3
|
+
*/
|
|
4
|
+
import type { Logger } from './logger.js';
|
|
5
|
+
import { MCPServer } from './mcp-server.js';
|
|
6
|
+
import type { HttpProfileContext } from './types/http-transport.js';
|
|
7
|
+
import type { HttpTransport } from './http-transport.js';
|
|
8
|
+
import { ProfileRegistry } from './profile-registry.js';
|
|
9
|
+
export declare class MCPServerManager {
|
|
10
|
+
private registry;
|
|
11
|
+
private logger;
|
|
12
|
+
private httpTransport?;
|
|
13
|
+
private servers;
|
|
14
|
+
constructor(registry: ProfileRegistry, logger: Logger, httpTransport?: HttpTransport);
|
|
15
|
+
getDefaultProfileId(): string | undefined;
|
|
16
|
+
getProfileContext(profileId: string): Promise<HttpProfileContext | null>;
|
|
17
|
+
getServer(profileId: string): Promise<MCPServer>;
|
|
18
|
+
private createServer;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=mcp-server-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-manager.d.ts","sourceRoot":"","sources":["../../src/mcp-server-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAyC;gBAE5C,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAMpF,mBAAmB,IAAI,MAAM,GAAG,SAAS;IAInC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKxE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YAWxC,YAAY;CAS3B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server manager for multi-profile HTTP routing.
|
|
3
|
+
*/
|
|
4
|
+
import { MCPServer } from './mcp-server.js';
|
|
5
|
+
export class MCPServerManager {
|
|
6
|
+
constructor(registry, logger, httpTransport) {
|
|
7
|
+
this.servers = new Map();
|
|
8
|
+
this.registry = registry;
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
this.httpTransport = httpTransport;
|
|
11
|
+
}
|
|
12
|
+
getDefaultProfileId() {
|
|
13
|
+
return this.registry.getDefaultProfile()?.profileId;
|
|
14
|
+
}
|
|
15
|
+
async getProfileContext(profileId) {
|
|
16
|
+
const server = await this.getServer(profileId);
|
|
17
|
+
return server.getHttpProfileContext();
|
|
18
|
+
}
|
|
19
|
+
async getServer(profileId) {
|
|
20
|
+
const existing = this.servers.get(profileId);
|
|
21
|
+
if (existing) {
|
|
22
|
+
return existing;
|
|
23
|
+
}
|
|
24
|
+
const createPromise = this.createServer(profileId);
|
|
25
|
+
this.servers.set(profileId, createPromise);
|
|
26
|
+
return createPromise;
|
|
27
|
+
}
|
|
28
|
+
async createServer(profileId) {
|
|
29
|
+
const resolved = await this.registry.resolveProfile(profileId);
|
|
30
|
+
const server = new MCPServer(this.logger);
|
|
31
|
+
await server.initialize(resolved.specPath, resolved.profilePath);
|
|
32
|
+
if (this.httpTransport) {
|
|
33
|
+
server.attachHttpTransport(this.httpTransport);
|
|
34
|
+
}
|
|
35
|
+
return server;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=mcp-server-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-manager.js","sourceRoot":"","sources":["../../src/mcp-server-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,MAAM,OAAO,gBAAgB;IAM3B,YAAY,QAAyB,EAAE,MAAc,EAAE,aAA6B;QAF5E,YAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;QAGtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,SAAS,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAiB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3C,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,SAAiB;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,203 @@
|
|
|
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
|
+
import type { HttpProfileContext } from './types/http-transport.js';
|
|
9
|
+
import type { HttpTransport } from './http-transport.js';
|
|
10
|
+
export declare class MCPServer {
|
|
11
|
+
private server;
|
|
12
|
+
private parser;
|
|
13
|
+
private profile?;
|
|
14
|
+
private toolGenerator;
|
|
15
|
+
private httpClientFactory;
|
|
16
|
+
private compositeExecutor?;
|
|
17
|
+
private schemaValidator;
|
|
18
|
+
private logger;
|
|
19
|
+
private httpTransport;
|
|
20
|
+
private stdioFiltering?;
|
|
21
|
+
private toolFilterService?;
|
|
22
|
+
private globalToolFilterSummary?;
|
|
23
|
+
/**
|
|
24
|
+
* Execute a tools/call request via the JSON-RPC handler.
|
|
25
|
+
* Intended for internal use and tests to avoid accessing private methods.
|
|
26
|
+
*/
|
|
27
|
+
callToolRpc(name: string, args: Record<string, unknown>, sessionId?: string, requestId?: string | number): Promise<unknown>;
|
|
28
|
+
/**
|
|
29
|
+
* Filter response payload to include only specified fields.
|
|
30
|
+
*
|
|
31
|
+
* Supports YouTrack-style field selectors like:
|
|
32
|
+
* - "author(id,login)"
|
|
33
|
+
* - "comments(id,text,author(id,login))"
|
|
34
|
+
*
|
|
35
|
+
* Recurses into nested objects and arrays when subfields are specified.
|
|
36
|
+
*/
|
|
37
|
+
private filterFields;
|
|
38
|
+
private parseFieldSelection;
|
|
39
|
+
private mergeFieldSelector;
|
|
40
|
+
private mergeSelectionTrees;
|
|
41
|
+
private splitTopLevel;
|
|
42
|
+
private applyFieldSelection;
|
|
43
|
+
/**
|
|
44
|
+
* Format error message for client with correlation ID
|
|
45
|
+
*
|
|
46
|
+
* Why: Categorize errors as "safe" (4xx client errors) vs "unsafe" (5xx server errors)
|
|
47
|
+
* Safe errors show API message to help user fix the issue
|
|
48
|
+
* Unsafe errors show generic message to avoid leaking sensitive info
|
|
49
|
+
*/
|
|
50
|
+
private formatErrorForClient;
|
|
51
|
+
constructor(logger?: Logger);
|
|
52
|
+
initialize(specPath: string, profilePath?: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Create logger with auth configuration for token redaction
|
|
55
|
+
*
|
|
56
|
+
* Why: Prevents sensitive tokens from appearing in logs
|
|
57
|
+
*/
|
|
58
|
+
private createLoggerWithAuth;
|
|
59
|
+
/**
|
|
60
|
+
* Check tool name lengths and warn if needed
|
|
61
|
+
*/
|
|
62
|
+
private checkToolNameLengths;
|
|
63
|
+
/**
|
|
64
|
+
* Get base URL from profile config or OpenAPI spec
|
|
65
|
+
*/
|
|
66
|
+
private getBaseUrl;
|
|
67
|
+
/**
|
|
68
|
+
* Get auth configurations as array (supports single or multiple auth methods)
|
|
69
|
+
* Returns array sorted by priority (lower = higher priority)
|
|
70
|
+
*/
|
|
71
|
+
private getAuthConfigs;
|
|
72
|
+
/**
|
|
73
|
+
* Get primary (highest priority) auth configuration
|
|
74
|
+
*/
|
|
75
|
+
private getPrimaryAuthConfig;
|
|
76
|
+
/**
|
|
77
|
+
* Get highest priority auth configuration that reads token from environment
|
|
78
|
+
*/
|
|
79
|
+
private getEnvBackedAuthConfig;
|
|
80
|
+
/**
|
|
81
|
+
* Get OAuth configuration from auth configs (if any)
|
|
82
|
+
*/
|
|
83
|
+
private getOAuthConfig;
|
|
84
|
+
private buildOAuthConfigWithAllowedRedirectHosts;
|
|
85
|
+
private getProfileIdValue;
|
|
86
|
+
private getOAuthRateLimitConfig;
|
|
87
|
+
getHttpProfileContext(): HttpProfileContext;
|
|
88
|
+
/**
|
|
89
|
+
* Extract hostnames from origin patterns for OAuth redirect validation
|
|
90
|
+
* e.g., "http://localhost:*,https://app.example.com" -> ["localhost", "app.example.com"]
|
|
91
|
+
*
|
|
92
|
+
* Filters out CIDR blocks (e.g., "127.0.0.1/8") which are valid for origin validation
|
|
93
|
+
* but not for OAuth redirect URI validation
|
|
94
|
+
*/
|
|
95
|
+
private extractHostsFromOrigins;
|
|
96
|
+
/**
|
|
97
|
+
* Get or create HTTP client for session
|
|
98
|
+
*/
|
|
99
|
+
private getHttpClientForSession;
|
|
100
|
+
/**
|
|
101
|
+
* Get auth token from HTTP transport session
|
|
102
|
+
* Ensures token is valid (refreshes if expired) before returning
|
|
103
|
+
*/
|
|
104
|
+
private getAuthTokenFromSession;
|
|
105
|
+
/**
|
|
106
|
+
* Cleanup HTTP client for destroyed session
|
|
107
|
+
*
|
|
108
|
+
* Why: Prevent memory leak - sessions expire but cached clients stay forever
|
|
109
|
+
*/
|
|
110
|
+
private cleanupSessionClient;
|
|
111
|
+
/**
|
|
112
|
+
* Setup MCP request handlers
|
|
113
|
+
*/
|
|
114
|
+
private setupHandlers;
|
|
115
|
+
/**
|
|
116
|
+
* Execute simple (non-composite) tool
|
|
117
|
+
*
|
|
118
|
+
* Why separate: Simple tools map directly to single OpenAPI operation.
|
|
119
|
+
* No result aggregation needed.
|
|
120
|
+
*/
|
|
121
|
+
private executeSimpleTool;
|
|
122
|
+
/**
|
|
123
|
+
* Execute proxy download operation
|
|
124
|
+
*
|
|
125
|
+
* Why: Some APIs return authenticated URLs that LLMs cannot fetch directly.
|
|
126
|
+
* This proxies the download through the MCP server.
|
|
127
|
+
*/
|
|
128
|
+
private executeProxyDownload;
|
|
129
|
+
/**
|
|
130
|
+
* Encode path segment if it contains special characters (like slashes)
|
|
131
|
+
*
|
|
132
|
+
* Why: GitLab and other APIs require path parameters (like project paths)
|
|
133
|
+
* to be URL-encoded when used in URL path.
|
|
134
|
+
*/
|
|
135
|
+
private encodePathSegment;
|
|
136
|
+
/**
|
|
137
|
+
* Resolve path parameters using profile aliases
|
|
138
|
+
*
|
|
139
|
+
* Why aliases: Different tools may use different parameter names for same path param.
|
|
140
|
+
* Example: GitLab uses "resource_id", "project_id", "group_id" all mapping to "{id}"
|
|
141
|
+
*/
|
|
142
|
+
private resolvePath;
|
|
143
|
+
/**
|
|
144
|
+
* Extract query parameters from args
|
|
145
|
+
*
|
|
146
|
+
* Why: Separate query params from body params. Array handling is done by HttpClient
|
|
147
|
+
* based on profile's array_format setting.
|
|
148
|
+
*/
|
|
149
|
+
private extractQueryParams;
|
|
150
|
+
/**
|
|
151
|
+
* Extract request body from args
|
|
152
|
+
*
|
|
153
|
+
* Why: For create/update operations, collect non-metadata fields into body.
|
|
154
|
+
* Metadata (action, resource_type, etc.) are not sent to API.
|
|
155
|
+
* Path/query parameters are excluded from body UNLESS they're also in request body schema.
|
|
156
|
+
*
|
|
157
|
+
* Uses metadata_params from tool definition, defaults to ['action', 'resource_type']
|
|
158
|
+
*/
|
|
159
|
+
private extractBody;
|
|
160
|
+
/**
|
|
161
|
+
* Start server with stdio transport
|
|
162
|
+
*/
|
|
163
|
+
runStdio(): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Start server with HTTP transport
|
|
166
|
+
*
|
|
167
|
+
* Implements MCP Specification 2025-03-26 Streamable HTTP transport
|
|
168
|
+
*
|
|
169
|
+
* Why: Enables remote MCP server access with SSE streaming, session management,
|
|
170
|
+
* and resumability for reliable communication over HTTP.
|
|
171
|
+
*/
|
|
172
|
+
runHttp(host: string, port: number): Promise<void>;
|
|
173
|
+
attachHttpTransport(transport: HttpTransport): void;
|
|
174
|
+
handleSessionDestroyed(profileId: string, sessionId: string): void;
|
|
175
|
+
/**
|
|
176
|
+
* Handle JSON-RPC message from HTTP transport
|
|
177
|
+
*
|
|
178
|
+
* Why: Unified message handling for both stdio and HTTP transports
|
|
179
|
+
*/
|
|
180
|
+
private handleJsonRpcMessage;
|
|
181
|
+
handleHttpMessage(message: unknown, sessionId?: string, profileId?: string): Promise<unknown>;
|
|
182
|
+
private handleInitialize;
|
|
183
|
+
private handleToolCall;
|
|
184
|
+
private getFilteringForSession;
|
|
185
|
+
private getToolFilterForSession;
|
|
186
|
+
private getFilteringOperationInfo;
|
|
187
|
+
private handleOtherRequest;
|
|
188
|
+
private applyGlobalToolFiltering;
|
|
189
|
+
private applySessionToolFiltering;
|
|
190
|
+
private buildToolFilterResolver;
|
|
191
|
+
private validateCompositeToolsAgainstFilteredOperations;
|
|
192
|
+
private getToolFilterWarnThresholdPct;
|
|
193
|
+
private recordGlobalToolFilterMetrics;
|
|
194
|
+
private recordSessionToolFilterMetrics;
|
|
195
|
+
private recordToolFilterRejection;
|
|
196
|
+
/**
|
|
197
|
+
* Stop the MCP server gracefully
|
|
198
|
+
*
|
|
199
|
+
* Why: Cleanup resources, close connections, allow graceful shutdown
|
|
200
|
+
*/
|
|
201
|
+
stop(): Promise<void>;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAqB1C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,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,iBAAiB,CAA2B;IACpD,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,uBAAuB,CAAC,CAK9B;IAEF;;;OAGG;IACG,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,GAAE,MAAM,GAAG,MAAU,GAC7B,OAAO,CAAC,OAAO,CAAC;IAcnB;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,mBAAmB;IA6B3B;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;gBAkDhB,MAAM,CAAC,EAAE,MAAM;IAqBrB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8DvE;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,wCAAwC;IAchD,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,uBAAuB;IAaxB,qBAAqB,IAAI,kBAAkB;IAwBlD;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA6B/B;;OAEG;YACW,uBAAuB;IAuCrC;;;OAGG;YACW,uBAAuB;IAuBrC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAuFrB;;;;;OAKG;YACW,iBAAiB;IAmG/B;;;;;OAKG;YACW,oBAAoB;IAwDlC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAyBnB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAoC1B;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW;IAkDnB;;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;IAmDjD,mBAAmB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAInD,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzE;;;;OAIG;YACW,oBAAoB;IAgBrB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1G,OAAO,CAAC,gBAAgB;YA0CV,cAAc;IAsI5B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,yBAAyB;YAcnB,kBAAkB;IAsDhC,OAAO,CAAC,wBAAwB;IAyFhC,OAAO,CAAC,yBAAyB;IA4CjC,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,+CAA+C;IA2DvD,OAAO,CAAC,6BAA6B;IAcrC,OAAO,CAAC,6BAA6B;IAUrC,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,yBAAyB;IAUjC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
|