@vinkius-core/mcp-fusion-openapi-gen 1.0.0 → 1.1.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.
package/README.md CHANGED
@@ -1,18 +1,21 @@
1
- # @vinkius-core/mcp-fusion-openapi-gen
2
-
3
- > OpenAPI 3.x → **MCP Fusion** Server Generator
4
-
5
- [![npm version](https://img.shields.io/npm/v/@vinkius-core/mcp-fusion-openapi-gen.svg?style=flat-square&color=0ea5e9)](https://www.npmjs.com/package/@vinkius-core/mcp-fusion-openapi-gen)
6
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.7+-blue.svg?style=flat-square&logo=typescript)](https://www.typescriptlang.org/)
7
- [![License](https://img.shields.io/badge/License-Apache_2.0-green.svg?style=flat-square)](../../LICENSE)
8
-
9
- Parse any OpenAPI 3.x spec and generate a **complete, ready-to-run MCP Server** powered by **MCP Fusion** — with Presenters, Tools, ToolRegistry, and server bootstrap. All features configurable via YAML.
1
+ <p align="center">
2
+ <h1 align="center">@vinkius-core/mcp-fusion-openapi-gen</h1>
3
+ <p align="center">
4
+ <strong>OpenAPI 3.x / Swagger 2.0 → MCP Fusion Server Generator</strong> — Parse any spec, generate a complete MCP server
5
+ </p>
6
+ </p>
7
+
8
+ <p align="center">
9
+ <a href="https://www.npmjs.com/package/@vinkius-core/mcp-fusion-openapi-gen"><img src="https://img.shields.io/npm/v/@vinkius-core/mcp-fusion-openapi-gen?color=blue" alt="npm" /></a>
10
+ <a href="https://github.com/vinkius-labs/mcp-fusion/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-green" alt="License" /></a>
11
+ <img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node" />
12
+ </p>
10
13
 
11
14
  ---
12
15
 
13
- ## What It Generates
16
+ > Parse any **OpenAPI 3.x** or **Swagger 2.0** spec and generate a **complete, ready-to-run MCP Server** powered by MCP Fusion — with Presenters, Tools, ToolRegistry, and server bootstrap. All features configurable via YAML.
14
17
 
15
- Given an OpenAPI spec (YAML/JSON), the generator produces:
18
+ ## What It Generates
16
19
 
17
20
  ```
18
21
  output/
@@ -29,36 +32,23 @@ output/
29
32
  └── index.ts # ToolRegistry + registerAll barrel
30
33
  ```
31
34
 
32
- Every file follows the **[MVA Convention](/mva-convention)** — the standard directory structure for **MCP Fusion** projects.
33
-
34
- ## Installation
35
-
36
- ```bash
37
- npm install @vinkius-core/mcp-fusion-openapi-gen
38
- ```
35
+ Every file follows the **MVA Convention** — the standard directory structure for MCP Fusion projects.
39
36
 
40
37
  ## Quick Start
41
38
 
42
- ### 1. Generate from OpenAPI spec
43
-
44
39
  ```bash
40
+ # 1. Generate from OpenAPI spec
45
41
  npx openapi-gen --input ./petstore.yaml --output ./generated
46
- ```
47
42
 
48
- ### 2. Run the generated server
49
-
50
- ```bash
43
+ # 2. Run the generated server
51
44
  API_BASE_URL=https://api.example.com npx tsx ./generated/server.ts
52
45
  ```
53
46
 
54
- That's it — you have a fully functional MCP Server.
55
-
56
47
  ## Configuration
57
48
 
58
- Create an `openapi-gen.yaml` file in your project root for full control:
49
+ Create an `openapi-gen.yaml` file in your project root:
59
50
 
60
51
  ```yaml
61
- # openapi-gen.yaml
62
52
  input: ./specs/petstore.yaml
63
53
  output: ./generated
64
54
 
@@ -67,36 +57,18 @@ features:
67
57
  annotations: true # Infer readOnly, destructive, idempotent from HTTP method
68
58
  presenters: true # Generate Presenter files with response schemas
69
59
  descriptions: true # Include summaries/descriptions on actions
70
- toonDescription: false # Enable TOON-optimized descriptions
71
60
  serverFile: true # Generate server.ts bootstrap
72
61
  deprecated: comment # 'include' | 'skip' | 'comment'
73
62
 
74
63
  naming:
75
64
  style: snake_case # 'snake_case' | 'camelCase'
76
- deduplication: true # Auto-suffix duplicates (_2, _3, ...)
65
+ deduplication: true # Auto-suffix duplicates
77
66
 
78
67
  server:
79
68
  name: petstore-mcp
80
69
  version: 1.0.0
81
- transport: stdio # 'stdio' | 'sse'
82
- toolExposition: flat # 'flat' | 'grouped' — how the LLM sees your tools
83
- actionSeparator: '_' # Flat mode delimiter: pet_get_by_id
84
-
85
- context:
86
- import: '../types.js#AppCtx' # Custom context type
87
-
88
- # Tag filtering
89
- includeTags:
90
- - pet
91
- - store
92
- excludeTags:
93
- - internal
94
- ```
95
-
96
- Auto-detected when present, or pass explicitly:
97
-
98
- ```bash
99
- npx openapi-gen --config ./openapi-gen.yaml
70
+ transport: stdio # 'stdio' | 'sse'
71
+ toolExposition: flat # 'flat' | 'grouped'
100
72
  ```
101
73
 
102
74
  ## CLI Options
@@ -105,84 +77,65 @@ npx openapi-gen --config ./openapi-gen.yaml
105
77
  |------|-------------|---------|
106
78
  | `--input <path>` | Path to OpenAPI YAML/JSON spec | From config |
107
79
  | `--output <dir>` | Output directory | `./generated` |
108
- | `--config <path>` | Path to config file | Auto-detect `openapi-gen.yaml` |
80
+ | `--config <path>` | Path to config file | Auto-detect |
109
81
  | `--base-url <expr>` | Base URL expression for fetch calls | `ctx.baseUrl` |
110
82
  | `--server-name <name>` | MCP Server name | `openapi-mcp-server` |
111
83
  | `--context <import>` | Custom context type import | Default `ApiContext` |
112
84
 
113
- CLI flags override config file values.
114
-
115
- ## Generated Code Features
116
-
117
- ### Annotations (from HTTP Method)
118
-
119
- ```typescript
120
- // GET → readOnly: true
121
- // DELETE → destructive: true
122
- // PUT → idempotent: true
123
- ```
124
-
125
- ### Coerced Path/Query Parameters
85
+ ## Programmatic API
126
86
 
127
87
  ```typescript
128
- // Path and query params use z.coerce for safe string-to-type conversion
129
- petId: z.coerce.number().int().describe('ID of pet to return')
130
- ```
88
+ import { parseOpenAPI, mapEndpoints, emitFiles, mergeConfig } from '@vinkius-core/mcp-fusion-openapi-gen';
131
89
 
132
- ### Presenter Binding
90
+ const spec = parseOpenAPI(yamlString);
91
+ const mapped = mapEndpoints(spec);
92
+ const config = mergeConfig({ features: { tags: true }, includeTags: ['pet'] });
93
+ const files = emitFiles(mapped, config);
133
94
 
134
- ```typescript
135
- // Each action with a response schema binds to a Presenter
136
- get_pet_by_id: {
137
- returns: PetPresenter,
138
- // ...
95
+ for (const file of files) {
96
+ writeFileSync(`./out/${file.path}`, file.content);
139
97
  }
140
98
  ```
141
99
 
142
- ### Tag Filtering
143
-
144
- Only generate tools for the tags you need:
145
-
146
- ```yaml
147
- includeTags: [pet] # Only pet tools
148
- excludeTags: [internal] # Everything except internal
149
- ```
150
-
151
- ### Custom Context
100
+ ## Swagger 2.0 Support
152
101
 
153
- Inject your own typed context into all tools:
102
+ Swagger 2.0 specs are **automatically detected and converted** to OpenAPI 3.0 internally. No extra configuration needed — just point to your spec:
154
103
 
155
- ```yaml
156
- context:
157
- import: '../types.js#AppCtx'
104
+ ```bash
105
+ # Works with Swagger 2.0 specs out of the box
106
+ npx openapi-gen --input ./petstore-v2.json --output ./generated
158
107
  ```
159
108
 
160
- Generates:
109
+ The converter handles:
161
110
 
162
- ```typescript
163
- import type { AppCtx } from '../types.js';
164
- const petTools = defineTool<AppCtx>('pet', { ... });
165
- ```
111
+ | Swagger 2.0 | → OpenAPI 3.0 |
112
+ |---|---|
113
+ | `host` + `basePath` + `schemes` | `servers` array |
114
+ | `definitions` | `components.schemas` |
115
+ | `parameters[in: body]` | `requestBody` |
116
+ | `parameters[in: formData]` | `requestBody` (multipart) |
117
+ | `#/definitions/Pet` | `#/components/schemas/Pet` |
118
+ | `produces` / `consumes` | Per-operation `content` types |
166
119
 
167
- ## Programmatic API
120
+ Runtime mode (`loadOpenAPI()`) also accepts Swagger 2.0:
168
121
 
169
122
  ```typescript
170
- import { parseOpenAPI, mapEndpoints, emitFiles, mergeConfig } from '@vinkius-core/mcp-fusion-openapi-gen';
171
-
172
- const spec = parseOpenAPI(yamlString);
173
- const mapped = mapEndpoints(spec);
174
- const config = mergeConfig({ features: { tags: true }, includeTags: ['pet'] });
175
- const files = emitFiles(mapped, config);
123
+ import { loadOpenAPI } from '@vinkius-core/mcp-fusion-openapi-gen';
176
124
 
177
- for (const file of files) {
178
- writeFileSync(`./out/${file.path}`, file.content);
179
- }
125
+ // Swagger 2.0 JSON auto-converted internally
126
+ const tools = loadOpenAPI(swagger2Json, { baseUrl: 'https://petstore.swagger.io/v2' });
127
+ registry.registerAll(...tools);
180
128
  ```
181
129
 
182
130
  ## Pipeline
183
131
 
184
132
  ```
185
- OpenAPI 3.x Spec (YAML/JSON)
133
+ OpenAPI 3.x / Swagger 2.0 Spec (YAML/JSON)
134
+
135
+
136
+ ┌──────────────────┐
137
+ │ Swagger2Converter │ → Auto-detect & convert 2.0 → 3.0 (if needed)
138
+ └──────────────────┘
186
139
 
187
140
 
188
141
  ┌─────────────┐
@@ -200,12 +153,24 @@ OpenAPI 3.x Spec (YAML/JSON)
200
153
  └────────────┘
201
154
  ```
202
155
 
156
+ ## Installation
157
+
158
+ ```bash
159
+ npm install @vinkius-core/mcp-fusion-openapi-gen
160
+ ```
161
+
162
+ ### Peer Dependencies
163
+
164
+ | Package | Version |
165
+ |---------|---------|
166
+ | `@vinkius-core/mcp-fusion` | `^2.0.0` |
167
+ | `zod` | `^3.25.1 \|\| ^4.0.0` |
168
+
203
169
  ## Requirements
204
170
 
205
- - Node.js ≥ 18
206
- - `@vinkius-core/mcp-fusion` ^2.0.0 (peer dependency)
207
- - `zod` ^3.25.1 || ^4.0.0 (peer dependency)
171
+ - **Node.js** ≥ 18.0.0
172
+ - **MCP Fusion** ≥ 2.0.0 (peer dependency)
208
173
 
209
174
  ## License
210
175
 
211
- Apache-2.0
176
+ [Apache-2.0](https://github.com/vinkius-labs/mcp-fusion/blob/main/LICENSE)
package/dist/index.d.ts CHANGED
@@ -21,6 +21,7 @@ export type { CliOverrides } from './config/ConfigLoader.js';
21
21
  export { parseOpenAPI } from './parser/OpenApiParser.js';
22
22
  export type { ApiSpec, ApiGroup, ApiAction, ApiParam, ApiResponseSchema, ApiServer, SchemaNode, } from './parser/types.js';
23
23
  export { resolveRefs } from './parser/RefResolver.js';
24
+ export { isSwagger2, convertSwagger2ToV3 } from './parser/Swagger2Converter.js';
24
25
  export { compileZod, compileInputSchema, compileResponseSchema } from './schema/ZodCompiler.js';
25
26
  export { mapEndpoints, inferAnnotations } from './mapper/EndpointMapper.js';
26
27
  export { emitFiles } from './emitter/CodeEmitter.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1E,YAAY,EACR,eAAe,EAAE,YAAY,EAAE,YAAY,EAC3C,aAAa,EAAE,YAAY,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACR,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACtC,iBAAiB,EAAE,SAAS,EAAE,UAAU,GAC3C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGtF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC1E,YAAY,EACR,eAAe,EAAE,YAAY,EAAE,YAAY,EAC3C,aAAa,EAAE,YAAY,GAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACzE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACR,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACtC,iBAAiB,EAAE,SAAS,EAAE,UAAU,GAC3C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGhG,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGtF,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ export { loadConfig, applyCliOverrides } from './config/ConfigLoader.js';
20
20
  // ── Parser ───────────────────────────────────────────────
21
21
  export { parseOpenAPI } from './parser/OpenApiParser.js';
22
22
  export { resolveRefs } from './parser/RefResolver.js';
23
+ export { isSwagger2, convertSwagger2ToV3 } from './parser/Swagger2Converter.js';
23
24
  // ── Zod Compiler ─────────────────────────────────────────
24
25
  export { compileZod, compileInputSchema, compileResponseSchema } from './schema/ZodCompiler.js';
25
26
  // ── Endpoint Mapper ──────────────────────────────────────
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK1E,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGzE,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,4DAA4D;AAC5D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhG,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEtF,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK1E,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGzE,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEhF,4DAA4D;AAC5D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhG,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEtF,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC"}
@@ -1,11 +1,14 @@
1
1
  import type { ApiSpec, ApiGroup, ApiAction, ApiParam, ApiResponseSchema, ApiServer, SchemaNode } from './types.js';
2
2
  export type { ApiSpec, ApiGroup, ApiAction, ApiParam, ApiResponseSchema, ApiServer, SchemaNode };
3
3
  /**
4
- * Parse an OpenAPI 3.x specification into the normalized IR.
4
+ * Parse an OpenAPI 3.x or Swagger 2.0 specification into the normalized IR.
5
+ *
6
+ * Swagger 2.0 documents are automatically converted to OpenAPI 3.0
7
+ * format before processing.
5
8
  *
6
9
  * @param input - YAML string, JSON string, or pre-parsed object
7
10
  * @returns Normalized {@link ApiSpec}
8
- * @throws If the input is not a valid OpenAPI 3.x document
11
+ * @throws If the input is not a valid OpenAPI document
9
12
  */
10
13
  export declare function parseOpenAPI(input: string | object): ApiSpec;
11
14
  //# sourceMappingURL=OpenApiParser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenApiParser.d.ts","sourceRoot":"","sources":["../../src/parser/OpenApiParser.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACR,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACtC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAC3C,MAAM,YAAY,CAAC;AAIpB,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAiDjG;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAoG5D"}
1
+ {"version":3,"file":"OpenApiParser.d.ts","sourceRoot":"","sources":["../../src/parser/OpenApiParser.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACR,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EACtC,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAC3C,MAAM,YAAY,CAAC;AAIpB,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAiDjG;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAyG5D"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * OpenApiParser — OpenAPI 3.x → IR Converter
2
+ * OpenApiParser — OpenAPI 3.x / Swagger 2.0 → IR Converter
3
3
  *
4
4
  * Accepts YAML or JSON input (string or pre-parsed object) and produces
5
5
  * a normalized {@link ApiSpec} intermediate representation. Resolves all
@@ -10,21 +10,29 @@
10
10
  */
11
11
  import { parse as parseYaml } from 'yaml';
12
12
  import { resolveRefs } from './RefResolver.js';
13
+ import { isSwagger2, convertSwagger2ToV3 } from './Swagger2Converter.js';
13
14
  // ── HTTP Methods ─────────────────────────────────────────
14
15
  const HTTP_METHODS = new Set(['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']);
15
16
  // ── Parser ───────────────────────────────────────────────
16
17
  /**
17
- * Parse an OpenAPI 3.x specification into the normalized IR.
18
+ * Parse an OpenAPI 3.x or Swagger 2.0 specification into the normalized IR.
19
+ *
20
+ * Swagger 2.0 documents are automatically converted to OpenAPI 3.0
21
+ * format before processing.
18
22
  *
19
23
  * @param input - YAML string, JSON string, or pre-parsed object
20
24
  * @returns Normalized {@link ApiSpec}
21
- * @throws If the input is not a valid OpenAPI 3.x document
25
+ * @throws If the input is not a valid OpenAPI document
22
26
  */
23
27
  export function parseOpenAPI(input) {
24
- const raw = typeof input === 'string' ? parseInput(input) : input;
28
+ let raw = typeof input === 'string' ? parseInput(input) : input;
29
+ // Auto-convert Swagger 2.0 → OpenAPI 3.0
30
+ if (isSwagger2(raw)) {
31
+ raw = convertSwagger2ToV3(raw);
32
+ }
25
33
  // Validate OpenAPI version
26
34
  if (!raw.openapi?.startsWith('3.')) {
27
- throw new Error(`Unsupported OpenAPI version: "${raw.openapi ?? 'missing'}". Only OpenAPI 3.x is supported.`);
35
+ throw new Error(`Unsupported OpenAPI version: "${raw.openapi ?? 'missing'}". OpenAPI 3.x or Swagger 2.0 required.`);
28
36
  }
29
37
  // Resolve all $ref pointers in-place
30
38
  resolveRefs(raw);
@@ -1 +1 @@
1
- {"version":3,"file":"OpenApiParser.js","sourceRoot":"","sources":["../../src/parser/OpenApiParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenApiParser.js","sourceRoot":"","sources":["../../src/parser/OpenApiParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Swagger2Converter — Swagger 2.0 → OpenAPI 3.0 Adapter
3
+ *
4
+ * Converts a Swagger 2.0 document into an OpenAPI 3.0-compatible
5
+ * structure so the existing parser can handle both versions.
6
+ *
7
+ * Handles:
8
+ * - `host` + `basePath` + `schemes` → `servers`
9
+ * - `definitions` → `components.schemas`
10
+ * - `parameters` with `in: body` → `requestBody`
11
+ * - `produces`/`consumes` → per-operation `content` types
12
+ * - `$ref` prefix rewrite (`#/definitions/` → `#/components/schemas/`)
13
+ *
14
+ * @module
15
+ */
16
+ type AnyObj = Record<string, any>;
17
+ /**
18
+ * Returns `true` if the input looks like a Swagger 2.0 document.
19
+ */
20
+ export declare function isSwagger2(raw: Record<string, unknown>): boolean;
21
+ /**
22
+ * Convert a Swagger 2.0 document into an OpenAPI 3.0-equivalent object.
23
+ *
24
+ * The output is NOT a valid 3.0 spec in every edge case, but it is
25
+ * structurally close enough for the existing parser to produce a
26
+ * correct {@link ApiSpec} IR.
27
+ */
28
+ export declare function convertSwagger2ToV3(raw: Record<string, unknown>): AnyObj;
29
+ export {};
30
+ //# sourceMappingURL=Swagger2Converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Swagger2Converter.d.ts","sourceRoot":"","sources":["../../src/parser/Swagger2Converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgDH,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAIlC;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAGhE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAiBxE"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Swagger2Converter — Swagger 2.0 → OpenAPI 3.0 Adapter
3
+ *
4
+ * Converts a Swagger 2.0 document into an OpenAPI 3.0-compatible
5
+ * structure so the existing parser can handle both versions.
6
+ *
7
+ * Handles:
8
+ * - `host` + `basePath` + `schemes` → `servers`
9
+ * - `definitions` → `components.schemas`
10
+ * - `parameters` with `in: body` → `requestBody`
11
+ * - `produces`/`consumes` → per-operation `content` types
12
+ * - `$ref` prefix rewrite (`#/definitions/` → `#/components/schemas/`)
13
+ *
14
+ * @module
15
+ */
16
+ // ── Public ───────────────────────────────────────────────
17
+ /**
18
+ * Returns `true` if the input looks like a Swagger 2.0 document.
19
+ */
20
+ export function isSwagger2(raw) {
21
+ const ver = raw['swagger'];
22
+ return typeof ver === 'string' && ver.startsWith('2.');
23
+ }
24
+ /**
25
+ * Convert a Swagger 2.0 document into an OpenAPI 3.0-equivalent object.
26
+ *
27
+ * The output is NOT a valid 3.0 spec in every edge case, but it is
28
+ * structurally close enough for the existing parser to produce a
29
+ * correct {@link ApiSpec} IR.
30
+ */
31
+ export function convertSwagger2ToV3(raw) {
32
+ const doc = raw;
33
+ const v3 = {
34
+ openapi: '3.0.0',
35
+ info: doc.info ?? { title: 'Untitled', version: '0.0.0' },
36
+ servers: buildServers(doc),
37
+ paths: convertPaths(doc.paths ?? {}, doc.consumes, doc.produces),
38
+ tags: doc.tags,
39
+ };
40
+ // Move definitions → components.schemas
41
+ if (doc.definitions) {
42
+ v3['components'] = { schemas: doc.definitions };
43
+ }
44
+ return v3;
45
+ }
46
+ // ── Internals ────────────────────────────────────────────
47
+ function buildServers(doc) {
48
+ const host = doc.host ?? 'localhost';
49
+ const basePath = doc.basePath ?? '/';
50
+ const schemes = doc.schemes ?? ['https'];
51
+ return schemes.map(s => ({ url: `${s}://${host}${basePath}`.replace(/\/+$/, '') }));
52
+ }
53
+ function convertPaths(paths, globalConsumes, globalProduces) {
54
+ const converted = {};
55
+ const httpMethods = new Set(['get', 'post', 'put', 'patch', 'delete', 'head', 'options']);
56
+ for (const [path, pathItem] of Object.entries(paths)) {
57
+ if (!pathItem || typeof pathItem !== 'object')
58
+ continue;
59
+ const newPathItem = {};
60
+ for (const [key, value] of Object.entries(pathItem)) {
61
+ if (!httpMethods.has(key)) {
62
+ // Copy non-HTTP keys (e.g. path-level parameters)
63
+ if (key === 'parameters') {
64
+ newPathItem[key] = convertNonBodyParams(value);
65
+ }
66
+ else {
67
+ newPathItem[key] = value;
68
+ }
69
+ continue;
70
+ }
71
+ const op = value;
72
+ const newOp = {
73
+ operationId: op.operationId,
74
+ summary: op.summary,
75
+ description: op.description,
76
+ tags: op.tags,
77
+ deprecated: op.deprecated,
78
+ };
79
+ // Split parameters into body vs non-body
80
+ const rawParams = op.parameters ?? [];
81
+ const bodyParam = rawParams.find(p => p.in === 'body');
82
+ const formParams = rawParams.filter(p => p.in === 'formData');
83
+ const otherParams = rawParams.filter(p => p.in !== 'body' && p.in !== 'formData');
84
+ // Convert non-body params (add schema wrapper for v2 type→schema)
85
+ newOp['parameters'] = convertNonBodyParams(otherParams);
86
+ // body → requestBody
87
+ if (bodyParam) {
88
+ const consumes = op.consumes ?? globalConsumes ?? ['application/json'];
89
+ const content = {};
90
+ for (const mime of consumes) {
91
+ content[mime] = { schema: rewriteRefs(bodyParam.schema ?? {}) };
92
+ }
93
+ newOp['requestBody'] = {
94
+ required: bodyParam.required ?? false,
95
+ ...(bodyParam.description ? { description: bodyParam.description } : {}),
96
+ content,
97
+ };
98
+ }
99
+ // formData → requestBody (multipart or urlencoded)
100
+ if (!bodyParam && formParams.length > 0) {
101
+ const consumes = op.consumes ?? globalConsumes ?? ['application/x-www-form-urlencoded'];
102
+ const properties = {};
103
+ const required = [];
104
+ for (const fp of formParams) {
105
+ properties[fp.name] = { type: fp.type ?? 'string' };
106
+ if (fp.description)
107
+ properties[fp.name]['description'] = fp.description;
108
+ if (fp.required)
109
+ required.push(fp.name);
110
+ }
111
+ const schema = { type: 'object', properties };
112
+ if (required.length > 0)
113
+ schema['required'] = required;
114
+ const content = {};
115
+ for (const mime of consumes) {
116
+ content[mime] = { schema };
117
+ }
118
+ newOp['requestBody'] = { content };
119
+ }
120
+ // Convert responses
121
+ if (op.responses) {
122
+ const produces = op.produces ?? globalProduces ?? ['application/json'];
123
+ const newResponses = {};
124
+ for (const [code, resp] of Object.entries(op.responses)) {
125
+ const newResp = {};
126
+ if (resp.description)
127
+ newResp['description'] = resp.description;
128
+ if (resp.schema) {
129
+ newResp['content'] = {};
130
+ for (const mime of produces) {
131
+ newResp['content'][mime] = { schema: rewriteRefs(resp.schema) };
132
+ }
133
+ }
134
+ newResponses[code] = newResp;
135
+ }
136
+ newOp['responses'] = newResponses;
137
+ }
138
+ newPathItem[key] = newOp;
139
+ }
140
+ converted[path] = newPathItem;
141
+ }
142
+ return converted;
143
+ }
144
+ /**
145
+ * Convert v2 parameters (which embed type directly) to v3 format (schema wrapper).
146
+ */
147
+ function convertNonBodyParams(params) {
148
+ return params.map(p => {
149
+ if (p.schema)
150
+ return p; // Already has schema (v3 style)
151
+ const schema = {};
152
+ if (p.type)
153
+ schema['type'] = p.type;
154
+ if (p.format)
155
+ schema['format'] = p.format;
156
+ if (p.enum)
157
+ schema['enum'] = p.enum;
158
+ if (p.default !== undefined)
159
+ schema['default'] = p.default;
160
+ if (p.items)
161
+ schema['items'] = p.items;
162
+ const converted = {
163
+ name: p.name,
164
+ in: p.in,
165
+ schema,
166
+ };
167
+ if (p.required !== undefined)
168
+ converted['required'] = p.required;
169
+ if (p.description)
170
+ converted['description'] = p.description;
171
+ return converted;
172
+ });
173
+ }
174
+ /**
175
+ * Deep-rewrite `$ref` paths from v2 format to v3 format.
176
+ * `#/definitions/Pet` → `#/components/schemas/Pet`
177
+ */
178
+ function rewriteRefs(obj) {
179
+ if (obj === null || obj === undefined)
180
+ return obj;
181
+ if (typeof obj !== 'object')
182
+ return obj;
183
+ if (Array.isArray(obj)) {
184
+ return obj.map(item => rewriteRefs(item));
185
+ }
186
+ const result = {};
187
+ for (const [key, value] of Object.entries(obj)) {
188
+ if (key === '$ref' && typeof value === 'string') {
189
+ result[key] = value.replace('#/definitions/', '#/components/schemas/');
190
+ }
191
+ else {
192
+ result[key] = rewriteRefs(value);
193
+ }
194
+ }
195
+ return result;
196
+ }
197
+ //# sourceMappingURL=Swagger2Converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Swagger2Converter.js","sourceRoot":"","sources":["../../src/parser/Swagger2Converter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vinkius-core/mcp-fusion-openapi-gen",
3
- "version": "1.0.0",
4
- "description": "OpenAPI-to-MCP Fusion Server Generator. Parses OpenAPI 3.x specs and generates a complete, ready-to-run MCP Server with full MVA tool stacks (Presenters, Tools, Registry, Server) — all features configurable via YAML.",
3
+ "version": "1.1.0",
4
+ "description": "OpenAPI-to-MCP Fusion Server Generator. Parses OpenAPI 3.x and Swagger 2.0 specs and generates a complete, ready-to-run MCP Server with full MVA tool stacks (Presenters, Tools, Registry, Server) — all features configurable via YAML.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -63,6 +63,7 @@
63
63
  },
64
64
  "license": "Apache-2.0",
65
65
  "devDependencies": {
66
- "@types/node": "^25.3.0"
66
+ "@types/node": "^25.3.0",
67
+ "@vinkius-core/mcp-fusion": ">=2.14.0"
67
68
  }
68
69
  }