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
@@ -1,177 +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
- 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
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,38 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,203 +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
- 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
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"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"}