vite-plugin-swagger-mcp 0.0.10 → 0.0.12

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 CHANGED
@@ -215,38 +215,49 @@ 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";
220
- server.middlewares.use(
221
- async (req, res, next) => {
222
- var _a2;
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
- }
244
- }
218
+ server.middlewares.use("/_mcp/sse/swagger", async (req, res) => {
219
+ var _a2;
220
+ if (req.method === "POST") {
221
+ let body = "";
222
+ for await (const chunk of req)
223
+ body += chunk;
224
+ const json = JSON.parse(body);
225
+ try {
226
+ const result = await transport.handleRequest(req, res, json);
227
+ res.writeHead(200, {
228
+ "Content-Type": "application/json"
229
+ });
230
+ res.end(JSON.stringify(result));
245
231
  return;
232
+ } catch (err) {
233
+ res.writeHead(500);
234
+ res.end(
235
+ JSON.stringify({
236
+ jsonrpc: "2.0",
237
+ id: (json == null ? void 0 : json.id) ?? null,
238
+ error: { message: err == null ? void 0 : err.message }
239
+ })
240
+ );
246
241
  }
247
- next();
248
242
  }
249
- );
243
+ if (req.method === "GET") {
244
+ if (!((_a2 = req.headers.accept) == null ? void 0 : _a2.includes("text/event-stream"))) {
245
+ res.writeHead(405);
246
+ return res.end();
247
+ }
248
+ res.writeHead(200, {
249
+ "Content-Type": "text/event-stream",
250
+ "Cache-Control": "no-cache",
251
+ Connection: "keep-alive"
252
+ });
253
+ transport.onmessage = (message) => {
254
+ res.write(message);
255
+ };
256
+ return;
257
+ }
258
+ res.statusCode = 405;
259
+ res.end();
260
+ });
250
261
  } catch (error) {
251
262
  console.log("MCP server error", error);
252
263
  }
package/dist/esm/index.js CHANGED
@@ -10,6 +10,8 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
10
10
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
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
+ function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
14
+ function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function _return(r) { var n = this.s.return; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, throw: function _throw(r) { var n = this.s.return; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }
13
15
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
16
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
15
17
  import { randomUUID } from "node:crypto";
@@ -236,7 +238,7 @@ export default function vitePluginSwaggerMcp(_ref) {
236
238
  enforce: "pre",
237
239
  configureServer: function configureServer(server) {
238
240
  return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
239
- var _server$config, transport, swaggerServer, mcpServer, SSE_PATH, MESSAGES_PATH;
241
+ var _server$config, transport, swaggerServer, mcpServer;
240
242
  return _regeneratorRuntime().wrap(function _callee9$(_context9) {
241
243
  while (1) switch (_context9.prev = _context9.next) {
242
244
  case 0:
@@ -372,80 +374,132 @@ export default function vitePluginSwaggerMcp(_ref) {
372
374
  return mcpServer.connect(transport);
373
375
  case 10:
374
376
  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"; // 规范建议分开或明确指定
379
- server.middlewares.use( /*#__PURE__*/function () {
380
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(req, res, next) {
381
- var _req$url;
382
- var url;
377
+ server.middlewares.use('/_mcp/sse/swagger', /*#__PURE__*/function () {
378
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(req, res) {
379
+ var body, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, chunk, json, result, _json$id, _req$headers$accept;
383
380
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
384
381
  while (1) switch (_context8.prev = _context8.next) {
385
382
  case 0:
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;
389
- break;
390
- }
391
- if (!(req.method === "GET")) {
392
- _context8.next = 11;
383
+ if (!(req.method === 'POST')) {
384
+ _context8.next = 44;
393
385
  break;
394
386
  }
395
- if (!(req.headers["accept"] !== "text/event-stream")) {
396
- _context8.next = 7;
387
+ body = '';
388
+ _iteratorAbruptCompletion = false;
389
+ _didIteratorError = false;
390
+ _context8.prev = 4;
391
+ _iterator = _asyncIterator(req);
392
+ case 6:
393
+ _context8.next = 8;
394
+ return _iterator.next();
395
+ case 8:
396
+ if (!(_iteratorAbruptCompletion = !(_step = _context8.sent).done)) {
397
+ _context8.next = 14;
397
398
  break;
398
399
  }
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");
400
+ chunk = _step.value;
401
+ body += chunk;
409
402
  case 11:
410
- _context8.prev = 11;
411
- _context8.next = 14;
412
- return transport.handleRequest(req, res);
403
+ _iteratorAbruptCompletion = false;
404
+ _context8.next = 6;
405
+ break;
413
406
  case 14:
414
407
  _context8.next = 20;
415
408
  break;
416
409
  case 16:
417
410
  _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
- }
411
+ _context8.t0 = _context8["catch"](4);
412
+ _didIteratorError = true;
413
+ _iteratorError = _context8.t0;
424
414
  case 20:
415
+ _context8.prev = 20;
416
+ _context8.prev = 21;
417
+ if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
418
+ _context8.next = 25;
419
+ break;
420
+ }
421
+ _context8.next = 25;
422
+ return _iterator.return();
423
+ case 25:
424
+ _context8.prev = 25;
425
+ if (!_didIteratorError) {
426
+ _context8.next = 28;
427
+ break;
428
+ }
429
+ throw _iteratorError;
430
+ case 28:
431
+ return _context8.finish(25);
432
+ case 29:
433
+ return _context8.finish(20);
434
+ case 30:
435
+ json = JSON.parse(body);
436
+ _context8.prev = 31;
437
+ _context8.next = 34;
438
+ return transport.handleRequest(req, res, json);
439
+ case 34:
440
+ result = _context8.sent;
441
+ // 规范:POST 一定返回 response
442
+ res.writeHead(200, {
443
+ 'Content-Type': 'application/json'
444
+ });
445
+ res.end(JSON.stringify(result));
425
446
  return _context8.abrupt("return");
426
- case 21:
427
- next();
428
- case 22:
447
+ case 40:
448
+ _context8.prev = 40;
449
+ _context8.t1 = _context8["catch"](31);
450
+ res.writeHead(500);
451
+ res.end(JSON.stringify({
452
+ jsonrpc: '2.0',
453
+ id: (_json$id = json === null || json === void 0 ? void 0 : json.id) !== null && _json$id !== void 0 ? _json$id : null,
454
+ error: {
455
+ message: _context8.t1 === null || _context8.t1 === void 0 ? void 0 : _context8.t1.message
456
+ }
457
+ }));
458
+ case 44:
459
+ if (!(req.method === 'GET')) {
460
+ _context8.next = 51;
461
+ break;
462
+ }
463
+ if ((_req$headers$accept = req.headers.accept) !== null && _req$headers$accept !== void 0 && _req$headers$accept.includes('text/event-stream')) {
464
+ _context8.next = 48;
465
+ break;
466
+ }
467
+ res.writeHead(405);
468
+ return _context8.abrupt("return", res.end());
469
+ case 48:
470
+ res.writeHead(200, {
471
+ 'Content-Type': 'text/event-stream',
472
+ 'Cache-Control': 'no-cache',
473
+ Connection: 'keep-alive'
474
+ });
475
+ transport.onmessage = function (message) {
476
+ res.write(message);
477
+ };
478
+ return _context8.abrupt("return");
479
+ case 51:
480
+ res.statusCode = 405;
481
+ res.end();
482
+ case 53:
429
483
  case "end":
430
484
  return _context8.stop();
431
485
  }
432
- }, _callee8, null, [[11, 16]]);
486
+ }, _callee8, null, [[4, 16, 20, 30], [21,, 25, 29], [31, 40]]);
433
487
  }));
434
- return function (_x6, _x7, _x8) {
488
+ return function (_x6, _x7) {
435
489
  return _ref6.apply(this, arguments);
436
490
  };
437
491
  }());
438
- _context9.next = 19;
492
+ _context9.next = 17;
439
493
  break;
440
- case 16:
441
- _context9.prev = 16;
494
+ case 14:
495
+ _context9.prev = 14;
442
496
  _context9.t0 = _context9["catch"](0);
443
497
  console.log("MCP server error", _context9.t0);
444
- case 19:
498
+ case 17:
445
499
  case "end":
446
500
  return _context9.stop();
447
501
  }
448
- }, _callee9, null, [[0, 16]]);
502
+ }, _callee9, null, [[0, 14]]);
449
503
  }))();
450
504
  }
451
505
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vite-plugin-swagger-mcp",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "description": "vite plugin for swagger mcp",
5
5
  "homepage": "https://github.com/mmdctjj/vite-plugin-swagger-mcp",
6
6
  "repository": {