@vinkius-core/mcp-fusion-openapi-gen 1.0.1 → 3.1.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.
package/README.md CHANGED
@@ -1,141 +1,176 @@
1
- <p align="center">
2
- <h1 align="center">@vinkius-core/mcp-fusion-openapi-gen</h1>
3
- <p align="center">
4
- <strong>OpenAPI 3.x → 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>
13
-
14
- ---
15
-
16
- > 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.
17
-
18
- ## What It Generates
19
-
20
- ```
21
- output/
22
- ├── models/ # M — Zod schemas (data boundary)
23
- │ ├── pet.schema.ts
24
- │ └── store.schema.ts
25
- ├── views/ # V — createPresenter() (perception layer)
26
- │ ├── pet.presenter.ts
27
- │ └── store.presenter.ts
28
- ├── agents/ # A — Agent layer — defineTool()
29
- │ ├── pet.tool.ts
30
- │ └── store.tool.ts
31
- ├── server.ts # MCP Server bootstrap
32
- └── index.ts # ToolRegistry + registerAll barrel
33
- ```
34
-
35
- Every file follows the **MVA Convention** — the standard directory structure for MCP Fusion projects.
36
-
37
- ## Quick Start
38
-
39
- ```bash
40
- # 1. Generate from OpenAPI spec
41
- npx openapi-gen --input ./petstore.yaml --output ./generated
42
-
43
- # 2. Run the generated server
44
- API_BASE_URL=https://api.example.com npx tsx ./generated/server.ts
45
- ```
46
-
47
- ## Configuration
48
-
49
- Create an `openapi-gen.yaml` file in your project root:
50
-
51
- ```yaml
52
- input: ./specs/petstore.yaml
53
- output: ./generated
54
-
55
- features:
56
- tags: true # Add tags to tools
57
- annotations: true # Infer readOnly, destructive, idempotent from HTTP method
58
- presenters: true # Generate Presenter files with response schemas
59
- descriptions: true # Include summaries/descriptions on actions
60
- serverFile: true # Generate server.ts bootstrap
61
- deprecated: comment # 'include' | 'skip' | 'comment'
62
-
63
- naming:
64
- style: snake_case # 'snake_case' | 'camelCase'
65
- deduplication: true # Auto-suffix duplicates
66
-
67
- server:
68
- name: petstore-mcp
69
- version: 1.0.0
70
- transport: stdio # 'stdio' | 'sse'
71
- toolExposition: flat # 'flat' | 'grouped'
72
- ```
73
-
74
- ## CLI Options
75
-
76
- | Flag | Description | Default |
77
- |------|-------------|---------|
78
- | `--input <path>` | Path to OpenAPI YAML/JSON spec | From config |
79
- | `--output <dir>` | Output directory | `./generated` |
80
- | `--config <path>` | Path to config file | Auto-detect |
81
- | `--base-url <expr>` | Base URL expression for fetch calls | `ctx.baseUrl` |
82
- | `--server-name <name>` | MCP Server name | `openapi-mcp-server` |
83
- | `--context <import>` | Custom context type import | Default `ApiContext` |
84
-
85
- ## Programmatic API
86
-
87
- ```typescript
88
- import { parseOpenAPI, mapEndpoints, emitFiles, mergeConfig } from '@vinkius-core/mcp-fusion-openapi-gen';
89
-
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);
94
-
95
- for (const file of files) {
96
- writeFileSync(`./out/${file.path}`, file.content);
97
- }
98
- ```
99
-
100
- ## Pipeline
101
-
102
- ```
103
- OpenAPI 3.x Spec (YAML/JSON)
104
-
105
-
106
- ┌─────────────┐
107
- │ OpenApiParser │ → ApiSpec IR (groups, actions, params, responses)
108
- └─────────────┘
109
-
110
-
111
- ┌───────────────┐
112
- │ EndpointMapper │ → Named actions (snake_case), dedup, annotations
113
- └───────────────┘
114
-
115
-
116
- ┌────────────┐
117
- CodeEmitter │ → TypeScript files (Presenters, Tools, Registry, Server)
118
- └────────────┘
119
- ```
120
-
121
- ## Installation
122
-
123
- ```bash
124
- npm install @vinkius-core/mcp-fusion-openapi-gen
125
- ```
126
-
127
- ### Peer Dependencies
128
-
129
- | Package | Version |
130
- |---------|---------|
131
- | `@vinkius-core/mcp-fusion` | `^2.0.0` |
132
- | `zod` | `^3.25.1 \|\| ^4.0.0` |
133
-
134
- ## Requirements
135
-
136
- - **Node.js** ≥ 18.0.0
137
- - **MCP Fusion** 2.0.0 (peer dependency)
138
-
139
- ## License
140
-
141
- [Apache-2.0](https://github.com/vinkius-labs/mcp-fusion/blob/main/LICENSE)
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>
13
+
14
+ ---
15
+
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.
17
+
18
+ ## What It Generates
19
+
20
+ ```
21
+ output/
22
+ ├── models/ # M — Zod schemas (data boundary)
23
+ │ ├── pet.schema.ts
24
+ │ └── store.schema.ts
25
+ ├── views/ # V — createPresenter() (perception layer)
26
+ │ ├── pet.presenter.ts
27
+ │ └── store.presenter.ts
28
+ ├── agents/ # A — Agent layer — defineTool()
29
+ │ ├── pet.tool.ts
30
+ │ └── store.tool.ts
31
+ ├── server.ts # MCP Server bootstrap
32
+ └── index.ts # ToolRegistry + registerAll barrel
33
+ ```
34
+
35
+ Every file follows the **MVA Convention** — the standard directory structure for MCP Fusion projects.
36
+
37
+ ## Quick Start
38
+
39
+ ```bash
40
+ # 1. Generate from OpenAPI spec
41
+ npx openapi-gen --input ./petstore.yaml --output ./generated
42
+
43
+ # 2. Run the generated server
44
+ API_BASE_URL=https://api.example.com npx tsx ./generated/server.ts
45
+ ```
46
+
47
+ ## Configuration
48
+
49
+ Create an `openapi-gen.yaml` file in your project root:
50
+
51
+ ```yaml
52
+ input: ./specs/petstore.yaml
53
+ output: ./generated
54
+
55
+ features:
56
+ tags: true # Add tags to tools
57
+ annotations: true # Infer readOnly, destructive, idempotent from HTTP method
58
+ presenters: true # Generate Presenter files with response schemas
59
+ descriptions: true # Include summaries/descriptions on actions
60
+ serverFile: true # Generate server.ts bootstrap
61
+ deprecated: comment # 'include' | 'skip' | 'comment'
62
+
63
+ naming:
64
+ style: snake_case # 'snake_case' | 'camelCase'
65
+ deduplication: true # Auto-suffix duplicates
66
+
67
+ server:
68
+ name: petstore-mcp
69
+ version: 1.0.0
70
+ transport: stdio # 'stdio' | 'sse'
71
+ toolExposition: flat # 'flat' | 'grouped'
72
+ ```
73
+
74
+ ## CLI Options
75
+
76
+ | Flag | Description | Default |
77
+ |------|-------------|---------|
78
+ | `--input <path>` | Path to OpenAPI YAML/JSON spec | From config |
79
+ | `--output <dir>` | Output directory | `./generated` |
80
+ | `--config <path>` | Path to config file | Auto-detect |
81
+ | `--base-url <expr>` | Base URL expression for fetch calls | `ctx.baseUrl` |
82
+ | `--server-name <name>` | MCP Server name | `openapi-mcp-server` |
83
+ | `--context <import>` | Custom context type import | Default `ApiContext` |
84
+
85
+ ## Programmatic API
86
+
87
+ ```typescript
88
+ import { parseOpenAPI, mapEndpoints, emitFiles, mergeConfig } from '@vinkius-core/mcp-fusion-openapi-gen';
89
+
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);
94
+
95
+ for (const file of files) {
96
+ writeFileSync(`./out/${file.path}`, file.content);
97
+ }
98
+ ```
99
+
100
+ ## Swagger 2.0 Support
101
+
102
+ Swagger 2.0 specs are **automatically detected and converted** to OpenAPI 3.0 internally. No extra configuration needed — just point to your spec:
103
+
104
+ ```bash
105
+ # Works with Swagger 2.0 specs out of the box
106
+ npx openapi-gen --input ./petstore-v2.json --output ./generated
107
+ ```
108
+
109
+ The converter handles:
110
+
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 |
119
+
120
+ Runtime mode (`loadOpenAPI()`) also accepts Swagger 2.0:
121
+
122
+ ```typescript
123
+ import { loadOpenAPI } from '@vinkius-core/mcp-fusion-openapi-gen';
124
+
125
+ // Swagger 2.0 JSON — auto-converted internally
126
+ const tools = loadOpenAPI(swagger2Json, { baseUrl: 'https://petstore.swagger.io/v2' });
127
+ registry.registerAll(...tools);
128
+ ```
129
+
130
+ ## Pipeline
131
+
132
+ ```
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
+ └──────────────────┘
139
+
140
+
141
+ ┌─────────────┐
142
+ │ OpenApiParser │ → ApiSpec IR (groups, actions, params, responses)
143
+ └─────────────┘
144
+
145
+
146
+ ┌───────────────┐
147
+ │ EndpointMapper │ → Named actions (snake_case), dedup, annotations
148
+ └───────────────┘
149
+
150
+
151
+ ┌────────────┐
152
+ │ CodeEmitter │ → TypeScript files (Presenters, Tools, Registry, Server)
153
+ └────────────┘
154
+ ```
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
+
169
+ ## Requirements
170
+
171
+ - **Node.js** ≥ 18.0.0
172
+ - **MCP Fusion** ≥ 2.0.0 (peer dependency)
173
+
174
+ ## License
175
+
176
+ [Apache-2.0](https://github.com/vinkius-labs/mcp-fusion/blob/main/LICENSE)
package/dist/cli.js CHANGED
@@ -114,48 +114,48 @@ function runGenerate(rawArgs) {
114
114
  }
115
115
  }
116
116
  function printHelp() {
117
- console.log(`
118
- openapi-gen — OpenAPI → MCP Fusion Server Generator
119
-
120
- USAGE:
121
- openapi-gen generate -i <spec> -o <outDir> [options]
122
-
123
- COMMANDS:
124
- generate Parse OpenAPI spec and generate a complete MCP Server
125
-
126
- OPTIONS:
127
- -i, --input <file> OpenAPI spec file (YAML or JSON)
128
- -o, --output <dir> Output directory (default: ./generated)
129
- -c, --config <file> Config file (default: auto-detect openapi-gen.yaml)
130
- --base-url <url> Base URL expression for fetch calls
131
- --context <path#Type> Custom context type import
132
- --server-name <name> MCP Server name
133
- --help Show this help message
134
-
135
- CONFIG FILE (openapi-gen.yaml):
136
- input: ./petstore.yaml
137
- output: ./src/generated
138
- features:
139
- tags: true
140
- annotations: true
141
- presenters: true
142
- descriptions: true
143
- deprecated: comment # skip | comment | include
144
- toonDescription: false
145
- serverFile: true
146
- context:
147
- import: '../types.js#AppCtx'
148
- server:
149
- name: my-api-server
150
- version: 1.0.0
151
- transport: stdio
152
- includeTags: []
153
- excludeTags: []
154
-
155
- EXAMPLES:
156
- openapi-gen generate -i petstore.yaml -o ./src/mcp
157
- openapi-gen generate -i api.json -o ./mcp --config project.yaml
158
- openapi-gen generate -i spec.yaml -o ./tools --server-name "my-tools"
117
+ console.log(`
118
+ openapi-gen — OpenAPI → MCP Fusion Server Generator
119
+
120
+ USAGE:
121
+ openapi-gen generate -i <spec> -o <outDir> [options]
122
+
123
+ COMMANDS:
124
+ generate Parse OpenAPI spec and generate a complete MCP Server
125
+
126
+ OPTIONS:
127
+ -i, --input <file> OpenAPI spec file (YAML or JSON)
128
+ -o, --output <dir> Output directory (default: ./generated)
129
+ -c, --config <file> Config file (default: auto-detect openapi-gen.yaml)
130
+ --base-url <url> Base URL expression for fetch calls
131
+ --context <path#Type> Custom context type import
132
+ --server-name <name> MCP Server name
133
+ --help Show this help message
134
+
135
+ CONFIG FILE (openapi-gen.yaml):
136
+ input: ./petstore.yaml
137
+ output: ./src/generated
138
+ features:
139
+ tags: true
140
+ annotations: true
141
+ presenters: true
142
+ descriptions: true
143
+ deprecated: comment # skip | comment | include
144
+ toonDescription: false
145
+ serverFile: true
146
+ context:
147
+ import: '../types.js#AppCtx'
148
+ server:
149
+ name: my-api-server
150
+ version: 1.0.0
151
+ transport: stdio
152
+ includeTags: []
153
+ excludeTags: []
154
+
155
+ EXAMPLES:
156
+ openapi-gen generate -i petstore.yaml -o ./src/mcp
157
+ openapi-gen generate -i api.json -o ./mcp --config project.yaml
158
+ openapi-gen generate -i spec.yaml -o ./tools --server-name "my-tools"
159
159
  `);
160
160
  }
161
161
  // ── Main ─────────────────────────────────────────────────
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.1",
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": "3.1.4",
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",