@tyvm/swagger-mcp 0.0.6 → 0.0.9

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
@@ -5,7 +5,7 @@ Generate MCP (Model Context Protocol) servers from Swagger/OpenAPI specification
5
5
  ## Usage
6
6
 
7
7
  ```bash
8
- npx @tyvm/swagger-mcp <swagger-url> [output-dir] [--start-stdio]
8
+ npx @tyvm/swagger-mcp --url <swagger-url> [--output output-dir] [--file input-file] [--start-stdio]
9
9
  ```
10
10
 
11
11
  By default, the output directory is generated based on the domain name of the swagger URL. For example, `https://api.dev.knowhow.tyvm.ai/docs/` would create `./generated/api_dev_knowhow_tyvm_ai/`.
@@ -14,10 +14,10 @@ By default, the output directory is generated based on the domain name of the sw
14
14
 
15
15
  ```bash
16
16
  # Generate and immediately start the server (creates ./generated/api_example_com/)
17
- npx @tyvm/swagger-mcp https://api.example.com/swagger.json --start-stdio
17
+ npx @tyvm/swagger-mcp --url https://api.example.com/swagger.json --start-stdio
18
18
 
19
19
  # Generate MCP server from Swagger spec (creates ./generated/api_example_com/)
20
- npx @tyvm/swagger-mcp https://api.example.com/swagger.json
20
+ npx @tyvm/swagger-mcp --url https://api.example.com/swagger.json
21
21
 
22
22
  ```
23
23
 
@@ -54,6 +54,7 @@ The tool creates:
54
54
  "args": [
55
55
  "-y",
56
56
  "@tyvm/swagger-mcp",
57
+ "--url",
57
58
  "https://api.dev.knowhow.tyvm.ai/docs/swagger.json",
58
59
  "--start-stdio"
59
60
  ],
@@ -0,0 +1,3 @@
1
+ import { SwaggerMcpGenerator } from './generator';
2
+ export declare function generateExpressCompositionTemplate(generator: SwaggerMcpGenerator): string;
3
+ //# sourceMappingURL=express-template-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-template-generator.d.ts","sourceRoot":"","sources":["../src/express-template-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CAoKzF"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateExpressCompositionTemplate = void 0;
4
+ function generateExpressCompositionTemplate(generator) {
5
+ const tools = generator.generateTools();
6
+ const apiBaseUrl = generator.getApiBaseUrlPublic();
7
+ const swaggerSpec = generator.getSwaggerSpec();
8
+ const serverName = swaggerSpec.info.title.toLowerCase().replace(/[^a-z0-9]/g, "-");
9
+ const serverVersion = swaggerSpec.info.version;
10
+ return `import express from 'express';
11
+ import { randomUUID } from 'node:crypto';
12
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
13
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
14
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
15
+ import { createMcpServer } from './server-factory';
16
+
17
+ /**
18
+ * Stateless Express app composition - creates new server instance for each request
19
+ * @param app Express app instance to compose with
20
+ * @param mcpPath Path for MCP endpoints (default: '/mcp')
21
+ * @returns The same Express app instance for chaining
22
+ */
23
+ export function statelessApp(app: express.Application, mcpPath: string = '/mcp'): express.Application {
24
+ app.post(mcpPath, async (req: express.Request, res: express.Response) => {
25
+ try {
26
+ // Extract authorization header for API calls
27
+ const authHeader = req.headers.authorization;
28
+ const requestHeaders = authHeader ? { Authorization: authHeader } : undefined;
29
+
30
+ const server = createMcpServer(requestHeaders);
31
+ const transport = new StreamableHTTPServerTransport({
32
+ sessionIdGenerator: undefined,
33
+ });
34
+
35
+ res.on('close', () => {
36
+ console.log('Request closed');
37
+ transport.close();
38
+ server.close();
39
+ });
40
+
41
+ await server.connect(transport);
42
+ await transport.handleRequest(req, res, req.body);
43
+ } catch (error) {
44
+ console.error('Error handling MCP request:', error);
45
+ if (!res.headersSent) {
46
+ res.status(500).json({
47
+ jsonrpc: '2.0',
48
+ error: {
49
+ code: -32603,
50
+ message: 'Internal server error',
51
+ },
52
+ id: null,
53
+ });
54
+ }
55
+ }
56
+ });
57
+
58
+ // SSE notifications not supported in stateless mode
59
+ app.get(mcpPath, async (req: express.Request, res: express.Response) => {
60
+ console.log('Received GET MCP request');
61
+ res.writeHead(405).end(JSON.stringify({
62
+ jsonrpc: "2.0",
63
+ error: {
64
+ code: -32000,
65
+ message: "Method not allowed."
66
+ },
67
+ id: null
68
+ }));
69
+ });
70
+
71
+ // Session termination not needed in stateless mode
72
+ app.delete(mcpPath, async (req: express.Request, res: express.Response) => {
73
+ console.log('Received DELETE MCP request');
74
+ res.writeHead(405).end(JSON.stringify({
75
+ jsonrpc: "2.0",
76
+ error: {
77
+ code: -32000,
78
+ message: "Method not allowed."
79
+ },
80
+ id: null
81
+ }));
82
+ });
83
+
84
+ return app;
85
+ }
86
+
87
+ /**
88
+ * Stateful Express app composition - maintains session state across requests
89
+ * @param app Express app instance to compose with
90
+ * @param mcpPath Path for MCP endpoints (default: '/mcp')
91
+ * @returns The same Express app instance for chaining
92
+ */
93
+ export function statefulApp(app: express.Application, mcpPath: string = '/mcp'): express.Application {
94
+ // Map to store transports by session ID
95
+ const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
96
+
97
+ // Handle POST requests for client-to-server communication
98
+ app.post(mcpPath, async (req: express.Request, res: express.Response) => {
99
+ // Extract authorization header for API calls
100
+ const authHeader = req.headers.authorization;
101
+ const requestHeaders = authHeader ? { Authorization: authHeader } : undefined;
102
+
103
+ // Check for existing session ID
104
+ const sessionId = req.headers['mcp-session-id'] as string | undefined;
105
+ let transport: StreamableHTTPServerTransport;
106
+
107
+ if (sessionId && transports[sessionId]) {
108
+ // Reuse existing transport
109
+ transport = transports[sessionId];
110
+ } else if (!sessionId && isInitializeRequest(req.body)) {
111
+ // New initialization request
112
+ transport = new StreamableHTTPServerTransport({
113
+ sessionIdGenerator: () => randomUUID(),
114
+ onsessioninitialized: (sessionId) => {
115
+ // Store the transport by session ID
116
+ transports[sessionId] = transport;
117
+ },
118
+ });
119
+
120
+ // Clean up transport when closed
121
+ transport.onclose = () => {
122
+ if (transport.sessionId) {
123
+ delete transports[transport.sessionId];
124
+ }
125
+ };
126
+
127
+ const server = createMcpServer(requestHeaders);
128
+ await server.connect(transport);
129
+ } else {
130
+ // Invalid request
131
+ res.status(400).json({
132
+ jsonrpc: '2.0',
133
+ error: {
134
+ code: -32000,
135
+ message: 'Bad Request: No valid session ID provided',
136
+ },
137
+ id: null,
138
+ });
139
+ return;
140
+ }
141
+
142
+ // Handle the request
143
+ await transport.handleRequest(req, res, req.body);
144
+ });
145
+
146
+ // Reusable handler for GET and DELETE requests
147
+ const handleSessionRequest = async (req: express.Request, res: express.Response) => {
148
+ const sessionId = req.headers['mcp-session-id'] as string | undefined;
149
+ if (!sessionId || !transports[sessionId]) {
150
+ res.status(400).send('Invalid or missing session ID');
151
+ return;
152
+ }
153
+
154
+ const transport = transports[sessionId];
155
+ await transport.handleRequest(req, res);
156
+ };
157
+
158
+ // Handle GET requests for server-to-client notifications via SSE
159
+ app.get(mcpPath, handleSessionRequest);
160
+
161
+ // Handle DELETE requests for session termination
162
+ app.delete(mcpPath, handleSessionRequest);
163
+
164
+ return app;
165
+ }
166
+ `;
167
+ }
168
+ exports.generateExpressCompositionTemplate = generateExpressCompositionTemplate;
169
+ //# sourceMappingURL=express-template-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express-template-generator.js","sourceRoot":"","sources":["../src/express-template-generator.ts"],"names":[],"mappings":";;;AAEA,SAAgB,kCAAkC,CAAC,SAA8B;IAC/E,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;IAE/C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4JR,CAAC;AACF,CAAC;AApKD,gFAoKC"}
@@ -1,17 +1,24 @@
1
1
  import { Tool, SwaggerSpec } from "./types";
2
2
  export declare class SwaggerMcpGenerator {
3
3
  private swaggerSpec;
4
- private baseUrl;
4
+ private swaggerSource;
5
+ private apiBaseUrl;
5
6
  private headers;
6
- constructor(swaggerUrl: string);
7
+ constructor(swaggerSource: string, apiBaseUrl?: string);
7
8
  private setupHeaders;
9
+ private isUrl;
8
10
  loadSwaggerSpec(): Promise<SwaggerSpec>;
11
+ getApiBaseUrlPublic(): string;
12
+ getSwaggerSpec(): SwaggerSpec;
9
13
  private getApiBaseUrl;
10
14
  private convertSwaggerTypeToToolProp;
11
15
  private resolveSchemaRef;
12
16
  private resolveSchemaRefOnce;
13
17
  generateTools(): Tool[];
18
+ private generateMethodParameters;
14
19
  generateClientFunctions(): string;
20
+ generateExpressComposition(): string;
21
+ generateServerFactory(): string;
15
22
  generateMcpServer(): string;
16
23
  saveGeneratedFiles(outputDir?: string): Promise<void>;
17
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAY,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA8B;gBAEjC,UAAU,EAAE,MAAM;IAK9B,OAAO,CAAC,YAAY;IAed,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAqB7C,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,4BAA4B;IA0DpC,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,oBAAoB;IAsB5B,aAAa,IAAI,IAAI,EAAE;IA0GvB,uBAAuB,IAAI,MAAM;IAqFjC,iBAAiB,IAAI,MAAM;IAwIrB,kBAAkB,CAAC,SAAS,GAAE,MAAsB;CA4E3D"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAY,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAA8B;gBAEjC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAOtD,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,KAAK;IASP,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAqCtC,mBAAmB,IAAI,MAAM;IAI7B,cAAc,IAAI,WAAW;IAIpC,OAAO,CAAC,aAAa;IAgCrB,OAAO,CAAC,4BAA4B;IA0DpC,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,oBAAoB;IAsB5B,aAAa,IAAI,IAAI,EAAE;IA0GvB,OAAO,CAAC,wBAAwB;IAgEhC,uBAAuB,IAAI,MAAM;IA+FjC,0BAA0B,IAAI,MAAM;IAQpC,qBAAqB,IAAI,MAAM;IAwI/B,iBAAiB,IAAI,MAAM;IAwCrB,kBAAkB,CAAC,SAAS,GAAE,MAAsB;CAiF3D"}
package/dist/generator.js CHANGED
@@ -8,9 +8,11 @@ const axios_1 = __importDefault(require("axios"));
8
8
  const fs_1 = require("fs");
9
9
  const path_1 = require("path");
10
10
  class SwaggerMcpGenerator {
11
- constructor(swaggerUrl) {
11
+ constructor(swaggerSource, apiBaseUrl) {
12
12
  this.headers = {};
13
- this.baseUrl = swaggerUrl;
13
+ this.swaggerSource = swaggerSource;
14
+ // If apiBaseUrl is not provided, assume swaggerSource is also the API base URL
15
+ this.apiBaseUrl = apiBaseUrl || swaggerSource;
14
16
  this.setupHeaders();
15
17
  }
16
18
  setupHeaders() {
@@ -26,16 +28,39 @@ class SwaggerMcpGenerator {
26
28
  this.headers["Authorization"] = process.env.HEADER_AUTHORIZATION;
27
29
  }
28
30
  }
31
+ isUrl(input) {
32
+ try {
33
+ new URL(input);
34
+ return true;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
29
40
  async loadSwaggerSpec() {
30
41
  try {
31
- console.log(`Loading Swagger spec from: ${this.baseUrl}`);
32
- const response = await axios_1.default.get(this.baseUrl, {
33
- headers: {
34
- Accept: "application/json",
35
- ...this.headers,
36
- },
37
- });
38
- this.swaggerSpec = response.data;
42
+ console.log(`Loading Swagger spec from: ${this.swaggerSource}`);
43
+ let specData;
44
+ if (this.isUrl(this.swaggerSource)) {
45
+ // Handle URL - use existing axios logic
46
+ const response = await axios_1.default.get(this.swaggerSource, {
47
+ headers: {
48
+ Accept: "application/json",
49
+ ...this.headers,
50
+ },
51
+ });
52
+ specData = response.data;
53
+ }
54
+ else {
55
+ // Handle filesystem path
56
+ const filePath = (0, path_1.isAbsolute)(this.swaggerSource)
57
+ ? this.swaggerSource
58
+ : (0, path_1.resolve)(process.cwd(), this.swaggerSource);
59
+ console.log(`Reading Swagger spec from file: ${filePath}`);
60
+ const fileContent = (0, fs_1.readFileSync)(filePath, "utf8");
61
+ specData = JSON.parse(fileContent);
62
+ }
63
+ this.swaggerSpec = specData;
39
64
  console.log(`Loaded Swagger spec: ${this.swaggerSpec.info.title} v${this.swaggerSpec.info.version}`);
40
65
  return this.swaggerSpec;
41
66
  }
@@ -44,9 +69,25 @@ class SwaggerMcpGenerator {
44
69
  throw error;
45
70
  }
46
71
  }
72
+ // Public getter methods for express template generator
73
+ getApiBaseUrlPublic() {
74
+ return this.getApiBaseUrl();
75
+ }
76
+ getSwaggerSpec() {
77
+ return this.swaggerSpec;
78
+ }
47
79
  getApiBaseUrl() {
48
- // Extract the base URL from the swagger URL (remove the swagger.json path)
49
- const swaggerUrl = new URL(this.baseUrl);
80
+ // If apiBaseUrl is a file path, we need to get the base URL from the OpenAPI spec
81
+ if (!this.isUrl(this.apiBaseUrl)) {
82
+ // Extract base URL from OpenAPI spec servers array as fallback
83
+ if (this.swaggerSpec.servers && this.swaggerSpec.servers.length > 0) {
84
+ const firstServer = this.swaggerSpec.servers[0];
85
+ return firstServer.url || 'http://localhost';
86
+ }
87
+ return 'http://localhost';
88
+ }
89
+ // Extract the base URL from the API base URL (remove any swagger.json path if present)
90
+ const swaggerUrl = new URL(this.apiBaseUrl);
50
91
  const baseUrl = `${swaggerUrl.protocol}//${swaggerUrl.host}`;
51
92
  // Get the server path from the OpenAPI spec
52
93
  let serverPath = "/";
@@ -113,13 +154,13 @@ class SwaggerMcpGenerator {
113
154
  return toolProp;
114
155
  }
115
156
  resolveSchemaRef(ref) {
116
- if (!ref.startsWith('#/')) {
157
+ if (!ref.startsWith("#/")) {
117
158
  return {}; // Only handle local refs for now
118
159
  }
119
- const path = ref.substring(2).split('/');
160
+ const path = ref.substring(2).split("/");
120
161
  let current = this.swaggerSpec;
121
162
  for (const segment of path) {
122
- if (!current || typeof current !== 'object') {
163
+ if (!current || typeof current !== "object") {
123
164
  return {};
124
165
  }
125
166
  current = current[segment];
@@ -130,9 +171,9 @@ class SwaggerMcpGenerator {
130
171
  // Handle allOf by merging all schemas
131
172
  if (current.allOf) {
132
173
  const merged = {
133
- type: 'object',
174
+ type: "object",
134
175
  properties: {},
135
- required: []
176
+ required: [],
136
177
  };
137
178
  for (const item of current.allOf) {
138
179
  let resolvedItem;
@@ -152,7 +193,7 @@ class SwaggerMcpGenerator {
152
193
  merged.required = [...merged.required, ...resolvedItem.required];
153
194
  }
154
195
  // Merge other properties (type, etc.)
155
- if (resolvedItem.type && resolvedItem.type !== 'object') {
196
+ if (resolvedItem.type && resolvedItem.type !== "object") {
156
197
  merged.type = resolvedItem.type;
157
198
  }
158
199
  }
@@ -263,7 +304,7 @@ class SwaggerMcpGenerator {
263
304
  inputSchema: {
264
305
  type: "object",
265
306
  properties,
266
- required,
307
+ required: Array.from(new Set(required)),
267
308
  },
268
309
  };
269
310
  tools.push(tool);
@@ -271,42 +312,72 @@ class SwaggerMcpGenerator {
271
312
  }
272
313
  return tools;
273
314
  }
315
+ generateMethodParameters(path, operation) {
316
+ const pathParams = [];
317
+ const queryParams = [];
318
+ let bodyParam = false;
319
+ const paramParts = [];
320
+ // Extract path parameters from the path itself
321
+ const pathParamMatches = path.match(/{([^}]+)}/g);
322
+ if (pathParamMatches) {
323
+ for (const match of pathParamMatches) {
324
+ const paramName = match.slice(1, -1); // Remove { and }
325
+ pathParams.push(paramName);
326
+ // For path parameters, we'll assume they're strings/numbers based on common patterns
327
+ const paramType = paramName.toLowerCase().includes("id")
328
+ ? "number"
329
+ : "string";
330
+ paramParts.push(`${paramName}: ${paramType}`);
331
+ }
332
+ }
333
+ // Add query parameters from operation parameters
334
+ if (operation.parameters) {
335
+ for (const param of operation.parameters) {
336
+ if (param.in === "query") {
337
+ queryParams.push(param.name);
338
+ let paramType = "string";
339
+ // Determine parameter type from schema
340
+ const schema = param.schema || param;
341
+ if (schema.type === "array") {
342
+ paramType = "string[]";
343
+ }
344
+ else if (schema.type === "integer" || schema.type === "number") {
345
+ paramType = "number";
346
+ }
347
+ else if (schema.type === "boolean") {
348
+ paramType = "boolean";
349
+ }
350
+ paramParts.push(`${param.name}: ${paramType}`);
351
+ }
352
+ }
353
+ }
354
+ // Add request body parameter
355
+ if (operation.requestBody) {
356
+ bodyParam = true;
357
+ paramParts.push("body: any");
358
+ }
359
+ // Add headers parameter
360
+ paramParts.push("headers?: Record<string, string>");
361
+ const signature = paramParts.join(", ");
362
+ return { signature, pathParams, queryParams, bodyParam };
363
+ }
274
364
  generateClientFunctions() {
275
- let clientCode = `
276
- import axios, { AxiosInstance } from 'axios';
365
+ let clientCode = `\
366
+ import axios, { AxiosInstance, AxiosResponse } from 'axios';
277
367
 
278
368
  export class SwaggerClient {
279
- private api: AxiosInstance;
369
+ private axiosInstance: AxiosInstance;
280
370
  private baseUrl: string;
371
+ private headers: Record<string, string>;
281
372
 
282
- constructor(baseUrl: string, headers: Record<string, string> = {}) {
373
+ constructor(baseUrl: string, headers?: Record<string, string>) {
283
374
  this.baseUrl = baseUrl;
284
- this.api = axios.create({
285
- baseURL: baseUrl,
286
- headers: {
287
- 'Content-Type': 'application/json',
288
- ...headers
289
- }
375
+ this.headers = headers || {};
376
+ this.axiosInstance = axios.create({
377
+ baseURL: this.baseUrl,
378
+ headers: this.headers
290
379
  });
291
380
  }
292
-
293
- private replacePathParams(path: string, params: Record<string, any>): string {
294
- let result = path;
295
- const pathParams = path.match(/{([^}]+)}/g);
296
-
297
- if (pathParams) {
298
- for (const param of pathParams) {
299
- const paramName = param.slice(1, -1);
300
- if (params[paramName] !== undefined) {
301
- result = result.replace(param, params[paramName]);
302
- delete params[paramName];
303
- }
304
- }
305
- }
306
-
307
- return result;
308
- }
309
-
310
381
  `;
311
382
  for (const [path, pathItem] of Object.entries(this.swaggerSpec.paths)) {
312
383
  for (const [method, operation] of Object.entries(pathItem)) {
@@ -314,29 +385,54 @@ export class SwaggerClient {
314
385
  continue;
315
386
  const operationId = operation.operationId ||
316
387
  `${method}_${path.replace(/[^a-zA-Z0-9]/g, "_")}`;
317
- const hasRequestBody = operation.requestBody !== undefined;
388
+ const { signature, pathParams, queryParams, bodyParam } = this.generateMethodParameters(path, operation);
389
+ // Create URL with template literals for path parameters
390
+ let urlTemplate = path;
391
+ for (const pathParam of pathParams) {
392
+ urlTemplate = urlTemplate.replace(`{${pathParam}}`, `\${${pathParam}}`);
393
+ }
394
+ clientCode += `
395
+ async ${operationId}(${signature}): Promise<AxiosResponse<any>> {
396
+ const url = \`${urlTemplate}\`;`;
397
+ // Build query parameters object
398
+ if (queryParams.length > 0) {
399
+ clientCode += `
400
+ const queryParams = { ${queryParams.join(", ")} };`;
401
+ }
402
+ // Handle different HTTP method cases
403
+ if (bodyParam) {
404
+ // Methods with request body (POST, PUT, PATCH)
405
+ if (queryParams.length > 0) {
406
+ clientCode += `
407
+ const response = await this.axiosInstance.${method}(url, body, {
408
+ params: queryParams,
409
+ headers: { ...this.headers, ...headers }
410
+ });`;
411
+ }
412
+ else {
413
+ clientCode += `
414
+ const response = await this.axiosInstance.${method}(url, body, {
415
+ headers: { ...this.headers, ...headers }
416
+ });`;
417
+ }
418
+ }
419
+ else {
420
+ // Methods without request body (GET, DELETE)
421
+ if (queryParams.length > 0) {
422
+ clientCode += `
423
+ const response = await this.axiosInstance.${method}(url, {
424
+ params: queryParams,
425
+ headers: { ...this.headers, ...headers }
426
+ });`;
427
+ }
428
+ else {
429
+ clientCode += `
430
+ const response = await this.axiosInstance.${method}(url, {
431
+ headers: { ...this.headers, ...headers }
432
+ });`;
433
+ }
434
+ }
318
435
  clientCode += `
319
- async ${operationId}(params: Record<string, any> = {}): Promise<any> {
320
- const path = this.replacePathParams('${path}', { ...params });
321
- const queryParams = { ...params };
322
-
323
- // Remove path parameters from query params
324
- const pathParamNames = '${path}'.match(/{([^}]+)}/g);
325
- if (pathParamNames) {
326
- for (const param of pathParamNames) {
327
- const paramName = param.slice(1, -1);
328
- delete queryParams[paramName];
329
- }
330
- }
331
-
332
- ${hasRequestBody
333
- ? `
334
- const requestBody = { ...queryParams };
335
- const response = await this.api.${method}(path, requestBody);
336
- `
337
- : `
338
- const response = await this.api.${method}(path, { params: queryParams });
339
- `}
340
436
 
341
437
  return response.data;
342
438
  }
@@ -348,123 +444,163 @@ export class SwaggerClient {
348
444
  `;
349
445
  return clientCode;
350
446
  }
351
- generateMcpServer() {
447
+ generateExpressComposition() {
448
+ // Import and use the Express composition template generator
449
+ const { generateExpressCompositionTemplate, } = require("./express-template-generator");
450
+ return generateExpressCompositionTemplate(this);
451
+ }
452
+ generateServerFactory() {
352
453
  const tools = this.generateTools();
353
- const swaggerUrl = this.baseUrl;
354
454
  const apiBaseUrl = this.getApiBaseUrl();
355
- return `#!/usr/bin/env node
356
-
357
- import { SwaggerClient } from './client';
358
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
359
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
360
- import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
361
-
362
- const server = new Server({
363
- name: '${this.swaggerSpec.info.title
455
+ const serverName = this.swaggerSpec.info.title
364
456
  .toLowerCase()
365
- .replace(/[^a-z0-9]/g, "-")}-mcp',
366
- version: '${this.swaggerSpec.info.version}'
367
- }, {
368
- capabilities: {
369
- tools: {}
370
- }
371
- });
457
+ .replace(/[^a-z0-9]/g, "-");
458
+ const serverVersion = this.swaggerSpec.info.version;
459
+ return `import { Server } from '@modelcontextprotocol/sdk/server/index.js';
460
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
461
+ import { SwaggerClient } from './client';
372
462
 
373
463
  // Setup headers from environment variables
374
- const headers: Record<string, string> = {};
375
- for (const [key, value] of Object.entries(process.env)) {
376
- if (key.startsWith('HEADER_') && value) {
377
- const headerName = key.substring(7);
378
- headers[headerName] = value;
379
- }
464
+ function getHeaders(): Record<string, string> {
465
+ return Object.keys(process.env).filter(key => key.startsWith('HEADER_')).reduce((headers, key) => {
466
+ const headerName = key.substring(7).replace(/_/g, '-');
467
+ headers[headerName] = process.env[key]!;
468
+ return headers;
469
+ }, {} as Record<string, string>);
380
470
  }
381
471
 
382
- const swaggerUrl = '${swaggerUrl}';
383
- const apiBaseUrl = '${apiBaseUrl}';
384
- const client = new SwaggerClient(apiBaseUrl, headers);
472
+ // Merge environment headers with request headers, giving priority to request headers
473
+ // Handles Authorization header and other custom headers from environment variables
474
+ function mergeHeaders(requestHeaders?: Record<string, string>): Record<string, string> {
475
+ const envHeaders = getHeaders();
476
+ return {
477
+ ...envHeaders,
478
+ ...(requestHeaders || {})
479
+ };
480
+ }
385
481
 
482
+ /**
483
+ * Creates and configures an MCP server with the specified headers (including Authorization)
484
+ * @param requestHeaders Optional headers to include in API requests
485
+ * @returns Configured MCP Server instance
486
+ */
487
+ export function createMcpServer(headers?: Record<string, string>): Server {
488
+ const server = new Server({
489
+ name: '${serverName}-mcp',
490
+ version: '${serverVersion}'
491
+ }, {
492
+ capabilities: {
493
+ tools: {}
494
+ }
495
+ });
386
496
 
497
+ const apiBaseUrl = '${apiBaseUrl}';
387
498
 
388
- // Helper function to format responses consistently
389
- const formatResponse = async (methodName: string, args: any) => {
390
- try {
391
- const result = await (client as any)[methodName](args || {});
392
- return {
393
- content: [{
394
- type: 'text',
395
- text: typeof result === 'string' ? result : JSON.stringify(result, null, 2)
396
- }]
397
- };
398
- } catch (error: any) {
399
- let errorMessage = \`Error calling \${methodName}: \${error.message}\`;
400
-
401
- // If it's an axios error, provide more detailed information
402
- if (error.response) {
403
- // The request was made and the server responded with a status code
404
- // that falls out of the range of 2xx
405
- errorMessage += \`\\n\\nHTTP Status: \${error.response.status} \${error.response.statusText || ''}\`;
406
-
407
- if (error.response.headers) {
408
- errorMessage += \`\\nResponse Headers: \${JSON.stringify(error.response.headers, null, 2)}\`;
409
- }
410
-
411
- if (error.response.data) {
412
- errorMessage += \`\\nResponse Body: \${typeof error.response.data === 'string' ? error.response.data : JSON.stringify(error.response.data, null, 2)}\`;
499
+ // Helper function to format responses consistently
500
+ const formatResponse = async (methodName: string, args: any) => {
501
+ // Handle Authorization header and merge with environment headers
502
+ const envHeaders = getHeaders();
503
+ const mergedHeaders = { ...envHeaders, ...headers };
504
+ const client = new SwaggerClient(apiBaseUrl, mergedHeaders);
505
+
506
+ try {
507
+ const result = await (client as any)[methodName](args || {});
508
+ return {
509
+ content: [{
510
+ type: 'text',
511
+ text: typeof result === 'string' ? result : JSON.stringify(result, null, 2)
512
+ }]
513
+ };
514
+ } catch (error: any) {
515
+ let errorMessage = \`Error calling \${methodName}: \${error.message}\`;
516
+
517
+ // If it's an axios error, provide more detailed information
518
+ if (error.response) {
519
+ // The request was made and the server responded with a status code
520
+ // that falls out of the range of 2xx
521
+ errorMessage += \`\\n\\nHTTP Status: \${error.response.status} \${error.response.statusText || ''}\`;
522
+
523
+ if (error.response.data) {
524
+ errorMessage += \`\\nResponse Body: \${typeof error.response.data === 'string' ? error.response.data : JSON.stringify(error.response.data, null, 2)}\`;
525
+ }
526
+ } else if (error.request) {
527
+ // The request was made but no response was received
528
+ errorMessage += \`\\n\\nNo response received from server\`;
529
+ // Extract safe request details to avoid circular reference issues
530
+ const requestDetails = {
531
+ method: error.request.method,
532
+ path: error.request.path,
533
+ timeout: error.request.timeout
534
+ };
535
+ errorMessage += \`\\nRequest details: \${JSON.stringify(requestDetails, null, 2)}\`;
536
+ } else {
537
+ // Something happened in setting up the request that triggered an Error
538
+ errorMessage += \`\\nRequest setup error: \${error.message}\`;
413
539
  }
414
- } else if (error.request) {
415
- // The request was made but no response was received
416
- errorMessage += \`\\n\\nNo response received from server\`;
417
- errorMessage += \`\\nRequest details: \${JSON.stringify(error.request, null, 2)}\`;
418
- } else {
419
- // Something happened in setting up the request that triggered an Error
420
- errorMessage += \`\\n\\nRequest setup error: \${error.message}\`;
540
+
541
+ return {
542
+ content: [{
543
+ type: 'text',
544
+ text: errorMessage
545
+ }]
546
+ };
421
547
  }
422
-
423
- if (error.config) {
424
- errorMessage += \`\\n\\nRequest config: \${JSON.stringify({
425
- method: error.config.method,
426
- url: error.config.url,
427
- headers: error.config.headers,
428
- timeout: error.config.timeout
429
- }, null, 2)}\`;
548
+ };
549
+
550
+ // Handle tool calls
551
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
552
+ const { name, arguments: args } = request.params as any;
553
+
554
+ switch (name) {
555
+ ${tools
556
+ .map((tool) => ` case '${tool.name}':
557
+ return formatResponse('${tool.name}', args);`)
558
+ .join("\n")}
559
+ default:
560
+ throw new Error(\`Unknown tool: \${name}\`);
430
561
  }
562
+ });
431
563
 
564
+ server.setRequestHandler(ListToolsRequestSchema, async (request) => {
432
565
  return {
433
- content: [{
434
- type: 'text',
435
- text: errorMessage
436
- }]
566
+ tools: [
567
+ ${tools
568
+ .map((tool) => ` {
569
+ name: '${tool.name}',
570
+ description: '${tool.description}',
571
+ inputSchema: ${JSON.stringify(tool.inputSchema, null, 10)}
572
+ }`)
573
+ .join(",\n")}
574
+ ]
437
575
  };
438
- }
439
- };
576
+ });
577
+
578
+ return server;
579
+ }
580
+ `;
581
+ }
582
+ generateMcpServer() {
583
+ const serverFactory = this.generateServerFactory();
584
+ const swaggerUrl = this.swaggerSource;
585
+ const apiBaseUrl = this.getApiBaseUrl();
586
+ return `#!/usr/bin/env node
440
587
 
441
- // Handle tool calls
442
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
443
- const { name, arguments: args } = request.params as any;
588
+ import { SwaggerClient } from './client';
589
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
590
+ import { createMcpServer } from './server-factory';
444
591
 
445
- switch (name) {
446
- ${tools
447
- .map((tool) => ` case '${tool.name}':
448
- return formatResponse('${tool.name}', args);`)
449
- .join("\n")}
450
- default:
451
- throw new Error(\`Unknown tool: \${name}\`);
592
+ // Setup headers from environment variables
593
+ const headers: Record<string, string> = {};
594
+ for (const [key, value] of Object.entries(process.env)) {
595
+ if (key.startsWith('HEADER_') && value) {
596
+ const headerName = key.substring(7);
597
+ headers[headerName] = value;
452
598
  }
453
- });
599
+ }
454
600
 
455
- server.setRequestHandler(ListToolsRequestSchema, async (request) => {
456
- return {
457
- tools: [
458
- ${tools
459
- .map((tool) => ` {
460
- name: '${tool.name}',
461
- description: '${tool.description}',
462
- inputSchema: ${JSON.stringify(tool.inputSchema, null, 8)}
463
- }`)
464
- .join(",\n")}
465
- ]
466
- };
467
- });
601
+ const swaggerUrl = '${swaggerUrl}';
602
+ const apiBaseUrl = '${apiBaseUrl}';
603
+ const server = createMcpServer(headers);
468
604
 
469
605
  async function main() {
470
606
  const transport = new StdioServerTransport();
@@ -472,7 +608,10 @@ async function main() {
472
608
  console.error('${this.swaggerSpec.info.title.replace(/'/g, "\\'")} MCP Server running on stdio');
473
609
  }
474
610
 
475
- main().catch(console.error);
611
+ // Only run main() if this file is being executed directly (not imported)
612
+ if (require.main === module) {
613
+ main().catch(console.error);
614
+ }
476
615
  `;
477
616
  }
478
617
  async saveGeneratedFiles(outputDir = "./generated") {
@@ -488,6 +627,8 @@ main().catch(console.error);
488
627
  const tools = this.generateTools();
489
628
  const clientCode = this.generateClientFunctions();
490
629
  const mcpServer = this.generateMcpServer();
630
+ const serverFactory = this.generateServerFactory();
631
+ const expressComposition = this.generateExpressComposition();
491
632
  // Generate package.json for the output
492
633
  const packageJson = {
493
634
  name: `${this.swaggerSpec.info.title
@@ -501,6 +642,8 @@ main().catch(console.error);
501
642
  },
502
643
  dependencies: {
503
644
  "@modelcontextprotocol/sdk": "^1.13.3",
645
+ express: "^4.18.0",
646
+ "@types/express": "^4.17.0",
504
647
  axios: "^1.5.0",
505
648
  },
506
649
  devDependencies: {
@@ -529,13 +672,15 @@ main().catch(console.error);
529
672
  (0, fs_1.writeFileSync)((0, path_1.join)(outputDir, "tsconfig.json"), JSON.stringify(tsConfig, null, 2));
530
673
  (0, fs_1.writeFileSync)((0, path_1.join)(srcDir, "client.ts"), clientCode);
531
674
  (0, fs_1.writeFileSync)((0, path_1.join)(srcDir, "mcp-server.ts"), mcpServer);
532
- // Also write the root-level mcp-server.ts for convenience
533
- (0, fs_1.writeFileSync)((0, path_1.join)(outputDir, "mcp-server.ts"), mcpServer);
675
+ (0, fs_1.writeFileSync)((0, path_1.join)(srcDir, "server-factory.ts"), serverFactory);
676
+ (0, fs_1.writeFileSync)((0, path_1.join)(srcDir, "express-app.ts"), expressComposition);
534
677
  console.log(`Generated files saved to ${outputDir}/`);
535
678
  console.log(`- package.json: Project configuration`);
536
679
  console.log(`- tsconfig.json: TypeScript configuration`);
537
680
  console.log(`- src/client.ts: HTTP client functions`);
681
+ console.log(`- src/server-factory.ts: Reusable MCP server factory`);
538
682
  console.log(`- src/mcp-server.ts: Complete MCP server implementation`);
683
+ console.log(`- src/express-app.ts: Express app composition functions`);
539
684
  console.log(`- mcp-server.ts: Complete MCP server implementation`);
540
685
  }
541
686
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,59 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
4
5
  const child_process_1 = require("child_process");
5
6
  const path_1 = require("path");
6
7
  const fs_1 = require("fs");
7
8
  const generator_1 = require("./generator");
8
- function generateDomainBasedDir(swaggerUrl, packageDir) {
9
+ function generateDomainBasedDir(swaggerSource, packageDir) {
9
10
  try {
10
- const url = new URL(swaggerUrl);
11
- // Extract hostname and convert to valid directory name
12
- const hostname = url.hostname;
13
- // Replace dots and other special characters with underscores
14
- const sanitizedDomain = hostname.replace(/[^a-zA-Z0-9]/g, '_');
11
+ // Try to parse as URL first
12
+ const url = new URL(swaggerSource);
13
+ const sanitizedDomain = url.hostname.replace(/[^a-zA-Z0-9]/g, '_');
15
14
  return (0, path_1.join)(packageDir, 'generated', sanitizedDomain);
16
15
  }
17
16
  catch (error) {
18
- // If URL parsing fails, fall back to generic generated directory
19
- console.warn('Failed to parse URL for domain-based directory, using generic "generated" directory');
17
+ // If URL parsing fails, it's likely a file path - use generic directory
18
+ console.warn('Using generic "generated" directory for file-based swagger source');
20
19
  return (0, path_1.join)(packageDir, 'generated');
21
20
  }
22
21
  }
23
- function parseArgs(args) {
24
- // Get the directory where this package is installed
25
- const packageDir = (0, path_1.dirname)((0, path_1.dirname)(__filename));
26
- const parsed = {
27
- swaggerUrl: '',
28
- outputDir: '',
29
- startStdio: false
30
- };
31
- // Filter out the --start-stdio flag first
32
- const filteredArgs = args.filter(arg => {
33
- if (arg === '--start-stdio') {
34
- parsed.startStdio = true;
35
- return false;
36
- }
37
- return true;
38
- });
39
- // Now parse the remaining arguments in order
40
- for (let i = 0; i < filteredArgs.length; i++) {
41
- if (!parsed.swaggerUrl) {
42
- parsed.swaggerUrl = filteredArgs[i];
43
- // Set default output directory based on the swagger URL
44
- if (!parsed.outputDir) {
45
- parsed.outputDir = generateDomainBasedDir(parsed.swaggerUrl, packageDir);
46
- }
47
- }
48
- else {
49
- // Second non-flag argument is the output directory
50
- parsed.outputDir = filteredArgs[i];
51
- break; // Only take the first two non-flag arguments
52
- }
53
- }
54
- console.log(`Default output directory: ${parsed.outputDir}`);
55
- return parsed;
56
- }
57
22
  async function buildAndRunServer(outputDir) {
58
23
  console.log('\nšŸ—ļø Building generated server...');
59
24
  // Resolve the output directory to an absolute path to avoid duplication
@@ -134,30 +99,53 @@ async function buildAndRunServer(outputDir) {
134
99
  return new Promise(() => { });
135
100
  }
136
101
  async function main() {
137
- const args = process.argv.slice(2);
138
- if (args.length === 0) {
139
- console.error('Usage: npx @tyvm/swagger-mcp <swagger-url> [output-dir] [--start-stdio]');
140
- console.error('');
141
- console.error('Environment variables:');
142
- console.error(' HEADER_AUTHORIZATION=Bearer <token> - Set Authorization header');
143
- console.error(' HEADER_<NAME>=<value> - Set custom header');
144
- console.error('');
145
- console.error('Examples:');
146
- console.error(' npx @tyvm/swagger-mcp https://api.example.com/swagger.json');
147
- console.error(' npx @tyvm/swagger-mcp https://api.example.com/swagger.json --start-stdio');
148
- console.error(' npx @tyvm/swagger-mcp https://api.example.com/swagger.json ./my-output --start-stdio');
149
- console.error(' HEADER_AUTHORIZATION="Bearer abc123" npx @tyvm/swagger-mcp https://api.example.com/swagger.json');
102
+ const program = new commander_1.Command();
103
+ // Get the directory where this package is installed
104
+ const packageDir = (0, path_1.dirname)((0, path_1.dirname)(__filename));
105
+ program
106
+ .name('@tyvm/swagger-mcp')
107
+ .description('Generate MCP servers from Swagger/OpenAPI specifications')
108
+ .version('0.0.8')
109
+ .option('-u, --url <url>', 'Swagger/OpenAPI specification URL (required - used for API client configuration)')
110
+ .option('-f, --file <path>', 'Swagger/OpenAPI specification file path')
111
+ .option('-o, --output <dir>', 'Output directory for generated MCP server')
112
+ .option('--start-stdio', 'Build and start the server after generation')
113
+ .addHelpText('after', `
114
+ Environment variables:
115
+ HEADER_AUTHORIZATION=Bearer <token> - Set Authorization header
116
+ HEADER_<NAME>=<value> - Set custom header
117
+
118
+ Examples:
119
+ $ @tyvm/swagger-mcp --url https://api.example.com/swagger.json
120
+ $ @tyvm/swagger-mcp --url https://api.example.com --file ./swagger.json --output ./my-server
121
+ $ @tyvm/swagger-mcp --url https://api.example.com/swagger.json --start-stdio
122
+ $ @tyvm/swagger-mcp --url https://api.example.com --file ./local-swagger.json
123
+ $ HEADER_AUTHORIZATION="Bearer abc123" @tyvm/swagger-mcp --url https://api.example.com/swagger.json`);
124
+ program.parse();
125
+ const options = program.opts();
126
+ // Validate that --url is always required
127
+ if (!options.url) {
128
+ console.error('Error: --url is required (used for API client configuration)');
129
+ program.outputHelp();
150
130
  process.exit(1);
151
131
  }
152
- const { swaggerUrl, outputDir, startStdio } = parseArgs(args);
132
+ // Determine the swagger source
133
+ const swaggerSource = options.file || options.url;
134
+ // Determine output directory
135
+ let outputDir = options.output;
136
+ if (!outputDir) {
137
+ outputDir = generateDomainBasedDir(swaggerSource, packageDir);
138
+ console.log(`Using default output directory: ${outputDir}`);
139
+ }
153
140
  try {
154
- const generator = new generator_1.SwaggerMcpGenerator(swaggerUrl);
141
+ // Pass both the swagger source and the API base URL
142
+ const generator = new generator_1.SwaggerMcpGenerator(swaggerSource, options.url);
155
143
  await generator.loadSwaggerSpec();
156
144
  const tools = generator.generateTools();
157
145
  console.log(`Generated ${tools.length} tools from Swagger spec`);
158
146
  await generator.saveGeneratedFiles(outputDir);
159
147
  console.log('');
160
- if (startStdio) {
148
+ if (options.startStdio) {
161
149
  console.log('Generation complete! Starting server...');
162
150
  // Build and run the server
163
151
  await buildAndRunServer(outputDir);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tyvm/swagger-mcp",
3
- "version": "0.0.6",
3
+ "version": "0.0.9",
4
4
  "description": "Generate MCP servers from Swagger/OpenAPI specifications",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -25,6 +25,7 @@
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "axios": "^1.5.0",
28
+ "commander": "^11.0.0",
28
29
  "@modelcontextprotocol/sdk": "^1.13.3",
29
30
  "zod": "^3.24.2"
30
31
  },
@@ -32,8 +33,16 @@
32
33
  "@types/node": "^20.6.3",
33
34
  "typescript": "^4.6.3",
34
35
  "ts-node": "^10.7.0",
35
- "jest": "^29.1.1",
36
- "@types/jest": "^29.5.13"
36
+ "jest": "^29.7.0",
37
+ "@types/jest": "^29.5.13",
38
+ "ts-jest": "^29.1.1",
39
+ "nock": "^13.3.8",
40
+ "express": "^4.18.0",
41
+ "@types/express": "^4.17.0",
42
+ "supertest": "^6.3.3",
43
+ "@types/supertest": "^6.0.2",
44
+ "express-session": "^1.17.3",
45
+ "@types/express-session": "^1.17.7"
37
46
  },
38
47
  "files": [
39
48
  "dist/**/*",