@robinmordasiewicz/f5xc-api-mcp 3.0.0

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 (212) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +234 -0
  3. package/dist/auth/credential-manager.d.ts +116 -0
  4. package/dist/auth/credential-manager.d.ts.map +1 -0
  5. package/dist/auth/credential-manager.js +208 -0
  6. package/dist/auth/credential-manager.js.map +1 -0
  7. package/dist/auth/http-client.d.ts +81 -0
  8. package/dist/auth/http-client.d.ts.map +1 -0
  9. package/dist/auth/http-client.js +197 -0
  10. package/dist/auth/http-client.js.map +1 -0
  11. package/dist/auth/index.d.ts +8 -0
  12. package/dist/auth/index.d.ts.map +1 -0
  13. package/dist/auth/index.js +6 -0
  14. package/dist/auth/index.js.map +1 -0
  15. package/dist/generator/index.d.ts +7 -0
  16. package/dist/generator/index.d.ts.map +1 -0
  17. package/dist/generator/index.js +7 -0
  18. package/dist/generator/index.js.map +1 -0
  19. package/dist/generator/naming/acronyms.d.ts +81 -0
  20. package/dist/generator/naming/acronyms.d.ts.map +1 -0
  21. package/dist/generator/naming/acronyms.js +253 -0
  22. package/dist/generator/naming/acronyms.js.map +1 -0
  23. package/dist/generator/naming/index.d.ts +6 -0
  24. package/dist/generator/naming/index.d.ts.map +1 -0
  25. package/dist/generator/naming/index.js +6 -0
  26. package/dist/generator/naming/index.js.map +1 -0
  27. package/dist/generator/naming/volterra-mapping.d.ts +102 -0
  28. package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
  29. package/dist/generator/naming/volterra-mapping.js +259 -0
  30. package/dist/generator/naming/volterra-mapping.js.map +1 -0
  31. package/dist/generator/openapi-parser.d.ts +339 -0
  32. package/dist/generator/openapi-parser.d.ts.map +1 -0
  33. package/dist/generator/openapi-parser.js +463 -0
  34. package/dist/generator/openapi-parser.js.map +1 -0
  35. package/dist/generator/tool-generator.d.ts +74 -0
  36. package/dist/generator/tool-generator.d.ts.map +1 -0
  37. package/dist/generator/tool-generator.js +387 -0
  38. package/dist/generator/tool-generator.js.map +1 -0
  39. package/dist/generator/transformers/index.d.ts +7 -0
  40. package/dist/generator/transformers/index.d.ts.map +1 -0
  41. package/dist/generator/transformers/index.js +7 -0
  42. package/dist/generator/transformers/index.js.map +1 -0
  43. package/dist/generator/transformers/normalize-examples.d.ts +48 -0
  44. package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
  45. package/dist/generator/transformers/normalize-examples.js +66 -0
  46. package/dist/generator/transformers/normalize-examples.js.map +1 -0
  47. package/dist/index.d.ts +21 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +70 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/prompts/index.d.ts +6 -0
  52. package/dist/prompts/index.d.ts.map +1 -0
  53. package/dist/prompts/index.js +5 -0
  54. package/dist/prompts/index.js.map +1 -0
  55. package/dist/prompts/workflows.d.ts +59 -0
  56. package/dist/prompts/workflows.d.ts.map +1 -0
  57. package/dist/prompts/workflows.js +585 -0
  58. package/dist/prompts/workflows.js.map +1 -0
  59. package/dist/resources/handlers.d.ts +72 -0
  60. package/dist/resources/handlers.d.ts.map +1 -0
  61. package/dist/resources/handlers.js +279 -0
  62. package/dist/resources/handlers.js.map +1 -0
  63. package/dist/resources/index.d.ts +8 -0
  64. package/dist/resources/index.d.ts.map +1 -0
  65. package/dist/resources/index.js +6 -0
  66. package/dist/resources/index.js.map +1 -0
  67. package/dist/resources/templates.d.ts +86 -0
  68. package/dist/resources/templates.d.ts.map +1 -0
  69. package/dist/resources/templates.js +248 -0
  70. package/dist/resources/templates.js.map +1 -0
  71. package/dist/server.d.ts +78 -0
  72. package/dist/server.d.ts.map +1 -0
  73. package/dist/server.js +426 -0
  74. package/dist/server.js.map +1 -0
  75. package/dist/tools/discovery/consolidate.d.ts +97 -0
  76. package/dist/tools/discovery/consolidate.d.ts.map +1 -0
  77. package/dist/tools/discovery/consolidate.js +200 -0
  78. package/dist/tools/discovery/consolidate.js.map +1 -0
  79. package/dist/tools/discovery/describe.d.ts +132 -0
  80. package/dist/tools/discovery/describe.d.ts.map +1 -0
  81. package/dist/tools/discovery/describe.js +206 -0
  82. package/dist/tools/discovery/describe.js.map +1 -0
  83. package/dist/tools/discovery/execute.d.ts +98 -0
  84. package/dist/tools/discovery/execute.d.ts.map +1 -0
  85. package/dist/tools/discovery/execute.js +251 -0
  86. package/dist/tools/discovery/execute.js.map +1 -0
  87. package/dist/tools/discovery/index-loader.d.ts +28 -0
  88. package/dist/tools/discovery/index-loader.d.ts.map +1 -0
  89. package/dist/tools/discovery/index-loader.js +69 -0
  90. package/dist/tools/discovery/index-loader.js.map +1 -0
  91. package/dist/tools/discovery/index.d.ts +185 -0
  92. package/dist/tools/discovery/index.d.ts.map +1 -0
  93. package/dist/tools/discovery/index.js +177 -0
  94. package/dist/tools/discovery/index.js.map +1 -0
  95. package/dist/tools/discovery/search.d.ts +41 -0
  96. package/dist/tools/discovery/search.d.ts.map +1 -0
  97. package/dist/tools/discovery/search.js +155 -0
  98. package/dist/tools/discovery/search.js.map +1 -0
  99. package/dist/tools/discovery/types.d.ts +70 -0
  100. package/dist/tools/discovery/types.d.ts.map +1 -0
  101. package/dist/tools/discovery/types.js +9 -0
  102. package/dist/tools/discovery/types.js.map +1 -0
  103. package/dist/tools/generated/ai_intelligence/index.d.ts +8 -0
  104. package/dist/tools/generated/ai_intelligence/index.d.ts.map +1 -0
  105. package/dist/tools/generated/ai_intelligence/index.js +282 -0
  106. package/dist/tools/generated/ai_intelligence/index.js.map +1 -0
  107. package/dist/tools/generated/api_security/index.d.ts +8 -0
  108. package/dist/tools/generated/api_security/index.d.ts.map +1 -0
  109. package/dist/tools/generated/api_security/index.js +1852 -0
  110. package/dist/tools/generated/api_security/index.js.map +1 -0
  111. package/dist/tools/generated/applications/index.d.ts +8 -0
  112. package/dist/tools/generated/applications/index.d.ts.map +1 -0
  113. package/dist/tools/generated/applications/index.js +1589 -0
  114. package/dist/tools/generated/applications/index.js.map +1 -0
  115. package/dist/tools/generated/bigip/index.d.ts +8 -0
  116. package/dist/tools/generated/bigip/index.d.ts.map +1 -0
  117. package/dist/tools/generated/bigip/index.js +1173 -0
  118. package/dist/tools/generated/bigip/index.js.map +1 -0
  119. package/dist/tools/generated/billing/index.d.ts +8 -0
  120. package/dist/tools/generated/billing/index.d.ts.map +1 -0
  121. package/dist/tools/generated/billing/index.js +759 -0
  122. package/dist/tools/generated/billing/index.js.map +1 -0
  123. package/dist/tools/generated/cdn/index.d.ts +8 -0
  124. package/dist/tools/generated/cdn/index.d.ts.map +1 -0
  125. package/dist/tools/generated/cdn/index.js +841 -0
  126. package/dist/tools/generated/cdn/index.js.map +1 -0
  127. package/dist/tools/generated/config/index.d.ts +8 -0
  128. package/dist/tools/generated/config/index.d.ts.map +1 -0
  129. package/dist/tools/generated/config/index.js +316 -0
  130. package/dist/tools/generated/config/index.js.map +1 -0
  131. package/dist/tools/generated/identity/index.d.ts +8 -0
  132. package/dist/tools/generated/identity/index.d.ts.map +1 -0
  133. package/dist/tools/generated/identity/index.js +5371 -0
  134. package/dist/tools/generated/identity/index.js.map +1 -0
  135. package/dist/tools/generated/infrastructure/index.d.ts +8 -0
  136. package/dist/tools/generated/infrastructure/index.d.ts.map +1 -0
  137. package/dist/tools/generated/infrastructure/index.js +5342 -0
  138. package/dist/tools/generated/infrastructure/index.js.map +1 -0
  139. package/dist/tools/generated/infrastructure_protection/index.d.ts +8 -0
  140. package/dist/tools/generated/infrastructure_protection/index.d.ts.map +1 -0
  141. package/dist/tools/generated/infrastructure_protection/index.js +2919 -0
  142. package/dist/tools/generated/infrastructure_protection/index.js.map +1 -0
  143. package/dist/tools/generated/integrations/index.d.ts +8 -0
  144. package/dist/tools/generated/integrations/index.d.ts.map +1 -0
  145. package/dist/tools/generated/integrations/index.js +1995 -0
  146. package/dist/tools/generated/integrations/index.js.map +1 -0
  147. package/dist/tools/generated/load_balancer/index.d.ts +8 -0
  148. package/dist/tools/generated/load_balancer/index.d.ts.map +1 -0
  149. package/dist/tools/generated/load_balancer/index.js +2269 -0
  150. package/dist/tools/generated/load_balancer/index.js.map +1 -0
  151. package/dist/tools/generated/networking/index.d.ts +8 -0
  152. package/dist/tools/generated/networking/index.d.ts.map +1 -0
  153. package/dist/tools/generated/networking/index.js +11289 -0
  154. package/dist/tools/generated/networking/index.js.map +1 -0
  155. package/dist/tools/generated/nginx/index.d.ts +8 -0
  156. package/dist/tools/generated/nginx/index.d.ts.map +1 -0
  157. package/dist/tools/generated/nginx/index.js +680 -0
  158. package/dist/tools/generated/nginx/index.js.map +1 -0
  159. package/dist/tools/generated/observability/index.d.ts +8 -0
  160. package/dist/tools/generated/observability/index.d.ts.map +1 -0
  161. package/dist/tools/generated/observability/index.js +6140 -0
  162. package/dist/tools/generated/observability/index.js.map +1 -0
  163. package/dist/tools/generated/operations/index.d.ts +8 -0
  164. package/dist/tools/generated/operations/index.d.ts.map +1 -0
  165. package/dist/tools/generated/operations/index.js +1759 -0
  166. package/dist/tools/generated/operations/index.js.map +1 -0
  167. package/dist/tools/generated/security/index.d.ts +8 -0
  168. package/dist/tools/generated/security/index.d.ts.map +1 -0
  169. package/dist/tools/generated/security/index.js +9111 -0
  170. package/dist/tools/generated/security/index.js.map +1 -0
  171. package/dist/tools/generated/service_mesh/index.d.ts +8 -0
  172. package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
  173. package/dist/tools/generated/service_mesh/index.js +1628 -0
  174. package/dist/tools/generated/service_mesh/index.js.map +1 -0
  175. package/dist/tools/generated/shape_security/index.d.ts +8 -0
  176. package/dist/tools/generated/shape_security/index.d.ts.map +1 -0
  177. package/dist/tools/generated/shape_security/index.js +4121 -0
  178. package/dist/tools/generated/shape_security/index.js.map +1 -0
  179. package/dist/tools/generated/subscriptions/index.d.ts +8 -0
  180. package/dist/tools/generated/subscriptions/index.d.ts.map +1 -0
  181. package/dist/tools/generated/subscriptions/index.js +778 -0
  182. package/dist/tools/generated/subscriptions/index.js.map +1 -0
  183. package/dist/tools/generated/tenant_management/index.d.ts +8 -0
  184. package/dist/tools/generated/tenant_management/index.d.ts.map +1 -0
  185. package/dist/tools/generated/tenant_management/index.js +2292 -0
  186. package/dist/tools/generated/tenant_management/index.js.map +1 -0
  187. package/dist/tools/generated/vpn/index.d.ts +8 -0
  188. package/dist/tools/generated/vpn/index.d.ts.map +1 -0
  189. package/dist/tools/generated/vpn/index.js +1183 -0
  190. package/dist/tools/generated/vpn/index.js.map +1 -0
  191. package/dist/tools/index.d.ts +7 -0
  192. package/dist/tools/index.d.ts.map +1 -0
  193. package/dist/tools/index.js +6 -0
  194. package/dist/tools/index.js.map +1 -0
  195. package/dist/tools/registry.d.ts +27 -0
  196. package/dist/tools/registry.d.ts.map +1 -0
  197. package/dist/tools/registry.js +83 -0
  198. package/dist/tools/registry.js.map +1 -0
  199. package/dist/utils/error-handling.d.ts +109 -0
  200. package/dist/utils/error-handling.d.ts.map +1 -0
  201. package/dist/utils/error-handling.js +239 -0
  202. package/dist/utils/error-handling.js.map +1 -0
  203. package/dist/utils/index.d.ts +7 -0
  204. package/dist/utils/index.d.ts.map +1 -0
  205. package/dist/utils/index.js +6 -0
  206. package/dist/utils/index.js.map +1 -0
  207. package/dist/utils/logging.d.ts +75 -0
  208. package/dist/utils/logging.d.ts.map +1 -0
  209. package/dist/utils/logging.js +131 -0
  210. package/dist/utils/logging.js.map +1 -0
  211. package/manifest.json +143 -0
  212. package/package.json +95 -0
@@ -0,0 +1,463 @@
1
+ /**
2
+ * OpenAPI Specification Parser
3
+ *
4
+ * Parses F5 Distributed Cloud OpenAPI specifications and extracts
5
+ * operation metadata for MCP tool generation.
6
+ */
7
+ import { readFileSync, readdirSync, existsSync } from "fs";
8
+ import { join, extname, relative, basename } from "path";
9
+ import YAML from "yaml";
10
+ import { z } from "zod";
11
+ import { transformText, extractDomainFromPath, extractResourceFromPath, methodToOperation, generateToolName, } from "./naming/index.js";
12
+ import { normalizeTitleAcronyms } from "./naming/acronyms.js";
13
+ import { normalizeExamples } from "./transformers/index.js";
14
+ import { logger } from "../utils/logging.js";
15
+ /**
16
+ * OpenAPI Schema Types
17
+ */
18
+ const OpenApiParameterSchema = z.object({
19
+ name: z.string(),
20
+ in: z.enum(["path", "query", "header", "cookie"]),
21
+ required: z.boolean().optional(),
22
+ description: z.string().optional(),
23
+ schema: z.record(z.string(), z.unknown()).optional(),
24
+ });
25
+ const OpenApiRequestBodySchema = z.object({
26
+ required: z.boolean().optional(),
27
+ description: z.string().optional(),
28
+ content: z
29
+ .record(z.string(), z.object({
30
+ schema: z.record(z.string(), z.unknown()).optional(),
31
+ }))
32
+ .optional(),
33
+ });
34
+ const OpenApiResponseSchema = z.object({
35
+ description: z.string().optional(),
36
+ content: z
37
+ .record(z.string(), z.object({
38
+ schema: z.record(z.string(), z.unknown()).optional(),
39
+ }))
40
+ .optional(),
41
+ });
42
+ const OpenApiOperationSchema = z.object({
43
+ operationId: z.string().optional(),
44
+ summary: z.string().optional(),
45
+ description: z.string().optional(),
46
+ tags: z.array(z.string()).optional(),
47
+ parameters: z.array(OpenApiParameterSchema).optional(),
48
+ requestBody: OpenApiRequestBodySchema.optional(),
49
+ responses: z.record(z.string(), OpenApiResponseSchema).optional(),
50
+ security: z.array(z.record(z.string(), z.array(z.string()))).optional(),
51
+ "x-ves-proto-rpc": z.string().optional(),
52
+ });
53
+ const OpenApiPathItemSchema = z.object({
54
+ get: OpenApiOperationSchema.optional(),
55
+ post: OpenApiOperationSchema.optional(),
56
+ put: OpenApiOperationSchema.optional(),
57
+ delete: OpenApiOperationSchema.optional(),
58
+ patch: OpenApiOperationSchema.optional(),
59
+ parameters: z.array(OpenApiParameterSchema).optional(),
60
+ });
61
+ const OpenApiSpecSchema = z.object({
62
+ openapi: z.string().optional(),
63
+ swagger: z.string().optional(),
64
+ info: z.object({
65
+ title: z.string(),
66
+ version: z.string(),
67
+ description: z.string().optional(),
68
+ }),
69
+ paths: z.record(z.string(), OpenApiPathItemSchema).optional(),
70
+ components: z
71
+ .object({
72
+ schemas: z.record(z.string(), z.unknown()).optional(),
73
+ securitySchemes: z.record(z.string(), z.unknown()).optional(),
74
+ })
75
+ .optional(),
76
+ });
77
+ /**
78
+ * Parse a single OpenAPI specification file
79
+ * @param filePath - Absolute path to the spec file
80
+ * @param basePath - Optional base path for creating relative sourceFile paths (for deterministic output)
81
+ * @deprecated Use parseDomainSpecFile() for pre-enriched domain specs from robinmordasiewicz/f5xc-api-enriched
82
+ */
83
+ export function parseSpecFile(filePath, basePath) {
84
+ try {
85
+ const content = readFileSync(filePath, "utf-8");
86
+ const ext = extname(filePath).toLowerCase();
87
+ let rawSpec;
88
+ if (ext === ".yaml" || ext === ".yml") {
89
+ rawSpec = YAML.parse(content);
90
+ }
91
+ else if (ext === ".json") {
92
+ rawSpec = JSON.parse(content);
93
+ }
94
+ else {
95
+ logger.warn(`Unsupported file extension: ${ext}`, { file: filePath });
96
+ return null;
97
+ }
98
+ // Validate spec structure
99
+ const parseResult = OpenApiSpecSchema.safeParse(rawSpec);
100
+ if (!parseResult.success) {
101
+ logger.debug(`Invalid OpenAPI spec: ${filePath}`, {
102
+ errors: parseResult.error.issues,
103
+ });
104
+ return null;
105
+ }
106
+ const spec = parseResult.data;
107
+ // Use relative path for sourceFile to ensure deterministic output across environments
108
+ const sourceFile = basePath ? relative(basePath, filePath) : filePath;
109
+ const operations = extractOperations(spec, sourceFile);
110
+ return {
111
+ filePath,
112
+ title: transformText(normalizeTitleAcronyms(spec.info.title)),
113
+ version: spec.info.version,
114
+ operations,
115
+ schemas: spec.components?.schemas ?? {},
116
+ };
117
+ }
118
+ catch (error) {
119
+ logger.error(`Failed to parse spec file: ${filePath}`, {
120
+ error: error instanceof Error ? error.message : String(error),
121
+ });
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * Extract operations from parsed spec
127
+ */
128
+ function extractOperations(spec, sourceFile) {
129
+ const operations = [];
130
+ if (!spec.paths) {
131
+ return operations;
132
+ }
133
+ const httpMethods = ["get", "post", "put", "delete", "patch"];
134
+ // Sort paths alphabetically for deterministic output (use < > for locale-independent sorting)
135
+ const sortedPaths = Object.entries(spec.paths).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
136
+ for (const [path, pathItem] of sortedPaths) {
137
+ // Check if path has a name parameter (indicates single resource operations)
138
+ const hasNameParam = path.includes("{name}") || path.includes("{id}");
139
+ // Get path-level parameters
140
+ const pathLevelParams = pathItem.parameters ?? [];
141
+ for (const method of httpMethods) {
142
+ const operation = pathItem[method];
143
+ if (!operation) {
144
+ continue;
145
+ }
146
+ // Determine operation type and generate tool name
147
+ const operationType = methodToOperation(method, hasNameParam);
148
+ const domain = extractDomainFromPath(path);
149
+ const resource = extractResourceFromPath(path);
150
+ const toolName = generateToolName(domain, resource, operationType);
151
+ // Combine path and operation parameters
152
+ const allParams = [...pathLevelParams, ...(operation.parameters ?? [])];
153
+ const pathParameters = allParams.filter((p) => p.in === "path");
154
+ const queryParameters = allParams.filter((p) => p.in === "query");
155
+ // Extract request body schema
156
+ let requestBodySchema = null;
157
+ if (operation.requestBody?.content) {
158
+ const jsonContent = operation.requestBody.content["application/json"];
159
+ if (jsonContent?.schema) {
160
+ requestBodySchema = jsonContent.schema;
161
+ }
162
+ }
163
+ // Extract response schema (from 200 or first success response)
164
+ let responseSchema = null;
165
+ if (operation.responses) {
166
+ const successResponse = operation.responses["200"] ?? operation.responses["201"];
167
+ if (successResponse?.content) {
168
+ const jsonContent = successResponse.content["application/json"];
169
+ if (jsonContent?.schema) {
170
+ responseSchema = jsonContent.schema;
171
+ }
172
+ }
173
+ }
174
+ // Collect required parameters
175
+ const requiredParams = [];
176
+ for (const param of allParams) {
177
+ if (param.required) {
178
+ requiredParams.push(param.name);
179
+ }
180
+ }
181
+ if (operation.requestBody?.required) {
182
+ requiredParams.push("body");
183
+ }
184
+ // Transform text content and normalize examples
185
+ const summary = transformText(normalizeTitleAcronyms(operation.summary ?? `${operationType} ${resource}`));
186
+ const description = normalizeExamples(transformText(operation.description ?? ""));
187
+ // Normalize parameter descriptions
188
+ const normalizedPathParams = pathParameters.map((p) => ({
189
+ ...p,
190
+ description: p.description ? normalizeExamples(p.description) : p.description,
191
+ }));
192
+ const normalizedQueryParams = queryParameters.map((p) => ({
193
+ ...p,
194
+ description: p.description ? normalizeExamples(p.description) : p.description,
195
+ }));
196
+ operations.push({
197
+ toolName,
198
+ method: method.toUpperCase(),
199
+ path,
200
+ operation: operationType,
201
+ domain,
202
+ resource,
203
+ summary,
204
+ description,
205
+ pathParameters: normalizedPathParams,
206
+ queryParameters: normalizedQueryParams,
207
+ requestBodySchema,
208
+ responseSchema,
209
+ requiredParams,
210
+ operationId: operation.operationId ?? null,
211
+ tags: operation.tags ?? [],
212
+ sourceFile,
213
+ });
214
+ }
215
+ }
216
+ return operations;
217
+ }
218
+ /**
219
+ * Parse all spec files in a directory
220
+ * @deprecated Use parseDomainsDirectory() for pre-enriched domain specs from robinmordasiewicz/f5xc-api-enriched
221
+ */
222
+ export function parseSpecDirectory(dirPath) {
223
+ const specs = [];
224
+ if (!existsSync(dirPath)) {
225
+ logger.warn(`Spec directory does not exist: ${dirPath}`);
226
+ return specs;
227
+ }
228
+ // Use parent of dirPath as base for relative paths (makes paths like "raw/filename.json")
229
+ const basePath = join(dirPath, "..");
230
+ function scanDir(currentDir) {
231
+ const entries = readdirSync(currentDir, { withFileTypes: true });
232
+ // Sort entries alphabetically for deterministic output across different filesystems (locale-independent)
233
+ entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
234
+ for (const entry of entries) {
235
+ const fullPath = join(currentDir, entry.name);
236
+ if (entry.isDirectory()) {
237
+ scanDir(fullPath);
238
+ }
239
+ else if (entry.name.endsWith(".json") ||
240
+ entry.name.endsWith(".yaml") ||
241
+ entry.name.endsWith(".yml")) {
242
+ const spec = parseSpecFile(fullPath, basePath);
243
+ if (spec && spec.operations.length > 0) {
244
+ specs.push(spec);
245
+ }
246
+ }
247
+ }
248
+ }
249
+ scanDir(dirPath);
250
+ logger.info(`Parsed ${specs.length} spec files`, {
251
+ totalOperations: specs.reduce((sum, s) => sum + s.operations.length, 0),
252
+ });
253
+ return specs;
254
+ }
255
+ /**
256
+ * Get all unique operations across all specs
257
+ */
258
+ export function getAllOperations(specs) {
259
+ const operationsMap = new Map();
260
+ for (const spec of specs) {
261
+ for (const operation of spec.operations) {
262
+ // Use tool name as unique key to deduplicate
263
+ if (!operationsMap.has(operation.toolName)) {
264
+ operationsMap.set(operation.toolName, operation);
265
+ }
266
+ }
267
+ }
268
+ // Sort by toolName for deterministic output (locale-independent)
269
+ return Array.from(operationsMap.values()).sort((a, b) => a.toolName < b.toolName ? -1 : a.toolName > b.toolName ? 1 : 0);
270
+ }
271
+ /**
272
+ * Group operations by domain
273
+ */
274
+ export function groupOperationsByDomain(operations) {
275
+ const grouped = new Map();
276
+ for (const operation of operations) {
277
+ const domain = operation.domain;
278
+ if (!grouped.has(domain)) {
279
+ grouped.set(domain, []);
280
+ }
281
+ grouped.get(domain).push(operation);
282
+ }
283
+ // Sort operations within each domain by toolName for deterministic output (locale-independent)
284
+ for (const ops of grouped.values()) {
285
+ ops.sort((a, b) => (a.toolName < b.toolName ? -1 : a.toolName > b.toolName ? 1 : 0));
286
+ }
287
+ // Return a new Map with sorted domain keys for deterministic iteration order
288
+ const sortedGrouped = new Map();
289
+ const sortedDomains = Array.from(grouped.keys()).sort();
290
+ for (const domain of sortedDomains) {
291
+ sortedGrouped.set(domain, grouped.get(domain));
292
+ }
293
+ return sortedGrouped;
294
+ }
295
+ /**
296
+ * Extract operations from an enriched domain spec (pre-normalized upstream)
297
+ * This skips transformation since enriched specs are already normalized
298
+ */
299
+ function extractDomainOperations(spec, domain, sourceFile) {
300
+ const operations = [];
301
+ if (!spec.paths) {
302
+ return operations;
303
+ }
304
+ const httpMethods = ["get", "post", "put", "delete", "patch"];
305
+ // Sort paths alphabetically for deterministic output
306
+ const sortedPaths = Object.entries(spec.paths).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
307
+ for (const [path, pathItem] of sortedPaths) {
308
+ // Check if path has a name parameter (indicates single resource operations)
309
+ const hasNameParam = path.includes("{name}") || path.includes("{id}");
310
+ // Get path-level parameters
311
+ const pathLevelParams = pathItem.parameters ?? [];
312
+ for (const method of httpMethods) {
313
+ const operation = pathItem[method];
314
+ if (!operation) {
315
+ continue;
316
+ }
317
+ // Determine operation type and generate tool name
318
+ const operationType = methodToOperation(method, hasNameParam);
319
+ const resource = extractResourceFromPath(path);
320
+ const toolName = generateToolName(domain, resource, operationType);
321
+ // Combine path and operation parameters
322
+ const allParams = [...pathLevelParams, ...(operation.parameters ?? [])];
323
+ const pathParameters = allParams.filter((p) => p.in === "path");
324
+ const queryParameters = allParams.filter((p) => p.in === "query");
325
+ // Extract request body schema
326
+ let requestBodySchema = null;
327
+ if (operation.requestBody?.content) {
328
+ const jsonContent = operation.requestBody.content["application/json"];
329
+ if (jsonContent?.schema) {
330
+ requestBodySchema = jsonContent.schema;
331
+ }
332
+ }
333
+ // Extract response schema (from 200 or first success response)
334
+ let responseSchema = null;
335
+ if (operation.responses) {
336
+ const successResponse = operation.responses["200"] ?? operation.responses["201"];
337
+ if (successResponse?.content) {
338
+ const jsonContent = successResponse.content["application/json"];
339
+ if (jsonContent?.schema) {
340
+ responseSchema = jsonContent.schema;
341
+ }
342
+ }
343
+ }
344
+ // Collect required parameters
345
+ const requiredParams = [];
346
+ for (const param of allParams) {
347
+ if (param.required) {
348
+ requiredParams.push(param.name);
349
+ }
350
+ }
351
+ if (operation.requestBody?.required) {
352
+ requiredParams.push("body");
353
+ }
354
+ // Use content as-is - enriched specs are already normalized
355
+ const summary = operation.summary ?? `${operationType} ${resource}`;
356
+ const description = operation.description ?? "";
357
+ operations.push({
358
+ toolName,
359
+ method: method.toUpperCase(),
360
+ path,
361
+ operation: operationType,
362
+ domain,
363
+ resource,
364
+ summary,
365
+ description,
366
+ pathParameters,
367
+ queryParameters,
368
+ requestBodySchema,
369
+ responseSchema,
370
+ requiredParams,
371
+ operationId: operation.operationId ?? null,
372
+ tags: operation.tags ?? [],
373
+ sourceFile,
374
+ });
375
+ }
376
+ }
377
+ return operations;
378
+ }
379
+ /**
380
+ * Parse a single enriched domain specification file
381
+ * Domain is derived from the filename (e.g., load_balancer.json → load_balancer)
382
+ *
383
+ * @param filePath - Absolute path to the domain spec file
384
+ * @param basePath - Optional base path for creating relative sourceFile paths
385
+ */
386
+ export function parseDomainSpecFile(filePath, basePath) {
387
+ try {
388
+ const content = readFileSync(filePath, "utf-8");
389
+ const ext = extname(filePath).toLowerCase();
390
+ if (ext !== ".json") {
391
+ logger.warn(`Domain specs must be JSON: ${ext}`, { file: filePath });
392
+ return null;
393
+ }
394
+ const rawSpec = JSON.parse(content);
395
+ // Validate spec structure
396
+ const parseResult = OpenApiSpecSchema.safeParse(rawSpec);
397
+ if (!parseResult.success) {
398
+ logger.debug(`Invalid OpenAPI spec: ${filePath}`, {
399
+ errors: parseResult.error.issues,
400
+ });
401
+ return null;
402
+ }
403
+ const spec = parseResult.data;
404
+ // Derive domain from filename (load_balancer.json → load_balancer)
405
+ const filename = basename(filePath, ext);
406
+ const domain = filename.replace(/-/g, "_");
407
+ // Use relative path for sourceFile to ensure deterministic output
408
+ const sourceFile = basePath ? relative(basePath, filePath) : filePath;
409
+ // Extract operations using domain-specific function (no transformations)
410
+ const operations = extractDomainOperations(spec, domain, sourceFile);
411
+ // Title is already normalized in enriched specs
412
+ return {
413
+ filePath,
414
+ title: spec.info.title,
415
+ version: spec.info.version,
416
+ operations,
417
+ schemas: spec.components?.schemas ?? {},
418
+ };
419
+ }
420
+ catch (error) {
421
+ logger.error(`Failed to parse domain spec file: ${filePath}`, {
422
+ error: error instanceof Error ? error.message : String(error),
423
+ });
424
+ return null;
425
+ }
426
+ }
427
+ /**
428
+ * Parse all enriched domain specs from a directory
429
+ * This is the primary entry point for the new enriched spec format
430
+ *
431
+ * @param dirPath - Path to the domains directory (specs/domains/)
432
+ */
433
+ export function parseDomainsDirectory(dirPath) {
434
+ const specs = [];
435
+ if (!existsSync(dirPath)) {
436
+ logger.warn(`Domains directory does not exist: ${dirPath}`);
437
+ return specs;
438
+ }
439
+ // Use parent of dirPath as base for relative paths (makes paths like "domains/filename.json")
440
+ const basePath = join(dirPath, "..");
441
+ const entries = readdirSync(dirPath, { withFileTypes: true });
442
+ // Sort entries alphabetically for deterministic output
443
+ entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
444
+ for (const entry of entries) {
445
+ if (entry.isDirectory()) {
446
+ continue;
447
+ }
448
+ if (!entry.name.endsWith(".json")) {
449
+ continue;
450
+ }
451
+ const fullPath = join(dirPath, entry.name);
452
+ const spec = parseDomainSpecFile(fullPath, basePath);
453
+ if (spec && spec.operations.length > 0) {
454
+ specs.push(spec);
455
+ }
456
+ }
457
+ logger.info(`Parsed ${specs.length} domain spec files`, {
458
+ totalOperations: specs.reduce((sum, s) => sum + s.operations.length, 0),
459
+ domains: specs.map((s) => basename(s.filePath, ".json")),
460
+ });
461
+ return specs;
462
+ }
463
+ //# sourceMappingURL=openapi-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-parser.js","sourceRoot":"","sources":["../../src/generator/openapi-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACzD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC;SACP,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrD,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC;SACP,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrD,CAAC,CACH;SACA,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IACtD,WAAW,EAAE,wBAAwB,CAAC,QAAQ,EAAE;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,QAAQ,EAAE;IACjE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACtC,IAAI,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACvC,GAAG,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACzC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,QAAQ,EAAE;IAC7D,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;QACrD,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC9D,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AA4DH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAiB;IAC/D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAE5C,IAAI,OAAgB,CAAC;QACrB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACtC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,yBAAyB,QAAQ,EAAE,EAAE;gBAChD,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;aACjC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAC9B,sFAAsF;QACtF,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtE,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAEvD,OAAO;YACL,QAAQ;YACR,KAAK,EAAE,aAAa,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7D,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC1B,UAAU;YACV,OAAO,EAAG,IAAI,CAAC,UAAU,EAAE,OAAmC,IAAI,EAAE;SACrE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,QAAQ,EAAE,EAAE;YACrD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAiB,EAAE,UAAkB;IAC9D,MAAM,UAAU,GAAsB,EAAE,CAAC;IAEzC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;IAEvE,8FAA8F;IAC9F,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhG,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC;QAC3C,4EAA4E;QAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEtE,4BAA4B;QAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAElD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,kDAAkD;YAClD,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAEnE,wCAAwC;YACxC,MAAM,SAAS,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;YAExE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;YAElE,8BAA8B;YAC9B,IAAI,iBAAiB,GAAmC,IAAI,CAAC;YAC7D,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtE,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;oBACxB,iBAAiB,GAAG,WAAW,CAAC,MAAiC,CAAC;gBACpE,CAAC;YACH,CAAC;YAED,+DAA+D;YAC/D,IAAI,cAAc,GAAmC,IAAI,CAAC;YAC1D,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjF,IAAI,eAAe,EAAE,OAAO,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;oBAChE,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;wBACxB,cAAc,GAAG,WAAW,CAAC,MAAiC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,IAAI,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;gBACpC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YAED,gDAAgD;YAChD,MAAM,OAAO,GAAG,aAAa,CAC3B,sBAAsB,CAAC,SAAS,CAAC,OAAO,IAAI,GAAG,aAAa,IAAI,QAAQ,EAAE,CAAC,CAC5E,CAAC;YACF,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YAElF,mCAAmC;YACnC,MAAM,oBAAoB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,GAAG,CAAC;gBACJ,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;aAC9E,CAAC,CAAC,CAAC;YACJ,MAAM,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxD,GAAG,CAAC;gBACJ,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;aAC9E,CAAC,CAAC,CAAC;YAEJ,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC5B,IAAI;gBACJ,SAAS,EAAE,aAAa;gBACxB,MAAM;gBACN,QAAQ;gBACR,OAAO;gBACP,WAAW;gBACX,cAAc,EAAE,oBAAoB;gBACpC,eAAe,EAAE,qBAAqB;gBACtC,iBAAiB;gBACjB,cAAc;gBACd,cAAc;gBACd,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,IAAI;gBAC1C,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;gBAC1B,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0FAA0F;IAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAErC,SAAS,OAAO,CAAC,UAAkB;QACjC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,yGAAyG;QACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE9C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;iBAAM,IACL,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC3B,CAAC;gBACD,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/C,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjB,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,aAAa,EAAE;QAC/C,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;KACxE,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,6CAA6C;YAC7C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtD,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAErD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,+FAA+F;IAC/F,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,6EAA6E;IAC7E,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC3D,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,IAAiB,EACjB,MAAc,EACd,UAAkB;IAElB,MAAM,UAAU,GAAsB,EAAE,CAAC;IAEzC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;IAEvE,qDAAqD;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhG,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC;QAC3C,4EAA4E;QAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEtE,4BAA4B;QAC5B,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;QAElD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,kDAAkD;YAClD,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;YAEnE,wCAAwC;YACxC,MAAM,SAAS,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;YAExE,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;YAChE,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;YAElE,8BAA8B;YAC9B,IAAI,iBAAiB,GAAmC,IAAI,CAAC;YAC7D,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtE,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;oBACxB,iBAAiB,GAAG,WAAW,CAAC,MAAiC,CAAC;gBACpE,CAAC;YACH,CAAC;YAED,+DAA+D;YAC/D,IAAI,cAAc,GAAmC,IAAI,CAAC;YAC1D,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjF,IAAI,eAAe,EAAE,OAAO,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;oBAChE,IAAI,WAAW,EAAE,MAAM,EAAE,CAAC;wBACxB,cAAc,GAAG,WAAW,CAAC,MAAiC,CAAC;oBACjE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;gBAC9B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,IAAI,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;gBACpC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,CAAC;YAED,4DAA4D;YAC5D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,GAAG,aAAa,IAAI,QAAQ,EAAE,CAAC;YACpE,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC;YAEhD,UAAU,CAAC,IAAI,CAAC;gBACd,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC5B,IAAI;gBACJ,SAAS,EAAE,aAAa;gBACxB,MAAM;gBACN,QAAQ;gBACR,OAAO;gBACP,WAAW;gBACX,cAAc;gBACd,eAAe;gBACf,iBAAiB;gBACjB,cAAc;gBACd,cAAc;gBACd,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,IAAI;gBAC1C,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;gBAC1B,UAAU;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,QAAiB;IACrE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAE5C,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7C,0BAA0B;QAC1B,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,yBAAyB,QAAQ,EAAE,EAAE;gBAChD,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;aACjC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;QAE9B,mEAAmE;QACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAE3C,kEAAkE;QAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEtE,yEAAyE;QACzE,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAErE,gDAAgD;QAChD,OAAO;YACL,QAAQ;YACR,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YACtB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YAC1B,UAAU;YACV,OAAO,EAAG,IAAI,CAAC,UAAU,EAAE,OAAmC,IAAI,EAAE;SACrE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,QAAQ,EAAE,EAAE;YAC5D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,8FAA8F;IAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAErC,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,uDAAuD;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAErD,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,oBAAoB,EAAE;QACtD,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACzD,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * MCP Tool Generator
3
+ *
4
+ * Generates MCP tool definitions from parsed OpenAPI operations.
5
+ * Handles both documentation mode and execution mode tool behaviors.
6
+ */
7
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ import { ParsedOperation } from "./openapi-parser.js";
9
+ import { CredentialManager } from "../auth/credential-manager.js";
10
+ import { HttpClient } from "../auth/http-client.js";
11
+ /**
12
+ * Tool response for documentation mode
13
+ */
14
+ export interface DocumentationResponse {
15
+ mode: "documentation";
16
+ tool: string;
17
+ description: string;
18
+ httpMethod: string;
19
+ apiPath: string;
20
+ parameters: ParameterInfo[];
21
+ requestBody: RequestBodyInfo | null;
22
+ exampleRequest: Record<string, unknown> | null;
23
+ f5xcctlCommand: string;
24
+ terraformResource: string;
25
+ terraformExample: string;
26
+ prerequisites: string[];
27
+ subscriptionTier: string;
28
+ }
29
+ /**
30
+ * Tool response for execution mode
31
+ */
32
+ export interface ExecutionResponse {
33
+ mode: "execution";
34
+ tool: string;
35
+ status: "success" | "error";
36
+ response: unknown;
37
+ resourceUrl: string | null;
38
+ duration: number;
39
+ }
40
+ /**
41
+ * Parameter information for documentation
42
+ */
43
+ export interface ParameterInfo {
44
+ name: string;
45
+ location: "path" | "query" | "body";
46
+ type: string;
47
+ required: boolean;
48
+ description: string;
49
+ }
50
+ /**
51
+ * Request body information for documentation
52
+ */
53
+ export interface RequestBodyInfo {
54
+ required: boolean;
55
+ contentType: string;
56
+ schema: Record<string, unknown>;
57
+ }
58
+ /**
59
+ * Subscription tier constants
60
+ */
61
+ export declare const SUBSCRIPTION_TIERS: {
62
+ readonly NO_TIER: "NO_TIER";
63
+ readonly STANDARD: "STANDARD";
64
+ readonly ADVANCED: "ADVANCED";
65
+ };
66
+ /**
67
+ * Register a tool on the MCP server
68
+ */
69
+ export declare function registerTool(server: McpServer, operation: ParsedOperation, credentialManager: CredentialManager, httpClient: HttpClient | null): void;
70
+ /**
71
+ * Register all tools from parsed operations
72
+ */
73
+ export declare function registerAllTools(server: McpServer, operations: ParsedOperation[], credentialManager: CredentialManager, httpClient: HttpClient | null): void;
74
+ //# sourceMappingURL=tool-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-generator.d.ts","sourceRoot":"","sources":["../../src/generator/tool-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAoB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAY,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAyTX;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,eAAe,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,GAAG,IAAI,GAC5B,IAAI,CAoGN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,eAAe,EAAE,EAC7B,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,GAAG,IAAI,GAC5B,IAAI,CAMN"}