@eggjs/tegg-controller-plugin 3.62.0 → 4.0.0-beta.10

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.
Files changed (72) hide show
  1. package/README.md +15 -126
  2. package/dist/app/middleware/tegg_root_proto.d.ts +3 -0
  3. package/dist/app/middleware/tegg_root_proto.js +8 -0
  4. package/dist/app.d.ts +23 -0
  5. package/dist/app.js +76 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +2 -0
  8. package/{lib → dist/lib}/AppLoadUnitControllerHook.d.ts +4 -4
  9. package/dist/lib/AppLoadUnitControllerHook.js +29 -0
  10. package/{lib → dist/lib}/ControllerLoadUnit.d.ts +2 -2
  11. package/dist/lib/ControllerLoadUnit.js +72 -0
  12. package/{lib → dist/lib}/ControllerLoadUnitHandler.d.ts +4 -4
  13. package/dist/lib/ControllerLoadUnitHandler.js +29 -0
  14. package/{lib → dist/lib}/ControllerLoadUnitInstance.d.ts +3 -3
  15. package/dist/lib/ControllerLoadUnitInstance.js +36 -0
  16. package/{lib → dist/lib}/ControllerMetadataManager.d.ts +1 -1
  17. package/dist/lib/ControllerMetadataManager.js +27 -0
  18. package/{lib → dist/lib}/ControllerRegister.d.ts +2 -2
  19. package/dist/lib/ControllerRegister.js +3 -0
  20. package/{lib → dist/lib}/ControllerRegisterFactory.d.ts +4 -4
  21. package/dist/lib/ControllerRegisterFactory.js +22 -0
  22. package/dist/lib/EggControllerLoader.d.ts +7 -0
  23. package/dist/lib/EggControllerLoader.js +31 -0
  24. package/{lib → dist/lib}/EggControllerPrototypeHook.d.ts +2 -2
  25. package/dist/lib/EggControllerPrototypeHook.js +11 -0
  26. package/{lib → dist/lib}/RootProtoManager.d.ts +2 -2
  27. package/dist/lib/RootProtoManager.js +34 -0
  28. package/dist/lib/errors.js +12 -0
  29. package/dist/lib/impl/http/Acl.d.ts +2 -0
  30. package/dist/lib/impl/http/Acl.js +33 -0
  31. package/{lib → dist/lib}/impl/http/HTTPControllerRegister.d.ts +4 -4
  32. package/dist/lib/impl/http/HTTPControllerRegister.js +64 -0
  33. package/{lib → dist/lib}/impl/http/HTTPMethodRegister.d.ts +2 -2
  34. package/dist/lib/impl/http/HTTPMethodRegister.js +165 -0
  35. package/dist/lib/impl/http/Req.js +13 -0
  36. package/dist/types.d.ts +2 -0
  37. package/dist/types.js +3 -0
  38. package/package.json +60 -50
  39. package/app/middleware/mcp_body_middleware.d.ts +0 -3
  40. package/app/middleware/mcp_body_middleware.js +0 -48
  41. package/app/middleware/tegg_root_proto.d.ts +0 -3
  42. package/app/middleware/tegg_root_proto.js +0 -11
  43. package/app.d.ts +0 -15
  44. package/app.js +0 -143
  45. package/config/config.default.d.ts +0 -11
  46. package/config/config.default.js +0 -16
  47. package/lib/AppLoadUnitControllerHook.js +0 -28
  48. package/lib/ControllerLoadUnit.js +0 -71
  49. package/lib/ControllerLoadUnitHandler.js +0 -31
  50. package/lib/ControllerLoadUnitInstance.js +0 -34
  51. package/lib/ControllerMetadataManager.js +0 -30
  52. package/lib/ControllerRegister.js +0 -3
  53. package/lib/ControllerRegisterFactory.js +0 -21
  54. package/lib/EggControllerLoader.d.ts +0 -6
  55. package/lib/EggControllerLoader.js +0 -37
  56. package/lib/EggControllerPrototypeHook.js +0 -14
  57. package/lib/RootProtoManager.js +0 -38
  58. package/lib/errors.js +0 -16
  59. package/lib/impl/http/Acl.d.ts +0 -2
  60. package/lib/impl/http/Acl.js +0 -34
  61. package/lib/impl/http/HTTPControllerRegister.js +0 -62
  62. package/lib/impl/http/HTTPMethodRegister.js +0 -173
  63. package/lib/impl/http/Req.js +0 -17
  64. package/lib/impl/mcp/MCPConfig.d.ts +0 -32
  65. package/lib/impl/mcp/MCPConfig.js +0 -107
  66. package/lib/impl/mcp/MCPControllerRegister.d.ts +0 -67
  67. package/lib/impl/mcp/MCPControllerRegister.js +0 -541
  68. package/lib/impl/mcp/MCPServerHelper.d.ts +0 -17
  69. package/lib/impl/mcp/MCPServerHelper.js +0 -122
  70. package/typings/index.d.ts +0 -17
  71. /package/{lib → dist/lib}/errors.d.ts +0 -0
  72. /package/{lib → dist/lib}/impl/http/Req.d.ts +0 -0
@@ -1,541 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MCPControllerRegister = void 0;
7
- const node_assert_1 = __importDefault(require("node:assert"));
8
- const node_http_1 = require("node:http");
9
- const node_net_1 = require("node:net");
10
- const tegg_1 = require("@eggjs/tegg");
11
- const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
12
- const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
13
- const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
14
- const types_1 = require("@eggjs/mcp-proxy/types");
15
- const await_event_1 = __importDefault(require("await-event"));
16
- const koa_compose_1 = __importDefault(require("koa-compose"));
17
- const raw_body_1 = __importDefault(require("raw-body"));
18
- const content_type_1 = __importDefault(require("content-type"));
19
- const MCPConfig_1 = require("./MCPConfig");
20
- const MCPServerHelper_1 = require("./MCPServerHelper");
21
- class InnerSSEServerTransport extends sse_js_1.SSEServerTransport {
22
- async send(message) {
23
- var _a, _b;
24
- let res = null;
25
- try {
26
- await super.send(message);
27
- }
28
- catch (e) {
29
- res = e;
30
- }
31
- finally {
32
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
33
- const map = (_a = MCPControllerRegister.instance) === null || _a === void 0 ? void 0 : _a.sseTransportsRequestMap.get(this);
34
- if (map && 'id' in message) {
35
- const { resolve, reject } = (_b = map[message.id]) !== null && _b !== void 0 ? _b : {};
36
- if (resolve) {
37
- res ? reject(res) : resolve(res);
38
- delete map[message.id];
39
- }
40
- }
41
- }
42
- }
43
- }
44
- class MCPControllerRegister {
45
- static create(proto, controllerMeta, app) {
46
- (0, node_assert_1.default)(controllerMeta.type === tegg_1.ControllerType.MCP, 'controller meta type is not MCP');
47
- if (!MCPControllerRegister.instance) {
48
- MCPControllerRegister.instance = new MCPControllerRegister(proto, controllerMeta, app);
49
- }
50
- MCPControllerRegister.instance.controllerProtos.push(proto);
51
- return MCPControllerRegister.instance;
52
- }
53
- constructor(_proto, controllerMeta, app) {
54
- this.controllerProtos = [];
55
- this.registeredControllerProtos = [];
56
- this.transports = {};
57
- this.sseConnections = new Map();
58
- this.mcpServerHelperMap = {};
59
- this.statelessMcpServerHelperMap = {};
60
- this.statelessTransportMap = {};
61
- this.streamTransports = {};
62
- // eslint-disable-next-line no-spaced-func
63
- this.sseTransportsRequestMap = new Map();
64
- this.app = app;
65
- this.eggContainerFactory = app.eggContainerFactory;
66
- this.router = app.router;
67
- this.controllerMeta = controllerMeta;
68
- this.mcpConfig = new MCPConfig_1.MCPConfig(app.config.mcp);
69
- }
70
- static addHook(hook) {
71
- MCPControllerRegister.hooks.push(hook);
72
- }
73
- static async connectStatelessStreamTransport(name) {
74
- if (MCPControllerRegister.instance &&
75
- MCPControllerRegister.instance.statelessTransportMap) {
76
- const serverHelper = MCPControllerRegister.instance.statelessMcpServerHelperMap[name !== null && name !== void 0 ? name : 'default'];
77
- const statelessTransport = MCPControllerRegister.instance.statelessTransportMap[name !== null && name !== void 0 ? name : 'default'];
78
- if (serverHelper && statelessTransport) {
79
- await serverHelper.server.connect(statelessTransport);
80
- // 由于 mcp server stateless 需要我们在这里 init
81
- // 以防止后续请求进入时初次 init 后,请求打到别的进程,而别的进程没有 init
82
- const socket = new node_net_1.Socket();
83
- const req = new node_http_1.IncomingMessage(socket);
84
- const res = new node_http_1.ServerResponse(req);
85
- req.method = 'POST';
86
- req.url =
87
- MCPControllerRegister.instance.mcpConfig.getStatelessStreamPath(name);
88
- req.headers = {
89
- accept: 'application/json, text/event-stream',
90
- 'content-type': 'application/json',
91
- };
92
- const initBody = {
93
- jsonrpc: '2.0',
94
- id: 0,
95
- method: 'initialize',
96
- params: {
97
- protocolVersion: '2024-11-05',
98
- capabilities: {},
99
- clientInfo: {
100
- name: 'init-client',
101
- version: '1.0.0',
102
- },
103
- },
104
- };
105
- await statelessTransport.handleRequest(req, res, initBody);
106
- }
107
- }
108
- }
109
- static clean() {
110
- if (this.instance) {
111
- this.instance.controllerProtos = [];
112
- }
113
- this.instance = undefined;
114
- }
115
- mcpStatelessStreamServerInit(name) {
116
- const postRouterFunc = this.router.post;
117
- const self = this;
118
- const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
119
- sessionIdGenerator: undefined,
120
- });
121
- self.statelessTransportMap[name !== null && name !== void 0 ? name : 'default'] = transport;
122
- let mw = self.app.middleware.teggCtxLifecycleMiddleware();
123
- if (self.globalMiddlewares) {
124
- mw = (0, koa_compose_1.default)([mw, self.globalMiddlewares]);
125
- }
126
- const onmessage = transport.onmessage;
127
- transport.onmessage = async (message, extra) => {
128
- if (self.app.currentContext) {
129
- self.app.currentContext.mcpArg = message;
130
- }
131
- onmessage && await onmessage(message, extra);
132
- };
133
- const initHandler = async (ctx) => {
134
- var _a;
135
- if (MCPControllerRegister.hooks.length > 0) {
136
- for (const hook of MCPControllerRegister.hooks) {
137
- await ((_a = hook.preHandle) === null || _a === void 0 ? void 0 : _a.call(hook, self.app.currentContext));
138
- }
139
- }
140
- ctx.respond = false;
141
- ctx.set({
142
- 'content-type': 'text/event-stream',
143
- 'transfer-encoding': 'chunked',
144
- });
145
- await ctx.app.ctxStorage.run(ctx, async () => {
146
- await mw(ctx, async () => {
147
- await transport.handleRequest(ctx.req, ctx.res);
148
- await (0, await_event_1.default)(ctx.res, 'close');
149
- });
150
- });
151
- return;
152
- };
153
- Reflect.apply(postRouterFunc, this.router, [
154
- 'chairMcpStatelessStreamInit',
155
- self.mcpConfig.getStatelessStreamPath(name),
156
- ...[],
157
- initHandler,
158
- ]);
159
- // stateless 只支持 post
160
- const getRouterFunc = this.router.get;
161
- const delRouterFunc = this.router.del;
162
- const notHandler = async (ctx) => {
163
- ctx.status = 405;
164
- ctx.body = {
165
- jsonrpc: '2.0',
166
- error: {
167
- code: -32000,
168
- message: 'Method not allowed.',
169
- },
170
- id: null,
171
- };
172
- };
173
- Reflect.apply(getRouterFunc, this.router, [
174
- 'chairMcpStatelessStreamInit',
175
- self.mcpConfig.getStatelessStreamPath(name),
176
- ...[],
177
- notHandler,
178
- ]);
179
- Reflect.apply(delRouterFunc, this.router, [
180
- 'chairMcpStatelessStreamInit',
181
- self.mcpConfig.getStatelessStreamPath(name),
182
- ...[],
183
- notHandler,
184
- ]);
185
- }
186
- mcpStreamServerInit(name) {
187
- const allRouterFunc = this.router.all;
188
- const self = this;
189
- let mw = self.app.middleware.teggCtxLifecycleMiddleware();
190
- if (self.globalMiddlewares) {
191
- mw = (0, koa_compose_1.default)([mw, self.globalMiddlewares]);
192
- }
193
- const initHandler = async (ctx) => {
194
- var _a, _b, _c, _d;
195
- ctx.respond = false;
196
- if (MCPControllerRegister.hooks.length > 0) {
197
- for (const hook of MCPControllerRegister.hooks) {
198
- await ((_a = hook.preHandle) === null || _a === void 0 ? void 0 : _a.call(hook, self.app.currentContext));
199
- }
200
- }
201
- const sessionId = ctx.req.headers['mcp-session-id'];
202
- if (!sessionId) {
203
- const ct = content_type_1.default.parse(ctx.req.headers['content-type'] || 'application/json');
204
- let body;
205
- try {
206
- const rawBody = await (0, raw_body_1.default)(ctx.req, {
207
- limit: '4mb',
208
- encoding: (_b = ct.parameters.charset) !== null && _b !== void 0 ? _b : 'utf-8',
209
- });
210
- body = JSON.parse(rawBody);
211
- }
212
- catch (e) {
213
- ctx.status = 400;
214
- ctx.body = {
215
- jsonrpc: '2.0',
216
- error: {
217
- code: -32000,
218
- message: `Bad Request: body should is json, ${e.toString()}`,
219
- },
220
- id: null,
221
- };
222
- return;
223
- }
224
- if ((0, types_js_1.isInitializeRequest)(body)) {
225
- ctx.respond = false;
226
- const eventStore = this.mcpConfig.getEventStore();
227
- const self = this;
228
- const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
229
- sessionIdGenerator: () => this.mcpConfig.getSessionIdGenerator(name)(ctx),
230
- eventStore,
231
- onsessioninitialized: async () => {
232
- var _a;
233
- if (MCPControllerRegister.hooks.length > 0) {
234
- for (const hook of MCPControllerRegister.hooks) {
235
- await ((_a = hook.onStreamSessionInitialized) === null || _a === void 0 ? void 0 : _a.call(hook, self.app.currentContext, transport, self));
236
- }
237
- }
238
- },
239
- });
240
- ctx.set({
241
- 'content-type': 'text/event-stream',
242
- 'transfer-encoding': 'chunked',
243
- });
244
- await self.mcpServerHelperMap[name !== null && name !== void 0 ? name : 'default'].server.connect(transport);
245
- const onmessage = transport.onmessage;
246
- transport.onmessage = async (message, extra) => {
247
- if (self.app.currentContext) {
248
- self.app.currentContext.mcpArg = message;
249
- }
250
- onmessage && await onmessage(message, extra);
251
- };
252
- await ctx.app.ctxStorage.run(ctx, async () => {
253
- await mw(ctx, async () => {
254
- await transport.handleRequest(ctx.req, ctx.res, body);
255
- await (0, await_event_1.default)(ctx.res, 'close');
256
- });
257
- });
258
- }
259
- else {
260
- ctx.status = 400;
261
- ctx.body = {
262
- jsonrpc: '2.0',
263
- error: {
264
- code: -32000,
265
- message: 'Bad Request: No valid session ID provided',
266
- },
267
- id: null,
268
- };
269
- return;
270
- }
271
- }
272
- else if (sessionId) {
273
- const transport = self.streamTransports[sessionId];
274
- if (transport) {
275
- if (MCPControllerRegister.hooks.length > 0) {
276
- for (const hook of MCPControllerRegister.hooks) {
277
- await ((_c = hook.preHandle) === null || _c === void 0 ? void 0 : _c.call(hook, self.app.currentContext));
278
- }
279
- }
280
- ctx.respond = false;
281
- ctx.set({
282
- 'content-type': 'text/event-stream',
283
- 'transfer-encoding': 'chunked',
284
- });
285
- await ctx.app.ctxStorage.run(ctx, async () => {
286
- await mw(ctx, async () => {
287
- await transport.handleRequest(ctx.req, ctx.res);
288
- await (0, await_event_1.default)(ctx.res, 'close');
289
- });
290
- });
291
- return;
292
- }
293
- if (MCPControllerRegister.hooks.length > 0) {
294
- for (const hook of MCPControllerRegister.hooks) {
295
- const checked = await ((_d = hook.checkAndRunProxy) === null || _d === void 0 ? void 0 : _d.call(hook, self.app.currentContext, types_1.MCPProtocols.STREAM, sessionId));
296
- if (checked) {
297
- return;
298
- }
299
- }
300
- }
301
- }
302
- return;
303
- };
304
- Reflect.apply(allRouterFunc, this.router, [
305
- 'chairMcpStreamInit',
306
- self.mcpConfig.getStreamPath(name),
307
- ...[],
308
- initHandler,
309
- ]);
310
- }
311
- mcpServerInit(name) {
312
- const routerFunc = this.router.get;
313
- // const aclMiddleware = aclMiddlewareFactory(this.controllerMeta, this.methodMeta);
314
- // if (aclMiddleware) {
315
- // methodMiddlewares.push(aclMiddleware);
316
- // }
317
- const self = this;
318
- const initHandler = async (ctx) => {
319
- var _a;
320
- const transport = new InnerSSEServerTransport(self.mcpConfig.getSseMessagePath(name), ctx.res);
321
- const id = transport.sessionId;
322
- if (MCPControllerRegister.hooks.length > 0) {
323
- for (const hook of MCPControllerRegister.hooks) {
324
- await ((_a = hook.preSSEInitHandle) === null || _a === void 0 ? void 0 : _a.call(hook, self.app.currentContext, transport, self));
325
- }
326
- }
327
- // https://github.com/modelcontextprotocol/typescript-sdk/issues/270#issuecomment-2789526821
328
- const intervalId = setInterval(() => {
329
- if (self.sseConnections.has(id) && !ctx.res.writableEnded) {
330
- ctx.res.write(': keepalive\n\n');
331
- }
332
- else {
333
- clearInterval(intervalId);
334
- self.sseConnections.delete(id);
335
- }
336
- }, self.mcpConfig.getSseHeartTime(name));
337
- self.sseConnections.set(id, { res: ctx.res, intervalId });
338
- self.transports[id] = transport;
339
- ctx.set({
340
- 'content-type': 'text/event-stream',
341
- 'transfer-encoding': 'chunked',
342
- });
343
- ctx.respond = false;
344
- await self.mcpServerHelperMap[name !== null && name !== void 0 ? name : 'default'].server.connect(transport);
345
- return self.sseCtxStorageRun.bind(self)(ctx, transport, name);
346
- };
347
- Reflect.apply(routerFunc, this.router, [
348
- 'chairMcpInit',
349
- self.mcpConfig.getSseInitPath(name),
350
- ...[],
351
- initHandler,
352
- ]);
353
- }
354
- sseCtxStorageRun(ctx, transport, name) {
355
- const self = this;
356
- let mw = this.app.middleware.teggCtxLifecycleMiddleware();
357
- if (self.globalMiddlewares) {
358
- mw = (0, koa_compose_1.default)([mw, self.globalMiddlewares]);
359
- }
360
- const closeFunc = transport.onclose;
361
- transport.onclose = (...args) => {
362
- closeFunc === null || closeFunc === void 0 ? void 0 : closeFunc(...args);
363
- delete self.transports[transport.sessionId];
364
- self.sseTransportsRequestMap.delete(transport);
365
- const connection = self.sseConnections.get(transport.sessionId);
366
- if (connection) {
367
- clearInterval(connection.intervalId);
368
- self.sseConnections.delete(transport.sessionId);
369
- }
370
- };
371
- transport.onerror = error => {
372
- self.app.logger.error('session %s error %o', transport.sessionId, error);
373
- };
374
- const messageFunc = transport.onmessage;
375
- self.sseTransportsRequestMap.set(transport, {});
376
- transport.onmessage = async (message, extra) => {
377
- var _a;
378
- const args = [message, extra];
379
- // 这里需要 new 一个新的 ctx,否则 ContextProto 会未被初始化
380
- const socket = new node_net_1.Socket();
381
- const req = new node_http_1.IncomingMessage(socket);
382
- const res = new node_http_1.ServerResponse(req);
383
- req.method = 'POST';
384
- req.url = self.mcpConfig.getSseInitPath(name);
385
- req.headers = {
386
- ...ctx.req.headers,
387
- ...(_a = extra === null || extra === void 0 ? void 0 : extra.requestInfo) === null || _a === void 0 ? void 0 : _a.headers,
388
- accept: 'application/json, text/event-stream',
389
- 'content-type': 'application/json',
390
- };
391
- const newCtx = self.app.createContext(req, res);
392
- await ctx.app.ctxStorage.run(newCtx, async () => {
393
- var _a;
394
- if (MCPControllerRegister.hooks.length > 0) {
395
- for (const hook of MCPControllerRegister.hooks) {
396
- await ((_a = hook.preHandle) === null || _a === void 0 ? void 0 : _a.call(hook, newCtx));
397
- }
398
- }
399
- await mw(newCtx, async () => {
400
- messageFunc(message, extra);
401
- if ((0, types_js_1.isJSONRPCRequest)(args[0])) {
402
- const map = self.sseTransportsRequestMap.get(transport);
403
- const wait = new Promise((resolve, reject) => {
404
- if (extra && 'id' in extra) {
405
- map[extra.id] = { resolve, reject };
406
- }
407
- });
408
- await wait;
409
- }
410
- });
411
- });
412
- };
413
- }
414
- mcpServerRegister(name) {
415
- const routerFunc = this.router.post;
416
- const self = this;
417
- // const aclMiddleware = aclMiddlewareFactory(this.controllerMeta, this.methodMeta);
418
- // if (aclMiddleware) {
419
- // methodMiddlewares.push(aclMiddleware);
420
- // }
421
- let mw = self.app.middleware.teggCtxLifecycleMiddleware();
422
- if (self.globalMiddlewares) {
423
- mw = (0, koa_compose_1.default)([mw, self.globalMiddlewares]);
424
- }
425
- const messageHander = async (ctx) => {
426
- var _a, _b, _c, _d;
427
- const sessionId = ctx.query.sessionId;
428
- if (self.transports[sessionId]) {
429
- if (MCPControllerRegister.hooks.length > 0) {
430
- for (const hook of MCPControllerRegister.hooks) {
431
- await ((_a = hook.preHandleInitHandle) === null || _a === void 0 ? void 0 : _a.call(hook, self.app.currentContext));
432
- }
433
- }
434
- self.app.logger.info('message coming', sessionId);
435
- try {
436
- const ct = content_type_1.default.parse((_b = ctx.req.headers['content-type']) !== null && _b !== void 0 ? _b : '');
437
- const rawBody = await (0, raw_body_1.default)(ctx.req, {
438
- limit: '4mb',
439
- encoding: (_c = ct.parameters.charset) !== null && _c !== void 0 ? _c : 'utf-8',
440
- });
441
- const body = JSON.parse(rawBody);
442
- ctx.mcpArg = body;
443
- await self.transports[sessionId].handlePostMessage(ctx.req, ctx.res, body);
444
- }
445
- catch (error) {
446
- self.app.logger.error('Error handling MCP message', error);
447
- if (!ctx.res.headersSent) {
448
- ctx.status = 500;
449
- ctx.body = {
450
- jsonrpc: '2.0',
451
- error: {
452
- code: -32603,
453
- message: `Internal error: ${error.message}`,
454
- },
455
- id: null,
456
- };
457
- }
458
- }
459
- return;
460
- }
461
- if (MCPControllerRegister.hooks.length > 0) {
462
- for (const hook of MCPControllerRegister.hooks) {
463
- const checked = await ((_d = hook.checkAndRunProxy) === null || _d === void 0 ? void 0 : _d.call(hook, self.app.currentContext, types_1.MCPProtocols.SSE, sessionId));
464
- if (checked) {
465
- return;
466
- }
467
- }
468
- }
469
- };
470
- Reflect.apply(routerFunc, this.router, [
471
- 'chairMcpMessage',
472
- self.mcpConfig.getSseMessagePath(name),
473
- ...[mw],
474
- messageHander,
475
- ]);
476
- }
477
- getGlobalMiddleware() {
478
- const middlewareNames = this.app.config.mcp.middleware || [];
479
- const middlewares = [];
480
- for (const name of middlewareNames) {
481
- const middlewareFactory = this.app.middlewares[name];
482
- if (!middlewareFactory) {
483
- throw new TypeError(`Middleware ${name} not found`);
484
- }
485
- const options = this.app.config[name] || {};
486
- const mw = middlewareFactory(options, this.app);
487
- mw._name = name;
488
- middlewares.push(mw);
489
- }
490
- this.globalMiddlewares = (0, koa_compose_1.default)(middlewares);
491
- }
492
- async register() {
493
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
494
- for (const proto of this.controllerProtos) {
495
- if (this.registeredControllerProtos.includes(proto)) {
496
- continue;
497
- }
498
- const metadata = proto.getMetaData(tegg_1.CONTROLLER_META_DATA);
499
- if (!this.mcpServerHelperMap[(_a = metadata.name) !== null && _a !== void 0 ? _a : 'default']) {
500
- this.getGlobalMiddleware();
501
- this.mcpServerHelperMap[(_b = metadata.name) !== null && _b !== void 0 ? _b : 'default'] =
502
- new MCPServerHelper_1.MCPServerHelper({
503
- name: (_c = this.controllerMeta.name) !== null && _c !== void 0 ? _c : `chair-mcp-${(_d = metadata.name) !== null && _d !== void 0 ? _d : this.app.name}-server`,
504
- version: (_e = this.controllerMeta.version) !== null && _e !== void 0 ? _e : '1.0.0',
505
- hooks: MCPControllerRegister.hooks,
506
- });
507
- this.statelessMcpServerHelperMap[(_f = metadata.name) !== null && _f !== void 0 ? _f : 'default'] =
508
- new MCPServerHelper_1.MCPServerHelper({
509
- name: (_g = this.controllerMeta.name) !== null && _g !== void 0 ? _g : `chair-mcp-${(_h = metadata.name) !== null && _h !== void 0 ? _h : this.app.name}-server`,
510
- version: (_j = this.controllerMeta.version) !== null && _j !== void 0 ? _j : '1.0.0',
511
- hooks: MCPControllerRegister.hooks,
512
- });
513
- this.mcpStatelessStreamServerInit(metadata.name);
514
- this.mcpStreamServerInit(metadata.name);
515
- this.mcpServerInit(metadata.name);
516
- this.mcpServerRegister(metadata.name);
517
- if (metadata.name) {
518
- this.mcpConfig.setMultipleServerPath(this.app, metadata.name);
519
- }
520
- }
521
- const mcpServerHelper = this.mcpServerHelperMap[(_k = metadata.name) !== null && _k !== void 0 ? _k : 'default'];
522
- const statelessMcpServerHelper = this.statelessMcpServerHelperMap[(_l = metadata.name) !== null && _l !== void 0 ? _l : 'default'];
523
- for (const prompt of metadata.prompts) {
524
- await mcpServerHelper.mcpPromptRegister(this.eggContainerFactory.getOrCreateEggObject.bind(this.eggContainerFactory), proto, prompt);
525
- await statelessMcpServerHelper.mcpPromptRegister(this.eggContainerFactory.getOrCreateEggObject.bind(this.eggContainerFactory), proto, prompt);
526
- }
527
- for (const resource of metadata.resources) {
528
- await mcpServerHelper.mcpResourceRegister(this.eggContainerFactory.getOrCreateEggObject.bind(this.eggContainerFactory), proto, resource);
529
- await statelessMcpServerHelper.mcpResourceRegister(this.eggContainerFactory.getOrCreateEggObject.bind(this.eggContainerFactory), proto, resource);
530
- }
531
- for (const tool of metadata.tools) {
532
- await mcpServerHelper.mcpToolRegister(this.eggContainerFactory.getOrCreateEggObject.bind(this.eggContainerFactory), proto, tool);
533
- await statelessMcpServerHelper.mcpToolRegister(this.eggContainerFactory.getOrCreateEggObject.bind(this.eggContainerFactory), proto, tool);
534
- }
535
- this.registeredControllerProtos.push(proto);
536
- }
537
- }
538
- }
539
- exports.MCPControllerRegister = MCPControllerRegister;
540
- MCPControllerRegister.hooks = [];
541
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQ29udHJvbGxlclJlZ2lzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTUNQQ29udHJvbGxlclJlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLDhEQUFpQztBQUNqQyx5Q0FBa0U7QUFDbEUsdUNBQWtDO0FBRWxDLHNDQVFxQjtBQUlyQixvRUFBNkU7QUFDN0UsMEZBQW1HO0FBRW5HLGlFQUE2SDtBQUM3SCxrREFBc0Q7QUFDdEQsOERBQXFDO0FBQ3JDLDhEQUFrQztBQUVsQyx3REFBa0M7QUFDbEMsZ0VBQXVDO0FBRXZDLDJDQUF3QztBQUN4Qyx1REFBb0Q7QUFzQnBELE1BQU0sdUJBQXdCLFNBQVEsMkJBQWtCO0lBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBdUI7O1FBQ2hDLElBQUksR0FBRyxHQUFpQixJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsR0FBRyxHQUFHLENBQVUsQ0FBQztRQUNuQixDQUFDO2dCQUFTLENBQUM7WUFDVCxtRUFBbUU7WUFDbkUsTUFBTSxHQUFHLEdBQUcsTUFBQSxxQkFBcUIsQ0FBQyxRQUFRLDBDQUFFLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5RSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBQSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQ0FBSSxFQUFFLENBQUM7Z0JBQ2xELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FB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
@@ -1,17 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { MCPControllerHook } from './MCPControllerRegister';
3
- import { EggObject, EggObjectName, EggPrototype } from '@eggjs/tegg-types';
4
- import { MCPPromptMeta, MCPResourceMeta, MCPToolMeta } from '@eggjs/tegg';
5
- export interface MCPServerHelperOptions {
6
- name: string;
7
- version: string;
8
- hooks: MCPControllerHook[];
9
- }
10
- export declare class MCPServerHelper {
11
- server: McpServer;
12
- hooks: MCPControllerHook[];
13
- constructor(opts: MCPServerHelperOptions);
14
- mcpResourceRegister(getOrCreateEggObject: (proto: EggPrototype, name?: EggObjectName) => Promise<EggObject>, controllerProto: EggPrototype, resourceMeta: MCPResourceMeta): Promise<void>;
15
- mcpToolRegister(getOrCreateEggObject: (proto: EggPrototype, name?: EggObjectName) => Promise<EggObject>, controllerProto: EggPrototype, toolMeta: MCPToolMeta): Promise<void>;
16
- mcpPromptRegister(getOrCreateEggObject: (proto: EggPrototype, name?: EggObjectName) => Promise<EggObject>, controllerProto: EggPrototype, promptMeta: MCPPromptMeta): Promise<void>;
17
- }