mcp4openapi 0.3.1 → 0.3.4

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 (160) hide show
  1. package/README.md +7 -0
  2. package/dist/src/auth/oauth-provider.d.ts +1 -0
  3. package/dist/src/auth/oauth-provider.d.ts.map +1 -1
  4. package/dist/src/auth/oauth-provider.js +17 -0
  5. package/dist/src/auth/oauth-provider.js.map +1 -1
  6. package/dist/src/core/cli-config.d.ts.map +1 -1
  7. package/dist/src/core/cli-config.js +2 -0
  8. package/dist/src/core/cli-config.js.map +1 -1
  9. package/dist/src/core/index.d.ts.map +1 -1
  10. package/dist/src/core/index.js +18 -3
  11. package/dist/src/core/index.js.map +1 -1
  12. package/dist/src/index.js +0 -0
  13. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  14. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  15. package/dist/src/profile/profile-allowlist.js +68 -0
  16. package/dist/src/profile/profile-allowlist.js.map +1 -0
  17. package/dist/src/profile/profile-registry.d.ts +5 -0
  18. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  19. package/dist/src/profile/profile-registry.js +38 -14
  20. package/dist/src/profile/profile-registry.js.map +1 -1
  21. package/dist/src/security/ssrf-validator.d.ts +31 -0
  22. package/dist/src/security/ssrf-validator.d.ts.map +1 -0
  23. package/dist/src/security/ssrf-validator.js +190 -0
  24. package/dist/src/security/ssrf-validator.js.map +1 -0
  25. package/package.json +2 -2
  26. package/profiles/gitlab/developer-profile-oauth.json +445 -81
  27. package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
  28. package/profiles/gitlab/openapi.yaml +1420 -165
  29. package/profiles/gitlab/profile-optimized-oauth.json +928 -0
  30. package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
  31. package/profiles/grafana/openapi.json +28078 -0
  32. package/profiles/grafana/profile.json +1083 -0
  33. package/profiles/grafana/profile.test.json +235 -0
  34. package/profiles/mattermost/openapi.yaml +27434 -0
  35. package/profiles/mattermost/profile.json +463 -0
  36. package/profiles/mattermost/profile.test.json +607 -0
  37. package/profiles/n8n/profile-optimized.json +1002 -364
  38. package/profiles/n8n/profile-optimized.test.json +43 -43
  39. package/dist/src/argument-normalizer.d.ts +0 -5
  40. package/dist/src/argument-normalizer.d.ts.map +0 -1
  41. package/dist/src/argument-normalizer.js +0 -61
  42. package/dist/src/argument-normalizer.js.map +0 -1
  43. package/dist/src/cli-config.d.ts +0 -9
  44. package/dist/src/cli-config.d.ts.map +0 -1
  45. package/dist/src/cli-config.js +0 -111
  46. package/dist/src/cli-config.js.map +0 -1
  47. package/dist/src/composite-executor.d.ts +0 -77
  48. package/dist/src/composite-executor.d.ts.map +0 -1
  49. package/dist/src/composite-executor.js +0 -193
  50. package/dist/src/composite-executor.js.map +0 -1
  51. package/dist/src/constants.d.ts +0 -85
  52. package/dist/src/constants.d.ts.map +0 -1
  53. package/dist/src/constants.js +0 -85
  54. package/dist/src/constants.js.map +0 -1
  55. package/dist/src/dag-executor.d.ts +0 -49
  56. package/dist/src/dag-executor.d.ts.map +0 -1
  57. package/dist/src/dag-executor.js +0 -138
  58. package/dist/src/dag-executor.js.map +0 -1
  59. package/dist/src/errors.d.ts +0 -59
  60. package/dist/src/errors.d.ts.map +0 -1
  61. package/dist/src/errors.js +0 -119
  62. package/dist/src/errors.js.map +0 -1
  63. package/dist/src/filtering.d.ts +0 -19
  64. package/dist/src/filtering.d.ts.map +0 -1
  65. package/dist/src/filtering.js +0 -292
  66. package/dist/src/filtering.js.map +0 -1
  67. package/dist/src/http-client-factory.d.ts +0 -62
  68. package/dist/src/http-client-factory.d.ts.map +0 -1
  69. package/dist/src/http-client-factory.js +0 -133
  70. package/dist/src/http-client-factory.js.map +0 -1
  71. package/dist/src/http-transport-config.d.ts +0 -6
  72. package/dist/src/http-transport-config.d.ts.map +0 -1
  73. package/dist/src/http-transport-config.js +0 -47
  74. package/dist/src/http-transport-config.js.map +0 -1
  75. package/dist/src/http-transport.d.ts +0 -316
  76. package/dist/src/http-transport.d.ts.map +0 -1
  77. package/dist/src/http-transport.js +0 -2412
  78. package/dist/src/http-transport.js.map +0 -1
  79. package/dist/src/interceptors.d.ts +0 -116
  80. package/dist/src/interceptors.d.ts.map +0 -1
  81. package/dist/src/interceptors.js +0 -392
  82. package/dist/src/interceptors.js.map +0 -1
  83. package/dist/src/jsonrpc-validator.d.ts +0 -27
  84. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  85. package/dist/src/jsonrpc-validator.js +0 -58
  86. package/dist/src/jsonrpc-validator.js.map +0 -1
  87. package/dist/src/logger.d.ts +0 -59
  88. package/dist/src/logger.d.ts.map +0 -1
  89. package/dist/src/logger.js +0 -177
  90. package/dist/src/logger.js.map +0 -1
  91. package/dist/src/mcp-server-manager.d.ts +0 -20
  92. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  93. package/dist/src/mcp-server-manager.js +0 -38
  94. package/dist/src/mcp-server-manager.js.map +0 -1
  95. package/dist/src/mcp-server.d.ts +0 -203
  96. package/dist/src/mcp-server.d.ts.map +0 -1
  97. package/dist/src/mcp-server.js +0 -1369
  98. package/dist/src/mcp-server.js.map +0 -1
  99. package/dist/src/metrics.d.ts +0 -97
  100. package/dist/src/metrics.d.ts.map +0 -1
  101. package/dist/src/metrics.js +0 -273
  102. package/dist/src/metrics.js.map +0 -1
  103. package/dist/src/naming-warnings.d.ts +0 -23
  104. package/dist/src/naming-warnings.d.ts.map +0 -1
  105. package/dist/src/naming-warnings.js +0 -83
  106. package/dist/src/naming-warnings.js.map +0 -1
  107. package/dist/src/naming.d.ts +0 -58
  108. package/dist/src/naming.d.ts.map +0 -1
  109. package/dist/src/naming.js +0 -510
  110. package/dist/src/naming.js.map +0 -1
  111. package/dist/src/oauth-provider.d.ts +0 -131
  112. package/dist/src/oauth-provider.d.ts.map +0 -1
  113. package/dist/src/oauth-provider.js +0 -836
  114. package/dist/src/oauth-provider.js.map +0 -1
  115. package/dist/src/openapi-parser.d.ts +0 -70
  116. package/dist/src/openapi-parser.d.ts.map +0 -1
  117. package/dist/src/openapi-parser.js +0 -436
  118. package/dist/src/openapi-parser.js.map +0 -1
  119. package/dist/src/profile-loader.d.ts +0 -78
  120. package/dist/src/profile-loader.d.ts.map +0 -1
  121. package/dist/src/profile-loader.js +0 -483
  122. package/dist/src/profile-loader.js.map +0 -1
  123. package/dist/src/profile-registry.d.ts +0 -18
  124. package/dist/src/profile-registry.d.ts.map +0 -1
  125. package/dist/src/profile-registry.js +0 -26
  126. package/dist/src/profile-registry.js.map +0 -1
  127. package/dist/src/profile-resolver.d.ts +0 -19
  128. package/dist/src/profile-resolver.d.ts.map +0 -1
  129. package/dist/src/profile-resolver.js +0 -167
  130. package/dist/src/profile-resolver.js.map +0 -1
  131. package/dist/src/proxy-executor.d.ts +0 -86
  132. package/dist/src/proxy-executor.d.ts.map +0 -1
  133. package/dist/src/proxy-executor.js +0 -497
  134. package/dist/src/proxy-executor.js.map +0 -1
  135. package/dist/src/schema-validator.d.ts +0 -30
  136. package/dist/src/schema-validator.d.ts.map +0 -1
  137. package/dist/src/schema-validator.js +0 -128
  138. package/dist/src/schema-validator.js.map +0 -1
  139. package/dist/src/startup-profile.d.ts +0 -17
  140. package/dist/src/startup-profile.d.ts.map +0 -1
  141. package/dist/src/startup-profile.js +0 -30
  142. package/dist/src/startup-profile.js.map +0 -1
  143. package/dist/src/startup-validation.d.ts +0 -11
  144. package/dist/src/startup-validation.d.ts.map +0 -1
  145. package/dist/src/startup-validation.js +0 -21
  146. package/dist/src/startup-validation.js.map +0 -1
  147. package/dist/src/tool-filter.d.ts +0 -65
  148. package/dist/src/tool-filter.d.ts.map +0 -1
  149. package/dist/src/tool-filter.js +0 -471
  150. package/dist/src/tool-filter.js.map +0 -1
  151. package/dist/src/tool-generator.d.ts +0 -67
  152. package/dist/src/tool-generator.d.ts.map +0 -1
  153. package/dist/src/tool-generator.js +0 -182
  154. package/dist/src/tool-generator.js.map +0 -1
  155. package/dist/src/validation-utils.d.ts +0 -49
  156. package/dist/src/validation-utils.d.ts.map +0 -1
  157. package/dist/src/validation-utils.js +0 -138
  158. package/dist/src/validation-utils.js.map +0 -1
  159. package/profiles/gitlab/developer-profile.json +0 -1508
  160. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -1,471 +0,0 @@
1
- import { ConfigurationError, ValidationError } from './errors.js';
2
- const MAX_REGEX_LENGTH = 100;
3
- const MAX_HEADER_ENTRY_LENGTH = 255;
4
- const DEFAULT_MAX_SESSION_ENTRIES = 100;
5
- export function normalizeToolName(name) {
6
- return name.normalize('NFC');
7
- }
8
- export function normalizeToolFilterHeaderValue(value) {
9
- if (value === undefined || value === null) {
10
- return undefined;
11
- }
12
- const trimmed = value.trim();
13
- return trimmed.length > 0 ? trimmed : '';
14
- }
15
- export function parseToolFilterConfig(env) {
16
- const allowListRaw = env.MCP4_TOOL_FILTER_ALLOW_NAMES;
17
- const allowRegexRaw = env.MCP4_TOOL_FILTER_ALLOW_NAME_REGEX;
18
- const denyListRaw = env.MCP4_TOOL_FILTER_DENY_NAMES;
19
- const denyRegexRaw = env.MCP4_TOOL_FILTER_DENY_NAME_REGEX;
20
- const allowCategoriesRaw = env.MCP4_TOOL_FILTER_ALLOW_CATEGORIES;
21
- const hasAnyEnv = allowListRaw !== undefined ||
22
- allowRegexRaw !== undefined ||
23
- denyListRaw !== undefined ||
24
- denyRegexRaw !== undefined ||
25
- allowCategoriesRaw !== undefined;
26
- if (!hasAnyEnv) {
27
- return undefined;
28
- }
29
- const allowListEntries = parseCsvList(allowListRaw);
30
- const denyListEntries = parseCsvList(denyListRaw);
31
- const allowRegexEntries = parseCsvList(allowRegexRaw);
32
- const denyRegexEntries = parseCsvList(denyRegexRaw);
33
- const allowCategoryEntries = parseCsvList(allowCategoriesRaw);
34
- const allowList = new Set(allowListEntries.map(normalizeToolName));
35
- const denyList = new Set(denyListEntries.map(normalizeToolName));
36
- const allowRegex = allowRegexEntries.map(pattern => compileRegex(pattern, 'MCP4_TOOL_FILTER_ALLOW_NAME_REGEX', ConfigurationError));
37
- const denyRegex = denyRegexEntries.map(pattern => compileRegex(pattern, 'MCP4_TOOL_FILTER_DENY_NAME_REGEX', ConfigurationError));
38
- const allowCategories = parseAllowCategoryEntries(allowCategoryEntries, 'MCP4_TOOL_FILTER_ALLOW_CATEGORIES', ConfigurationError);
39
- return {
40
- allowList,
41
- denyList,
42
- allowRegex,
43
- denyRegex,
44
- allowCategories,
45
- hasAllowRules: allowListEntries.length > 0 ||
46
- allowRegexEntries.length > 0 ||
47
- allowCategories.size > 0,
48
- sources: {
49
- allowList: allowListEntries,
50
- allowRegex: allowRegexEntries,
51
- denyList: denyListEntries,
52
- denyRegex: denyRegexEntries,
53
- allowCategories: allowCategoryEntries,
54
- },
55
- };
56
- }
57
- export function parseSessionToolFilterHeader(headerValue, maxEntries = getSessionToolFilterMaxEntries()) {
58
- const normalizedHeader = normalizeToolFilterHeaderValue(headerValue) ?? '';
59
- if (!normalizedHeader) {
60
- return {
61
- exactNames: new Set(),
62
- regexPatterns: [],
63
- allowComposite: { allowList: false, allowRead: false },
64
- normalizedHeader: '',
65
- rawEntries: [],
66
- hasRules: false,
67
- };
68
- }
69
- const parts = normalizedHeader.split(',').map(part => part.trim()).filter(Boolean);
70
- if (parts.length > maxEntries) {
71
- throw new ValidationError(`X-Mcp4-Tools contains too many entries (${parts.length} > ${maxEntries}). Reduce to ${maxEntries} or configure MCP4_TOOL_FILTER_SESSION_MAX_TOOLS.`);
72
- }
73
- const exactNames = new Set();
74
- const regexPatterns = [];
75
- const rawEntries = [];
76
- const allowCompositeEntries = [];
77
- for (const entry of parts) {
78
- if (entry.length > MAX_HEADER_ENTRY_LENGTH) {
79
- throw new ValidationError(`X-Mcp4-Tools entry exceeds 255 chars: '${entry}' (${entry.length} chars).`);
80
- }
81
- rawEntries.push(entry);
82
- if (entry === '_allow_list' || entry === '_allow_read') {
83
- allowCompositeEntries.push(entry);
84
- continue;
85
- }
86
- if (entry.startsWith('_allow_')) {
87
- throw new ValidationError('X-Mcp4-Tools supports only _allow_list or _allow_read.');
88
- }
89
- if (entry.startsWith('regex:')) {
90
- const rawPattern = entry.slice('regex:'.length).trim();
91
- if (!rawPattern) {
92
- throw new ValidationError('X-Mcp4-Tools regex entry is empty.');
93
- }
94
- regexPatterns.push(compileRegex(rawPattern, 'X-Mcp4-Tools', ValidationError));
95
- continue;
96
- }
97
- exactNames.add(normalizeToolName(entry));
98
- }
99
- const allowComposite = parseAllowCompositeEntries(allowCompositeEntries, 'X-Mcp4-Tools', ValidationError);
100
- const normalizedEntries = buildNormalizedSessionEntries({
101
- exactNames,
102
- regexPatterns,
103
- allowComposite,
104
- });
105
- return {
106
- exactNames,
107
- regexPatterns,
108
- allowComposite,
109
- normalizedHeader: normalizedEntries.join(', '),
110
- rawEntries,
111
- hasRules: exactNames.size > 0 || regexPatterns.length > 0 || allowComposite.allowList || allowComposite.allowRead,
112
- };
113
- }
114
- export function applyToolFilter(tools, config, resolver) {
115
- const reasons = new Map();
116
- const allowed = [];
117
- const removed = [];
118
- for (const tool of tools) {
119
- const normalizedName = normalizeToolName(tool.name);
120
- const denyReasons = [];
121
- if (config.denyList.has(normalizedName)) {
122
- denyReasons.push(`deny_list:${normalizedName}`);
123
- }
124
- for (const regex of config.denyRegex) {
125
- if (regex.test(normalizedName)) {
126
- denyReasons.push(`deny_regex:${regex.source}`);
127
- }
128
- }
129
- if (denyReasons.length > 0) {
130
- reasons.set(tool.name, denyReasons);
131
- removed.push(tool);
132
- continue;
133
- }
134
- if (config.hasAllowRules) {
135
- const allowReasons = getAllowMatchReasons(tool, normalizedName, config, resolver);
136
- if (allowReasons.length === 0) {
137
- reasons.set(tool.name, getAllowFailureReasons(config));
138
- removed.push(tool);
139
- continue;
140
- }
141
- }
142
- allowed.push(tool);
143
- }
144
- return { allowed, removed, reasons };
145
- }
146
- export function applySessionToolFilter(tools, request, resolver) {
147
- const reasons = new Map();
148
- const allowedToolNames = new Set();
149
- for (const tool of tools) {
150
- const normalizedName = normalizeToolName(tool.name);
151
- const allowReasons = getSessionAllowReasons(tool, normalizedName, request, resolver);
152
- if (!request.hasRules || allowReasons.length > 0) {
153
- allowedToolNames.add(tool.name);
154
- continue;
155
- }
156
- reasons.set(tool.name, [`session_allow_list:${request.normalizedHeader || 'none'}`]);
157
- }
158
- return {
159
- allowedToolNames,
160
- reasons,
161
- patterns: { allow: request.regexPatterns },
162
- allowComposite: request.allowComposite,
163
- normalizedHeader: request.normalizedHeader,
164
- };
165
- }
166
- export function detectListReadOperations(tool, resolver) {
167
- let isList = false;
168
- let isRead = false;
169
- if (tool.composite && tool.steps && resolver?.getOperationForCall) {
170
- // Strict classification for composite tools:
171
- // - isList: every step is a list operation
172
- // - isRead: every step is a read operation
173
- // Mixed list+read composites are neither list nor read.
174
- // Any non-GET step (modify) makes it neither list nor read.
175
- let hasAny = false;
176
- let allList = true;
177
- let allRead = true;
178
- for (const step of tool.steps) {
179
- const operation = resolver.getOperationForCall(step.call);
180
- if (!operation) {
181
- allList = false;
182
- allRead = false;
183
- continue;
184
- }
185
- hasAny = true;
186
- const category = resolveOperationCategory(operation);
187
- if (category !== 'list') {
188
- allList = false;
189
- }
190
- if (category !== 'read') {
191
- allRead = false;
192
- }
193
- }
194
- isList = hasAny && allList;
195
- isRead = hasAny && allRead;
196
- }
197
- else if (tool.operations) {
198
- for (const [action, operationId] of Object.entries(tool.operations)) {
199
- if (typeof operationId === 'string' && resolver?.getOperationById) {
200
- const operation = resolver.getOperationById(operationId);
201
- if (operation) {
202
- const category = resolveOperationCategory(operation);
203
- if (category === 'list') {
204
- isList = true;
205
- }
206
- if (category === 'read') {
207
- isRead = true;
208
- }
209
- continue;
210
- }
211
- }
212
- const actionValue = action.toLowerCase();
213
- if (actionValue === 'list' || actionValue === 'search') {
214
- isList = true;
215
- }
216
- if (actionValue === 'get' || actionValue === 'read') {
217
- isRead = true;
218
- }
219
- }
220
- }
221
- return { isList, isRead };
222
- }
223
- export function validateRegexPattern(pattern) {
224
- if (pattern.length > MAX_REGEX_LENGTH) {
225
- return {
226
- valid: false,
227
- error: `Regex pattern exceeds ${MAX_REGEX_LENGTH} characters.`,
228
- };
229
- }
230
- if (hasNestedQuantifiers(pattern)) {
231
- return {
232
- valid: false,
233
- error: 'Regex pattern contains nested quantifiers.',
234
- };
235
- }
236
- if (hasAmbiguousAlternation(pattern)) {
237
- return {
238
- valid: false,
239
- error: 'Regex pattern contains alternation with a quantifier.',
240
- };
241
- }
242
- return { valid: true };
243
- }
244
- export function getSessionToolFilterMaxEntries() {
245
- const raw = process.env.MCP4_TOOL_FILTER_SESSION_MAX_TOOLS;
246
- if (raw === undefined) {
247
- return DEFAULT_MAX_SESSION_ENTRIES;
248
- }
249
- const parsed = parseInt(raw, 10);
250
- if (Number.isNaN(parsed) || parsed <= 0) {
251
- throw new ConfigurationError(`Invalid MCP4_TOOL_FILTER_SESSION_MAX_TOOLS: expected positive integer, got '${raw}'.`);
252
- }
253
- return parsed;
254
- }
255
- function parseCsvList(value) {
256
- if (!value) {
257
- return [];
258
- }
259
- return value
260
- .split(',')
261
- .map(part => part.trim())
262
- .filter(Boolean);
263
- }
264
- function compileRegex(pattern, context, ErrorType) {
265
- const trimmed = pattern.trim();
266
- const anchored = autoAnchorPattern(trimmed);
267
- const validation = validateRegexPattern(anchored);
268
- if (!validation.valid) {
269
- throw new ErrorType(`${context} regex '${pattern}' is invalid: ${validation.error}`);
270
- }
271
- try {
272
- return new RegExp(anchored);
273
- }
274
- catch (error) {
275
- throw new ErrorType(`${context} regex '${pattern}' is invalid: ${error.message}`);
276
- }
277
- }
278
- function autoAnchorPattern(pattern) {
279
- const anchoredStart = pattern.startsWith('^') ? pattern : `^${pattern}`;
280
- const anchoredEnd = anchoredStart.endsWith('$') ? anchoredStart : `${anchoredStart}$`;
281
- return anchoredEnd;
282
- }
283
- function hasNestedQuantifiers(pattern) {
284
- const nested = /\((?:[^\\]|\\.)*?[+*{](?:[^\\]|\\.)*?\)[+*{]/;
285
- return nested.test(pattern);
286
- }
287
- function hasAmbiguousAlternation(pattern) {
288
- const alternation = /\((?:[^\\]|\\.)*?\|(?:[^\\]|\\.)*?\)[+*{]/;
289
- return alternation.test(pattern);
290
- }
291
- function parseAllowCompositeEntries(entries, context, ErrorType) {
292
- let allowList = false;
293
- let allowRead = false;
294
- for (const entry of entries) {
295
- if (entry === '_allow_list') {
296
- allowList = true;
297
- }
298
- else if (entry === '_allow_read') {
299
- allowRead = true;
300
- }
301
- else if (entry) {
302
- throw new ErrorType(`${context} supports only _allow_list or _allow_read values.`);
303
- }
304
- }
305
- return { allowList, allowRead };
306
- }
307
- function parseAllowCategoryEntries(entries, context, ErrorType) {
308
- const categories = new Set();
309
- for (const entry of entries) {
310
- if (!entry) {
311
- continue;
312
- }
313
- const normalized = entry.trim().toLowerCase();
314
- if (normalized === 'list' || normalized === 'read') {
315
- categories.add(normalized);
316
- continue;
317
- }
318
- throw new ErrorType(`${context} supports only 'list' and/or 'read' values.`);
319
- }
320
- return categories;
321
- }
322
- function resolveOperationCategory(operation) {
323
- const method = operation.method.toLowerCase();
324
- if (method === 'get') {
325
- const hasPathParams = operation.parameters.some(param => param.in === 'path');
326
- return hasPathParams ? 'read' : 'list';
327
- }
328
- return 'modify';
329
- }
330
- function classifyToolOperations(tool, resolver) {
331
- let hasList = false;
332
- let hasRead = false;
333
- let hasModify = false;
334
- if (tool.composite && tool.steps && resolver?.getOperationForCall) {
335
- for (const step of tool.steps) {
336
- const operation = resolver.getOperationForCall(step.call);
337
- if (!operation) {
338
- hasModify = true;
339
- continue;
340
- }
341
- const category = resolveOperationCategory(operation);
342
- if (category === 'list') {
343
- hasList = true;
344
- }
345
- else if (category === 'read') {
346
- hasRead = true;
347
- }
348
- else {
349
- hasModify = true;
350
- }
351
- }
352
- return { hasList, hasRead, hasModify };
353
- }
354
- if (tool.operations) {
355
- for (const [action, operationId] of Object.entries(tool.operations)) {
356
- if (typeof operationId === 'string' && resolver?.getOperationById) {
357
- const operation = resolver.getOperationById(operationId);
358
- if (operation) {
359
- const category = resolveOperationCategory(operation);
360
- if (category === 'list') {
361
- hasList = true;
362
- }
363
- else if (category === 'read') {
364
- hasRead = true;
365
- }
366
- else {
367
- hasModify = true;
368
- }
369
- continue;
370
- }
371
- }
372
- const actionValue = action.toLowerCase();
373
- if (actionValue === 'list' || actionValue === 'search') {
374
- hasList = true;
375
- }
376
- else if (actionValue === 'get' || actionValue === 'read') {
377
- hasRead = true;
378
- }
379
- else {
380
- hasModify = true;
381
- }
382
- }
383
- return { hasList, hasRead, hasModify };
384
- }
385
- // Unknown tool type (no operations and not a resolvable composite): treat as modify (unsafe)
386
- return { hasList: false, hasRead: false, hasModify: true };
387
- }
388
- function getAllowMatchReasons(tool, normalizedName, config, resolver) {
389
- const reasons = [];
390
- if (config.allowList.has(normalizedName)) {
391
- reasons.push(`allow_list:${normalizedName}`);
392
- }
393
- for (const regex of config.allowRegex) {
394
- if (regex.test(normalizedName)) {
395
- reasons.push(`allow_regex:${regex.source}`);
396
- }
397
- }
398
- if (config.allowCategories.size > 0) {
399
- const { hasList, hasRead, hasModify } = classifyToolOperations(tool, resolver);
400
- const isListOnly = hasList && !hasRead && !hasModify;
401
- const isReadOnly = hasRead && !hasList && !hasModify;
402
- const isListReadOnly = (hasList || hasRead) && !hasModify;
403
- if (config.allowCategories.has('list') && config.allowCategories.has('read')) {
404
- if (isListReadOnly) {
405
- reasons.push('allow_categories:list,read');
406
- }
407
- }
408
- else if (config.allowCategories.has('list')) {
409
- if (isListOnly) {
410
- reasons.push('allow_categories:list');
411
- }
412
- }
413
- else if (config.allowCategories.has('read')) {
414
- if (isReadOnly) {
415
- reasons.push('allow_categories:read');
416
- }
417
- }
418
- }
419
- return reasons;
420
- }
421
- function getSessionAllowReasons(tool, normalizedName, request, resolver) {
422
- const reasons = [];
423
- if (request.exactNames.has(normalizedName)) {
424
- reasons.push(`header_exact:${normalizedName}`);
425
- }
426
- for (const regex of request.regexPatterns) {
427
- if (regex.test(normalizedName)) {
428
- reasons.push(`header_regex:${regex.source}`);
429
- }
430
- }
431
- if (request.allowComposite.allowList || request.allowComposite.allowRead) {
432
- const listRead = detectListReadOperations(tool, resolver);
433
- if (request.allowComposite.allowList && listRead.isList) {
434
- reasons.push('header_composite:_allow_list');
435
- }
436
- if (request.allowComposite.allowRead && listRead.isRead) {
437
- reasons.push('header_composite:_allow_read');
438
- }
439
- }
440
- return reasons;
441
- }
442
- function getAllowFailureReasons(config) {
443
- const reasons = [];
444
- if (config.sources.allowList.length > 0) {
445
- reasons.push('allow_list');
446
- }
447
- if (config.sources.allowRegex.length > 0) {
448
- reasons.push('allow_regex');
449
- }
450
- if (config.sources.allowCategories.length > 0) {
451
- reasons.push('allow_categories');
452
- }
453
- return reasons.length > 0 ? reasons : ['allow'];
454
- }
455
- function buildNormalizedSessionEntries(params) {
456
- const entries = [];
457
- for (const name of params.exactNames) {
458
- entries.push(name);
459
- }
460
- for (const regex of params.regexPatterns) {
461
- entries.push(`regex:${regex.source}`);
462
- }
463
- if (params.allowComposite.allowList) {
464
- entries.push('_allow_list');
465
- }
466
- if (params.allowComposite.allowRead) {
467
- entries.push('_allow_read');
468
- }
469
- return entries;
470
- }
471
- //# sourceMappingURL=tool-filter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-filter.js","sourceRoot":"","sources":["../../src/tool-filter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,uBAAuB,GAAG,GAAG,CAAC;AACpC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AA8CxC,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,KAAc;IAC3D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAsB;IAC1D,MAAM,YAAY,GAAG,GAAG,CAAC,4BAA4B,CAAC;IACtD,MAAM,aAAa,GAAG,GAAG,CAAC,iCAAiC,CAAC;IAC5D,MAAM,WAAW,GAAG,GAAG,CAAC,2BAA2B,CAAC;IACpD,MAAM,YAAY,GAAG,GAAG,CAAC,gCAAgC,CAAC;IAC1D,MAAM,kBAAkB,GAAG,GAAG,CAAC,iCAAiC,CAAC;IAEjE,MAAM,SAAS,GACb,YAAY,KAAK,SAAS;QAC1B,aAAa,KAAK,SAAS;QAC3B,WAAW,KAAK,SAAS;QACzB,YAAY,KAAK,SAAS;QAC1B,kBAAkB,KAAK,SAAS,CAAC;IAEnC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,oBAAoB,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACjD,YAAY,CAAC,OAAO,EAAE,mCAAmC,EAAE,kBAAkB,CAAC,CAC/E,CAAC;IACF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC/C,YAAY,CAAC,OAAO,EAAE,kCAAkC,EAAE,kBAAkB,CAAC,CAC9E,CAAC;IAEF,MAAM,eAAe,GAAG,yBAAyB,CAC/C,oBAAoB,EACpB,mCAAmC,EACnC,kBAAkB,CACnB,CAAC;IAEF,OAAO;QACL,SAAS;QACT,QAAQ;QACR,UAAU;QACV,SAAS;QACT,eAAe;QACf,aAAa,EACX,gBAAgB,CAAC,MAAM,GAAG,CAAC;YAC3B,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC5B,eAAe,CAAC,IAAI,GAAG,CAAC;QAC1B,OAAO,EAAE;YACP,SAAS,EAAE,gBAAgB;YAC3B,UAAU,EAAE,iBAAiB;YAC7B,QAAQ,EAAE,eAAe;YACzB,SAAS,EAAE,gBAAgB;YAC3B,eAAe,EAAE,oBAAoB;SACtC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,aAAqB,8BAA8B,EAAE;IAErD,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAC3E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;YACL,UAAU,EAAE,IAAI,GAAG,EAAE;YACrB,aAAa,EAAE,EAAE;YACjB,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;YACtD,gBAAgB,EAAE,EAAE;YACpB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,eAAe,CACvB,2CAA2C,KAAK,CAAC,MAAM,MAAM,UAAU,gBAAgB,UAAU,mDAAmD,CACrJ,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,qBAAqB,GAAa,EAAE,CAAC;IAE3C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;YAC3C,MAAM,IAAI,eAAe,CACvB,0CAA0C,KAAK,MAAM,KAAK,CAAC,MAAM,UAAU,CAC5E,CAAC;QACJ,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YACvD,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,eAAe,CAAC,wDAAwD,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,eAAe,CAAC,oCAAoC,CAAC,CAAC;YAClE,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;YAC9E,SAAS;QACX,CAAC;QAED,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,cAAc,GAAG,0BAA0B,CAAC,qBAAqB,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;IAC1G,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;QACtD,UAAU;QACV,aAAa;QACb,cAAc;KACf,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,aAAa;QACb,cAAc;QACd,gBAAgB,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9C,UAAU;QACV,QAAQ,EAAE,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,SAAS,IAAI,cAAc,CAAC,SAAS;KAClH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAuB,EACvB,MAAwB,EACxB,QAAsC;IAEtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,WAAW,CAAC,IAAI,CAAC,aAAa,cAAc,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAuB,EACvB,OAAiC,EACjC,QAAsC;IAEtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAErF,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,sBAAsB,OAAO,CAAC,gBAAgB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,OAAO;QACP,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE;QAC1C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAoB,EACpB,QAAsC;IAEtC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAClE,6CAA6C;QAC7C,2CAA2C;QAC3C,2CAA2C;QAC3C,wDAAwD;QACxD,4DAA4D;QAC5D,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,GAAG,KAAK,CAAC;gBAChB,OAAO,GAAG,KAAK,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;QAC3B,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;IAC7B,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,QAAQ,EAAE,gBAAgB,EAAE,CAAC;gBAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;oBACrD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;wBACxB,MAAM,GAAG,IAAI,CAAC;oBAChB,CAAC;oBACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;wBACxB,MAAM,GAAG,IAAI,CAAC;oBAChB,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;YACD,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBACpD,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,IAAI,OAAO,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,yBAAyB,gBAAgB,cAAc;SAC/D,CAAC;IACJ,CAAC;IAED,IAAI,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,4CAA4C;SACpD,CAAC;IACJ,CAAC;IAED,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,uDAAuD;SAC/D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC;IAC3D,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,kBAAkB,CAC1B,+EAA+E,GAAG,IAAI,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CACnB,OAAe,EACf,OAAe,EACf,SAAyC;IAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,WAAW,OAAO,iBAAiB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,WAAW,OAAO,iBAAkB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IACxE,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC;IACtF,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,MAAM,GAAG,8CAA8C,CAAC;IAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,WAAW,GAAG,2CAA2C,CAAC;IAChE,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,0BAA0B,CACjC,OAAiB,EACjB,OAAe,EACf,SAAyC;IAEzC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;YACnC,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,mDAAmD,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAiB,EACjB,OAAe,EACf,SAAyC;IAEzC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACnD,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3B,SAAS;QACX,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,6CAA6C,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAwB;IACxD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC9E,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAoB,EACpB,QAAsC;IAEtC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC/B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,QAAQ,EAAE,gBAAgB,EAAE,CAAC;gBAClE,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,QAAQ,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;oBACrD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;wBACxB,OAAO,GAAG,IAAI,CAAC;oBACjB,CAAC;yBAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;wBAC/B,OAAO,GAAG,IAAI,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,SAAS,GAAG,IAAI,CAAC;oBACnB,CAAC;oBACD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBACvD,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC3D,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACzC,CAAC;IAED,6FAA6F;IAC7F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAoB,EACpB,cAAsB,EACtB,MAAwB,EACxB,QAAsC;IAEtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,cAAc,cAAc,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC;QACrD,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC;QACrD,MAAM,cAAc,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;QAE1D,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7E,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAoB,EACpB,cAAsB,EACtB,OAAiC,EACjC,QAAsC;IAEtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,gBAAgB,cAAc,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,CAAC,SAAS,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAwB;IACtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,6BAA6B,CAAC,MAItC;IACC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,67 +0,0 @@
1
- /**
2
- * MCP tool generator from profile definitions
3
- *
4
- * Why: Translates profile config into MCP SDK tool definitions. Handles both
5
- * simple (single operation) and composite (multi-step) tools.
6
- */
7
- import type { Tool } from '@modelcontextprotocol/sdk/types.js';
8
- import type { ToolDefinition } from './types/profile.js';
9
- import type { OpenAPIParser } from './openapi-parser.js';
10
- export declare class ToolGenerator {
11
- private parser;
12
- constructor(parser: OpenAPIParser);
13
- /**
14
- * Generate MCP tool from profile definition
15
- */
16
- generateTool(toolDef: ToolDefinition): Tool;
17
- /**
18
- * Generate JSON Schema for tool parameters
19
- *
20
- * Why JSON Schema: MCP SDK expects JSON Schema for parameter validation.
21
- * LLM uses schema to understand what parameters are needed.
22
- */
23
- private generateInputSchema;
24
- /**
25
- * Convert parameter definition to JSON Schema
26
- */
27
- private parameterToJsonSchema;
28
- private parameterTypeToSchema;
29
- /**
30
- * Validate tool arguments against parameter definitions
31
- *
32
- * Why manual validation: Checks conditional requirements (required_for)
33
- * which JSON Schema can't express directly.
34
- */
35
- validateArguments(toolDef: ToolDefinition, args: Record<string, unknown>): void;
36
- /**
37
- * Get operation definition (string or ProxyDownloadOperation) for action
38
- *
39
- * Why: Tools can have string operationIds OR proxy_download configs.
40
- * This returns the raw definition before extracting operationId.
41
- */
42
- getOperationDefinition(toolDef: ToolDefinition, args: Record<string, unknown>): import("./types/profile.js").OperationDefinition | undefined;
43
- /**
44
- * Map tool action to OpenAPI operation ID
45
- *
46
- * Why: Single tool with 'action' parameter maps to multiple operations.
47
- * Example: manage_badges + action=create => postApiV4ProjectsIdBadges
48
- *
49
- * Note: Returns undefined for ProxyDownloadOperation (not a direct operationId)
50
- */
51
- mapActionToOperation(toolDef: ToolDefinition, args: Record<string, unknown>): string | undefined;
52
- /**
53
- * Check if operation requires multipart/form-data
54
- *
55
- * Why: Some operations (file uploads) need FormData instead of JSON body.
56
- * Detected from OpenAPI requestBody.content['multipart/form-data'].
57
- */
58
- isMultipartOperation(operationId: string): boolean;
59
- /**
60
- * Build FormData body for file upload
61
- *
62
- * @param args Tool arguments including base64Content or filePath
63
- * @param fileFieldName Field name in FormData (default: 'files[0]')
64
- */
65
- buildFormDataBody(args: Record<string, unknown>, fileFieldName?: string): FormData;
66
- }
67
- //# sourceMappingURL=tool-generator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-generator.d.ts","sourceRoot":"","sources":["../../src/tool-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAsC,MAAM,oBAAoB,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEzC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAU3C;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,qBAAqB;IA0B7B;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA4B/E;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAyB7E;;;;;;;OAOG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS;IAKhG;;;;;OAKG;IACH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAMlD;;;;;OAKG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,SAAa,GAAG,QAAQ;CAoBvF"}