vite-plugin-swagger-mcp 0.0.7 → 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/dist/cjs/index.js +26 -7
- package/dist/esm/index.js +50 -19
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -24,9 +24,9 @@ __export(src_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(src_exports);
|
|
26
26
|
var import_mcp = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
27
|
-
var import_zod = require("zod");
|
|
28
27
|
var import_streamableHttp = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
29
28
|
var import_node_crypto = require("node:crypto");
|
|
29
|
+
var import_zod = require("zod");
|
|
30
30
|
var SwaggerMcpServer = class {
|
|
31
31
|
constructor(swaggerUrl, token) {
|
|
32
32
|
this.swaggerUrl = swaggerUrl;
|
|
@@ -215,17 +215,36 @@ function vitePluginSwaggerMcp({
|
|
|
215
215
|
"MCP server connected:",
|
|
216
216
|
`http://localhost:${(_b = (_a = server.config) == null ? void 0 : _a.server) == null ? void 0 : _b.port}/_mcp/sse/swagger`
|
|
217
217
|
);
|
|
218
|
+
const SSE_PATH = "/_mcp/sse/swagger";
|
|
219
|
+
const MESSAGES_PATH = "/_mcp/sse/swagger/messages";
|
|
218
220
|
server.middlewares.use(
|
|
219
221
|
async (req, res, next) => {
|
|
220
222
|
var _a2;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
223
|
+
const url = (_a2 = req.url) == null ? void 0 : _a2.split("?")[0];
|
|
224
|
+
if (url === SSE_PATH || url === MESSAGES_PATH) {
|
|
225
|
+
if (req.method === "GET") {
|
|
226
|
+
if (req.headers["accept"] !== "text/event-stream") {
|
|
227
|
+
res.statusCode = 405;
|
|
228
|
+
res.end("Method Not Allowed - Expected Accept: text/event-stream");
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
res.setHeader("Content-Type", "text/event-stream");
|
|
232
|
+
res.setHeader("Cache-Control", "no-cache");
|
|
233
|
+
res.setHeader("Connection", "keep-alive");
|
|
234
|
+
res.setHeader("X-Accel-Buffering", "no");
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
await transport.handleRequest(req, res);
|
|
238
|
+
} catch (err) {
|
|
239
|
+
console.error("MCP Transport Error:", err);
|
|
240
|
+
if (!res.headersSent) {
|
|
241
|
+
res.statusCode = 500;
|
|
242
|
+
res.end("Internal MCP Error");
|
|
243
|
+
}
|
|
224
244
|
}
|
|
225
|
-
|
|
226
|
-
} else {
|
|
227
|
-
next();
|
|
245
|
+
return;
|
|
228
246
|
}
|
|
247
|
+
next();
|
|
229
248
|
}
|
|
230
249
|
);
|
|
231
250
|
} catch (error) {
|
package/dist/esm/index.js
CHANGED
|
@@ -11,9 +11,9 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
11
11
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
12
12
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
13
13
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
|
-
import { z } from "zod";
|
|
15
14
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
16
15
|
import { randomUUID } from "node:crypto";
|
|
16
|
+
import { z } from "zod";
|
|
17
17
|
export var SwaggerMcpServer = /*#__PURE__*/function () {
|
|
18
18
|
function SwaggerMcpServer(swaggerUrl, token) {
|
|
19
19
|
_classCallCheck(this, SwaggerMcpServer);
|
|
@@ -236,7 +236,7 @@ export default function vitePluginSwaggerMcp(_ref) {
|
|
|
236
236
|
enforce: "pre",
|
|
237
237
|
configureServer: function configureServer(server) {
|
|
238
238
|
return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
|
|
239
|
-
var _server$config, transport, swaggerServer, mcpServer;
|
|
239
|
+
var _server$config, transport, swaggerServer, mcpServer, SSE_PATH, MESSAGES_PATH;
|
|
240
240
|
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
241
241
|
while (1) switch (_context9.prev = _context9.next) {
|
|
242
242
|
case 0:
|
|
@@ -372,49 +372,80 @@ export default function vitePluginSwaggerMcp(_ref) {
|
|
|
372
372
|
return mcpServer.connect(transport);
|
|
373
373
|
case 10:
|
|
374
374
|
console.log("MCP server connected:", "http://localhost:".concat((_server$config = server.config) === null || _server$config === void 0 || (_server$config = _server$config.server) === null || _server$config === void 0 ? void 0 : _server$config.port, "/_mcp/sse/swagger"));
|
|
375
|
+
|
|
376
|
+
// 2. 定义 SSE 和消息路径
|
|
377
|
+
SSE_PATH = "/_mcp/sse/swagger";
|
|
378
|
+
MESSAGES_PATH = "/_mcp/sse/swagger/messages"; // 规范建议分开或明确指定
|
|
375
379
|
server.middlewares.use( /*#__PURE__*/function () {
|
|
376
380
|
var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(req, res, next) {
|
|
377
381
|
var _req$url;
|
|
382
|
+
var url;
|
|
378
383
|
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
379
384
|
while (1) switch (_context8.prev = _context8.next) {
|
|
380
385
|
case 0:
|
|
381
|
-
|
|
382
|
-
|
|
386
|
+
url = (_req$url = req.url) === null || _req$url === void 0 ? void 0 : _req$url.split("?")[0]; // 处理 SSE 建立连接 (GET) 和 消息接收 (POST)
|
|
387
|
+
if (!(url === SSE_PATH || url === MESSAGES_PATH)) {
|
|
388
|
+
_context8.next = 21;
|
|
383
389
|
break;
|
|
384
390
|
}
|
|
385
|
-
if (!req.
|
|
386
|
-
|
|
387
|
-
|
|
391
|
+
if (!(req.method === "GET")) {
|
|
392
|
+
_context8.next = 11;
|
|
393
|
+
break;
|
|
388
394
|
}
|
|
389
|
-
|
|
390
|
-
|
|
395
|
+
if (!(req.headers["accept"] !== "text/event-stream")) {
|
|
396
|
+
_context8.next = 7;
|
|
397
|
+
break;
|
|
398
|
+
}
|
|
399
|
+
res.statusCode = 405;
|
|
400
|
+
res.end("Method Not Allowed - Expected Accept: text/event-stream");
|
|
401
|
+
return _context8.abrupt("return");
|
|
402
|
+
case 7:
|
|
403
|
+
// 对应文档 2.2.3: 设置正确的 Content-Type
|
|
404
|
+
res.setHeader("Content-Type", "text/event-stream");
|
|
405
|
+
res.setHeader("Cache-Control", "no-cache");
|
|
406
|
+
res.setHeader("Connection", "keep-alive");
|
|
407
|
+
// 禁用某些代理的缓冲
|
|
408
|
+
res.setHeader("X-Accel-Buffering", "no");
|
|
409
|
+
case 11:
|
|
410
|
+
_context8.prev = 11;
|
|
411
|
+
_context8.next = 14;
|
|
391
412
|
return transport.handleRequest(req, res);
|
|
392
|
-
case
|
|
393
|
-
_context8.next =
|
|
413
|
+
case 14:
|
|
414
|
+
_context8.next = 20;
|
|
394
415
|
break;
|
|
395
|
-
case
|
|
416
|
+
case 16:
|
|
417
|
+
_context8.prev = 16;
|
|
418
|
+
_context8.t0 = _context8["catch"](11);
|
|
419
|
+
console.error("MCP Transport Error:", _context8.t0);
|
|
420
|
+
if (!res.headersSent) {
|
|
421
|
+
res.statusCode = 500;
|
|
422
|
+
res.end("Internal MCP Error");
|
|
423
|
+
}
|
|
424
|
+
case 20:
|
|
425
|
+
return _context8.abrupt("return");
|
|
426
|
+
case 21:
|
|
396
427
|
next();
|
|
397
|
-
case
|
|
428
|
+
case 22:
|
|
398
429
|
case "end":
|
|
399
430
|
return _context8.stop();
|
|
400
431
|
}
|
|
401
|
-
}, _callee8);
|
|
432
|
+
}, _callee8, null, [[11, 16]]);
|
|
402
433
|
}));
|
|
403
434
|
return function (_x6, _x7, _x8) {
|
|
404
435
|
return _ref6.apply(this, arguments);
|
|
405
436
|
};
|
|
406
437
|
}());
|
|
407
|
-
_context9.next =
|
|
438
|
+
_context9.next = 19;
|
|
408
439
|
break;
|
|
409
|
-
case
|
|
410
|
-
_context9.prev =
|
|
440
|
+
case 16:
|
|
441
|
+
_context9.prev = 16;
|
|
411
442
|
_context9.t0 = _context9["catch"](0);
|
|
412
443
|
console.log("MCP server error", _context9.t0);
|
|
413
|
-
case
|
|
444
|
+
case 19:
|
|
414
445
|
case "end":
|
|
415
446
|
return _context9.stop();
|
|
416
447
|
}
|
|
417
|
-
}, _callee9, null, [[0,
|
|
448
|
+
}, _callee9, null, [[0, 16]]);
|
|
418
449
|
}))();
|
|
419
450
|
}
|
|
420
451
|
};
|