@eggjs/tegg-controller-plugin 3.55.0 → 3.56.1
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 +123 -0
- package/app/middleware/mcp_body_middleware.js +2 -2
- package/app.d.ts +1 -0
- package/app.js +8 -1
- package/config/config.default.d.ts +11 -0
- package/config/config.default.js +16 -0
- package/lib/impl/mcp/MCPConfig.d.ts +27 -0
- package/lib/impl/mcp/MCPConfig.js +40 -0
- package/lib/impl/mcp/MCPControllerRegister.d.ts +6 -1
- package/lib/impl/mcp/MCPControllerRegister.js +113 -18
- package/package.json +14 -12
package/README.md
CHANGED
|
@@ -211,3 +211,126 @@ export class FooController {
|
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
```
|
|
214
|
+
|
|
215
|
+
### MCP 注解
|
|
216
|
+
|
|
217
|
+
#### MCPController/MCPPrompt/MCPTool/MCPResource
|
|
218
|
+
|
|
219
|
+
`@MCPController` 注解用来声明当前类是一个 MCP controller。
|
|
220
|
+
通过使用装饰器 `@MCPPrompt` `@MCPTool` `@MCPResource` 来声明对应的 MCP 类型。
|
|
221
|
+
使用 `@ToolArgsSchema` `@PromptArgsSchema` `@Extra` 来 schema 和 extra。
|
|
222
|
+
|
|
223
|
+
```ts
|
|
224
|
+
import {
|
|
225
|
+
MCPController,
|
|
226
|
+
PromptArgs,
|
|
227
|
+
ToolArgs,
|
|
228
|
+
MCPPromptResponse,
|
|
229
|
+
MCPToolResponse,
|
|
230
|
+
MCPResourceResponse,
|
|
231
|
+
MCPPrompt,
|
|
232
|
+
MCPTool,
|
|
233
|
+
MCPResource,
|
|
234
|
+
PromptArgsSchema,
|
|
235
|
+
Logger,
|
|
236
|
+
Inject,
|
|
237
|
+
ToolArgsSchema,
|
|
238
|
+
} from '@eggjs/tegg';
|
|
239
|
+
import z from 'zod';
|
|
240
|
+
|
|
241
|
+
export const PromptType = {
|
|
242
|
+
name: z.string(),
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
export const ToolType = {
|
|
246
|
+
name: z.string({
|
|
247
|
+
description: 'npm package name',
|
|
248
|
+
}),
|
|
249
|
+
};
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
@MCPController()
|
|
253
|
+
export class McpController {
|
|
254
|
+
|
|
255
|
+
@Inject()
|
|
256
|
+
logger: Logger;
|
|
257
|
+
|
|
258
|
+
@MCPPrompt()
|
|
259
|
+
async foo(@PromptArgsSchema(PromptType) args: PromptArgs<typeof PromptType>): Promise<MCPPromptResponse> {
|
|
260
|
+
this.logger.info('hello world');
|
|
261
|
+
return {
|
|
262
|
+
messages: [
|
|
263
|
+
{
|
|
264
|
+
role: 'user',
|
|
265
|
+
content: {
|
|
266
|
+
type: 'text',
|
|
267
|
+
text: `Generate a concise but descriptive commit message for these changes:\n\n${args.name}`,
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
@MCPTool()
|
|
275
|
+
async bar(@ToolArgsSchema(ToolType) args: ToolArgs<typeof ToolType>): Promise<MCPToolResponse> {
|
|
276
|
+
return {
|
|
277
|
+
content: [
|
|
278
|
+
{
|
|
279
|
+
type: 'text',
|
|
280
|
+
text: `npm package: ${args.name} not found`,
|
|
281
|
+
},
|
|
282
|
+
],
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
@MCPResource({
|
|
288
|
+
template: [
|
|
289
|
+
'mcp://npm/{name}{?version}',
|
|
290
|
+
{
|
|
291
|
+
list: () => {
|
|
292
|
+
return {
|
|
293
|
+
resources: [
|
|
294
|
+
{ name: 'egg', uri: 'mcp://npm/egg?version=4.10.0' },
|
|
295
|
+
{ name: 'mcp', uri: 'mcp://npm/mcp?version=0.10.0' },
|
|
296
|
+
],
|
|
297
|
+
};
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
})
|
|
302
|
+
async car(uri: URL): Promise<MCPResourceResponse> {
|
|
303
|
+
return {
|
|
304
|
+
contents: [{
|
|
305
|
+
uri: uri.toString(),
|
|
306
|
+
text: 'MOCK TEXT',
|
|
307
|
+
}],
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
#### MCP 地址
|
|
315
|
+
MCP controller 完整的实现了 SSE / streamable HTTP / streamable stateless HTTP 三种模式,默认情况下,他们的路径分别是 `/mcp/init` `/mcp/stream` `/mcp/stateless/stream`, 你可以根据你所需要的场景,灵活使用对应的接口。
|
|
316
|
+
|
|
317
|
+
``` ts
|
|
318
|
+
// config.{env}.ts
|
|
319
|
+
import { randomUUID } from 'node:crypto';
|
|
320
|
+
|
|
321
|
+
export default () => {
|
|
322
|
+
|
|
323
|
+
const config = {
|
|
324
|
+
mcp: {
|
|
325
|
+
sseInitPath: '/mcp/init', // SSE path
|
|
326
|
+
sseMessagePath: '/mcp/message', // SSE message path
|
|
327
|
+
streamPath: '/mcp/stream', // streamable path
|
|
328
|
+
statelessStreamPath: '/mcp/stateless/stream', // stateless streamable path
|
|
329
|
+
sessionIdGenerator: randomUUID,
|
|
330
|
+
},
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
return config;
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
```
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const path_to_regexp_1 = __importDefault(require("path-to-regexp"));
|
|
7
7
|
exports.default = () => {
|
|
8
8
|
return async function mcpBodyMiddleware(ctx, next) {
|
|
9
|
-
const arr = [ctx.app.config.mcp.sseInitPath, ctx.app.config.mcp.sseMessagePath, ctx.app.config.mcp.streamPath];
|
|
9
|
+
const arr = [ctx.app.config.mcp.sseInitPath, ctx.app.config.mcp.sseMessagePath, ctx.app.config.mcp.streamPath, ctx.app.config.mcp.statelessStreamPath];
|
|
10
10
|
const res = arr.some(igPath => {
|
|
11
11
|
const match = (0, path_to_regexp_1.default)(igPath, [], {
|
|
12
12
|
end: false,
|
|
@@ -19,4 +19,4 @@ exports.default = () => {
|
|
|
19
19
|
await next();
|
|
20
20
|
};
|
|
21
21
|
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwX2JvZHlfbWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1jcF9ib2R5X21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxvRUFBMEM7QUFFMUMsa0JBQWUsR0FBRyxFQUFFO0lBQ2xCLE9BQU8sS0FBSyxVQUFVLGlCQUFpQixDQUFDLEdBQWUsRUFBRSxJQUFVO1FBQ2pFLE1BQU0sR0FBRyxHQUFHLENBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFFLENBQUM7UUFDekosTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QixNQUFNLEtBQUssR0FBRyxJQUFBLHdCQUFZLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDckMsR0FBRyxFQUFFLEtBQUs7YUFDWCxDQUFDLENBQUM7WUFDSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQztRQUNELE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUM7QUFDSixDQUFDLENBQUMifQ==
|
package/app.d.ts
CHANGED
package/app.js
CHANGED
|
@@ -51,6 +51,7 @@ class ControllerAppBootHook {
|
|
|
51
51
|
this.app.config.mcp.sseInitPath,
|
|
52
52
|
this.app.config.mcp.sseMessagePath,
|
|
53
53
|
this.app.config.mcp.streamPath,
|
|
54
|
+
this.app.config.mcp.statelessStreamPath,
|
|
54
55
|
...(Array.isArray(this.app.config.security.csrf.ignore)
|
|
55
56
|
? this.app.config.security.csrf.ignore
|
|
56
57
|
: [this.app.config.security.csrf.ignore]),
|
|
@@ -62,6 +63,7 @@ class ControllerAppBootHook {
|
|
|
62
63
|
this.app.config.mcp.sseInitPath,
|
|
63
64
|
this.app.config.mcp.sseMessagePath,
|
|
64
65
|
this.app.config.mcp.streamPath,
|
|
66
|
+
this.app.config.mcp.statelessStreamPath,
|
|
65
67
|
];
|
|
66
68
|
}
|
|
67
69
|
}
|
|
@@ -85,6 +87,11 @@ class ControllerAppBootHook {
|
|
|
85
87
|
// and register methods after collect is done.
|
|
86
88
|
(_a = HTTPControllerRegister_1.HTTPControllerRegister.instance) === null || _a === void 0 ? void 0 : _a.doRegister(this.app.rootProtoManager);
|
|
87
89
|
}
|
|
90
|
+
async willReady() {
|
|
91
|
+
if (this.app.mcpProxy) {
|
|
92
|
+
await MCPControllerRegister_1.MCPControllerRegister.connectStatelessStreamTransport();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
88
95
|
async beforeClose() {
|
|
89
96
|
if (this.controllerLoadUnitHandler) {
|
|
90
97
|
await this.controllerLoadUnitHandler.destroy();
|
|
@@ -96,4 +103,4 @@ class ControllerAppBootHook {
|
|
|
96
103
|
}
|
|
97
104
|
}
|
|
98
105
|
exports.default = ControllerAppBootHook;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsaUVBQW9GO0FBQ3BGLCtFQUE0RTtBQUU1RSxzQ0FBMkU7QUFDM0UsbUZBQWdGO0FBQ2hGLCtFQUE0RTtBQUM1RSwrRUFBNEU7QUFDNUUsc0RBQStGO0FBQy9GLCtFQUE0RTtBQUM1RSxpRkFBOEU7QUFDOUUsNkRBQTBEO0FBQzFELG1FQUFnRTtBQUNoRSxnRkFBNkU7QUFFN0UsMEJBQTBCO0FBQzFCLHlFQUF5RTtBQUN6RSw2Q0FBNkM7QUFDN0Msc0RBQXNEO0FBRXRELE1BQXFCLHFCQUFxQjtJQU94QyxZQUFZLEdBQWdCO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUkscURBQXlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxtQ0FBZ0IsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEdBQUcsbUNBQTRCLENBQUM7UUFDckUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHFEQUF5QixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksdURBQTBCLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsaUJBQWlC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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
declare const _default: () => {
|
|
3
|
+
mcp: {
|
|
4
|
+
sseInitPath: string;
|
|
5
|
+
sseMessagePath: string;
|
|
6
|
+
streamPath: string;
|
|
7
|
+
statelessStreamPath: string;
|
|
8
|
+
sessionIdGenerator: typeof randomUUID;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const node_crypto_1 = require("node:crypto");
|
|
4
|
+
exports.default = () => {
|
|
5
|
+
const config = {
|
|
6
|
+
mcp: {
|
|
7
|
+
sseInitPath: '/mcp/init',
|
|
8
|
+
sseMessagePath: '/mcp/message',
|
|
9
|
+
streamPath: '/mcp/stream',
|
|
10
|
+
statelessStreamPath: '/mcp/stateless/stream',
|
|
11
|
+
sessionIdGenerator: node_crypto_1.randomUUID,
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
return config;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25maWcuZGVmYXVsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUF5QztBQUV6QyxrQkFBZSxHQUFHLEVBQUU7SUFFbEIsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUU7WUFDSCxXQUFXLEVBQUUsV0FBVztZQUN4QixjQUFjLEVBQUUsY0FBYztZQUM5QixVQUFVLEVBQUUsYUFBYTtZQUN6QixtQkFBbUIsRUFBRSx1QkFBdUI7WUFDNUMsa0JBQWtCLEVBQUUsd0JBQVU7U0FDL0I7S0FDRixDQUFDO0lBRUYsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { EventStore } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
2
|
+
export interface MCPConfigOptions {
|
|
3
|
+
sseInitPath: string;
|
|
4
|
+
sseMessagePath: string;
|
|
5
|
+
streamPath: string;
|
|
6
|
+
statelessStreamPath: string;
|
|
7
|
+
sessionIdGenerator?: () => string;
|
|
8
|
+
eventStore?: EventStore;
|
|
9
|
+
sseHeartTime?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class MCPConfig {
|
|
12
|
+
private _sseInitPath;
|
|
13
|
+
private _sseMessagePath;
|
|
14
|
+
private _streamPath;
|
|
15
|
+
private _statelessStreamPath;
|
|
16
|
+
private _sessionIdGenerator;
|
|
17
|
+
private _eventStore;
|
|
18
|
+
private _sseHeartTime;
|
|
19
|
+
constructor(options: MCPConfigOptions);
|
|
20
|
+
get sseInitPath(): string;
|
|
21
|
+
get sseMessagePath(): string;
|
|
22
|
+
get streamPath(): string;
|
|
23
|
+
get statelessStreamPath(): string;
|
|
24
|
+
get sessionIdGenerator(): () => string;
|
|
25
|
+
get eventStore(): EventStore;
|
|
26
|
+
get sseHeartTime(): number;
|
|
27
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MCPConfig = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const inMemoryEventStore_js_1 = require("@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js");
|
|
6
|
+
class MCPConfig {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
var _a, _b, _c;
|
|
9
|
+
this._sessionIdGenerator = (_a = options.sessionIdGenerator) !== null && _a !== void 0 ? _a : node_crypto_1.randomUUID;
|
|
10
|
+
this._sseInitPath = options.sseInitPath;
|
|
11
|
+
this._sseMessagePath = options.sseMessagePath;
|
|
12
|
+
this._streamPath = options.streamPath;
|
|
13
|
+
this._statelessStreamPath = options.statelessStreamPath;
|
|
14
|
+
this._eventStore = (_b = options.eventStore) !== null && _b !== void 0 ? _b : new inMemoryEventStore_js_1.InMemoryEventStore();
|
|
15
|
+
this._sseHeartTime = (_c = options.sseHeartTime) !== null && _c !== void 0 ? _c : 25000;
|
|
16
|
+
}
|
|
17
|
+
get sseInitPath() {
|
|
18
|
+
return this._sseInitPath;
|
|
19
|
+
}
|
|
20
|
+
get sseMessagePath() {
|
|
21
|
+
return this._sseMessagePath;
|
|
22
|
+
}
|
|
23
|
+
get streamPath() {
|
|
24
|
+
return this._streamPath;
|
|
25
|
+
}
|
|
26
|
+
get statelessStreamPath() {
|
|
27
|
+
return this._statelessStreamPath;
|
|
28
|
+
}
|
|
29
|
+
get sessionIdGenerator() {
|
|
30
|
+
return this._sessionIdGenerator;
|
|
31
|
+
}
|
|
32
|
+
get eventStore() {
|
|
33
|
+
return this._eventStore;
|
|
34
|
+
}
|
|
35
|
+
get sseHeartTime() {
|
|
36
|
+
return this._sseHeartTime;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.MCPConfig = MCPConfig;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTUNQQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF5QztBQUV6QywyR0FBcUc7QUFZckcsTUFBYSxTQUFTO0lBU3BCLFlBQVksT0FBeUI7O1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFBLE9BQU8sQ0FBQyxrQkFBa0IsbUNBQUksd0JBQVUsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBQSxPQUFPLENBQUMsVUFBVSxtQ0FBSSxJQUFJLDBDQUFrQixFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFBLE9BQU8sQ0FBQyxZQUFZLG1DQUFJLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBOUNELDhCQThDQyJ9
|
|
@@ -29,13 +29,18 @@ export declare class MCPControllerRegister implements ControllerRegister {
|
|
|
29
29
|
intervalId: NodeJS.Timeout;
|
|
30
30
|
}>;
|
|
31
31
|
private mcpServer;
|
|
32
|
+
private statelessMcpServer;
|
|
32
33
|
private controllerMeta;
|
|
34
|
+
private mcpConfig;
|
|
35
|
+
statelessTransport: StreamableHTTPServerTransport;
|
|
33
36
|
streamTransports: Record<string, StreamableHTTPServerTransport>;
|
|
34
37
|
static hooks: MCPControllerHook[];
|
|
35
38
|
static create(proto: EggPrototype, controllerMeta: ControllerMetadata, app: Application): MCPControllerRegister;
|
|
36
39
|
constructor(_proto: EggPrototype, controllerMeta: MCPControllerMeta, app: Application);
|
|
37
40
|
static addHook(hook: MCPControllerHook): void;
|
|
38
|
-
|
|
41
|
+
static connectStatelessStreamTransport(): Promise<void>;
|
|
42
|
+
mcpStatelessStreamServerInit(): void;
|
|
43
|
+
mcpStreamServerInit(): void;
|
|
39
44
|
mcpServerInit(): void;
|
|
40
45
|
sseCtxStorageRun(ctx: Context, transport: SSEServerTransport | StreamableHTTPServerTransport): void;
|
|
41
46
|
mcpServerRegister(): void;
|
|
@@ -5,15 +5,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.MCPControllerRegister = void 0;
|
|
7
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");
|
|
8
10
|
const tegg_1 = require("@eggjs/tegg");
|
|
9
11
|
const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js");
|
|
10
12
|
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
11
13
|
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
12
|
-
const inMemoryEventStore_js_1 = require("@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js");
|
|
13
14
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
14
15
|
const mcp_proxy_1 = require("@eggjs/mcp-proxy");
|
|
15
16
|
const raw_body_1 = __importDefault(require("raw-body"));
|
|
16
17
|
const content_type_1 = __importDefault(require("content-type"));
|
|
18
|
+
const MCPConfig_1 = require("./MCPConfig");
|
|
17
19
|
class MCPControllerRegister {
|
|
18
20
|
static create(proto, controllerMeta, app) {
|
|
19
21
|
(0, node_assert_1.default)(controllerMeta.type === tegg_1.ControllerType.MCP, 'controller meta type is not MCP');
|
|
@@ -33,16 +35,103 @@ class MCPControllerRegister {
|
|
|
33
35
|
this.eggContainerFactory = app.eggContainerFactory;
|
|
34
36
|
this.router = app.router;
|
|
35
37
|
this.controllerMeta = controllerMeta;
|
|
38
|
+
this.mcpConfig = new MCPConfig_1.MCPConfig(app.config.mcp);
|
|
36
39
|
}
|
|
37
40
|
static addHook(hook) {
|
|
38
41
|
MCPControllerRegister.hooks.push(hook);
|
|
39
42
|
}
|
|
40
|
-
async
|
|
41
|
-
|
|
43
|
+
static async connectStatelessStreamTransport() {
|
|
44
|
+
if (MCPControllerRegister.instance && MCPControllerRegister.instance.statelessTransport) {
|
|
45
|
+
MCPControllerRegister.instance.statelessMcpServer.connect(MCPControllerRegister.instance.statelessTransport);
|
|
46
|
+
// 由于 mcp server stateless 需要我们在这里 init
|
|
47
|
+
// 以防止后续请求进入时初次 init 后,请求打到别的进程,而别的进程没有 init
|
|
48
|
+
const socket = new node_net_1.Socket();
|
|
49
|
+
const req = new node_http_1.IncomingMessage(socket);
|
|
50
|
+
const res = new node_http_1.ServerResponse(req);
|
|
51
|
+
req.method = 'POST';
|
|
52
|
+
req.url = MCPControllerRegister.instance.mcpConfig.statelessStreamPath;
|
|
53
|
+
req.headers = {
|
|
54
|
+
accept: 'application/json, text/event-stream',
|
|
55
|
+
'content-type': 'application/json',
|
|
56
|
+
};
|
|
57
|
+
const initBody = {
|
|
58
|
+
jsonrpc: '2.0',
|
|
59
|
+
id: 0,
|
|
60
|
+
method: 'initialize',
|
|
61
|
+
params: {
|
|
62
|
+
protocolVersion: '2024-11-05',
|
|
63
|
+
capabilities: {},
|
|
64
|
+
clientInfo: {
|
|
65
|
+
name: 'init-client',
|
|
66
|
+
version: '1.0.0',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
await MCPControllerRegister.instance.statelessTransport.handleRequest(req, res, initBody);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
mcpStatelessStreamServerInit() {
|
|
74
|
+
const postRouterFunc = this.router.post;
|
|
75
|
+
const self = this;
|
|
76
|
+
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
77
|
+
sessionIdGenerator: undefined,
|
|
78
|
+
});
|
|
79
|
+
self.statelessTransport = transport;
|
|
80
|
+
const initHandler = async (ctx) => {
|
|
81
|
+
var _a;
|
|
82
|
+
if (MCPControllerRegister.hooks.length > 0) {
|
|
83
|
+
for (const hook of MCPControllerRegister.hooks) {
|
|
84
|
+
await ((_a = hook.preHandle) === null || _a === void 0 ? void 0 : _a.call(hook, self.app.currentContext));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
ctx.respond = false;
|
|
88
|
+
ctx.set({
|
|
89
|
+
'content-type': 'text/event-stream',
|
|
90
|
+
'transfer-encoding': 'chunked',
|
|
91
|
+
});
|
|
92
|
+
await ctx.app.ctxStorage.run(ctx, async () => {
|
|
93
|
+
await self.statelessTransport.handleRequest(ctx.req, ctx.res);
|
|
94
|
+
});
|
|
95
|
+
return;
|
|
96
|
+
};
|
|
97
|
+
Reflect.apply(postRouterFunc, this.router, [
|
|
98
|
+
'chairMcpStatelessStreamInit',
|
|
99
|
+
this.mcpConfig.statelessStreamPath,
|
|
100
|
+
...[],
|
|
101
|
+
initHandler,
|
|
102
|
+
]);
|
|
103
|
+
// stateless 只支持 post
|
|
104
|
+
const getRouterFunc = this.router.get;
|
|
105
|
+
const delRouterFunc = this.router.del;
|
|
106
|
+
const notHandler = async (ctx) => {
|
|
107
|
+
ctx.status = 405;
|
|
108
|
+
ctx.body = {
|
|
109
|
+
jsonrpc: '2.0',
|
|
110
|
+
error: {
|
|
111
|
+
code: -32000,
|
|
112
|
+
message: 'Method not allowed.',
|
|
113
|
+
},
|
|
114
|
+
id: null,
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
Reflect.apply(getRouterFunc, this.router, [
|
|
118
|
+
'chairMcpStatelessStreamInit',
|
|
119
|
+
this.mcpConfig.statelessStreamPath,
|
|
120
|
+
...[],
|
|
121
|
+
notHandler,
|
|
122
|
+
]);
|
|
123
|
+
Reflect.apply(delRouterFunc, this.router, [
|
|
124
|
+
'chairMcpStatelessStreamInit',
|
|
125
|
+
this.mcpConfig.statelessStreamPath,
|
|
126
|
+
...[],
|
|
127
|
+
notHandler,
|
|
128
|
+
]);
|
|
129
|
+
}
|
|
130
|
+
mcpStreamServerInit() {
|
|
42
131
|
const allRouterFunc = this.router.all;
|
|
43
132
|
const self = this;
|
|
44
133
|
const initHandler = async (ctx) => {
|
|
45
|
-
var _a, _b, _c, _d, _e
|
|
134
|
+
var _a, _b, _c, _d, _e;
|
|
46
135
|
ctx.respond = false;
|
|
47
136
|
if (MCPControllerRegister.hooks.length > 0) {
|
|
48
137
|
for (const hook of MCPControllerRegister.hooks) {
|
|
@@ -74,10 +163,10 @@ class MCPControllerRegister {
|
|
|
74
163
|
}
|
|
75
164
|
if ((0, types_js_1.isInitializeRequest)(body)) {
|
|
76
165
|
ctx.respond = false;
|
|
77
|
-
const eventStore =
|
|
166
|
+
const eventStore = this.mcpConfig.eventStore;
|
|
78
167
|
const self = this;
|
|
79
168
|
const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
80
|
-
sessionIdGenerator: () =>
|
|
169
|
+
sessionIdGenerator: () => this.mcpConfig.sessionIdGenerator(),
|
|
81
170
|
eventStore,
|
|
82
171
|
onsessioninitialized: async () => {
|
|
83
172
|
var _a;
|
|
@@ -115,7 +204,7 @@ class MCPControllerRegister {
|
|
|
115
204
|
if (transport) {
|
|
116
205
|
if (MCPControllerRegister.hooks.length > 0) {
|
|
117
206
|
for (const hook of MCPControllerRegister.hooks) {
|
|
118
|
-
await ((
|
|
207
|
+
await ((_d = hook.preHandle) === null || _d === void 0 ? void 0 : _d.call(hook, self.app.currentContext));
|
|
119
208
|
}
|
|
120
209
|
}
|
|
121
210
|
ctx.respond = false;
|
|
@@ -130,7 +219,7 @@ class MCPControllerRegister {
|
|
|
130
219
|
}
|
|
131
220
|
if (MCPControllerRegister.hooks.length > 0) {
|
|
132
221
|
for (const hook of MCPControllerRegister.hooks) {
|
|
133
|
-
const checked = await ((
|
|
222
|
+
const checked = await ((_e = hook.checkAndRunProxy) === null || _e === void 0 ? void 0 : _e.call(hook, self.app.currentContext, mcp_proxy_1.MCPProtocols.STREAM, sessionId));
|
|
134
223
|
if (checked) {
|
|
135
224
|
return;
|
|
136
225
|
}
|
|
@@ -141,13 +230,12 @@ class MCPControllerRegister {
|
|
|
141
230
|
};
|
|
142
231
|
Reflect.apply(allRouterFunc, this.router, [
|
|
143
232
|
'chairMcpStreamInit',
|
|
144
|
-
|
|
233
|
+
self.mcpConfig.streamPath,
|
|
145
234
|
...[],
|
|
146
235
|
initHandler,
|
|
147
236
|
]);
|
|
148
237
|
}
|
|
149
238
|
mcpServerInit() {
|
|
150
|
-
var _a;
|
|
151
239
|
const routerFunc = this.router.get;
|
|
152
240
|
// const aclMiddleware = aclMiddlewareFactory(this.controllerMeta, this.methodMeta);
|
|
153
241
|
// if (aclMiddleware) {
|
|
@@ -155,8 +243,8 @@ class MCPControllerRegister {
|
|
|
155
243
|
// }
|
|
156
244
|
const self = this;
|
|
157
245
|
const initHandler = async (ctx) => {
|
|
158
|
-
var _a
|
|
159
|
-
const transport = new sse_js_1.SSEServerTransport(self.
|
|
246
|
+
var _a;
|
|
247
|
+
const transport = new sse_js_1.SSEServerTransport(self.mcpConfig.sseMessagePath, ctx.res);
|
|
160
248
|
const id = transport.sessionId;
|
|
161
249
|
if (MCPControllerRegister.hooks.length > 0) {
|
|
162
250
|
for (const hook of MCPControllerRegister.hooks) {
|
|
@@ -172,7 +260,7 @@ class MCPControllerRegister {
|
|
|
172
260
|
clearInterval(intervalId);
|
|
173
261
|
self.sseConnections.delete(id);
|
|
174
262
|
}
|
|
175
|
-
},
|
|
263
|
+
}, self.mcpConfig.sseHeartTime);
|
|
176
264
|
self.sseConnections.set(id, { res: ctx.res, intervalId });
|
|
177
265
|
self.transports[id] = transport;
|
|
178
266
|
ctx.set({
|
|
@@ -185,7 +273,7 @@ class MCPControllerRegister {
|
|
|
185
273
|
};
|
|
186
274
|
Reflect.apply(routerFunc, this.router, [
|
|
187
275
|
'chairMcpInit',
|
|
188
|
-
|
|
276
|
+
self.mcpConfig.sseInitPath,
|
|
189
277
|
...[],
|
|
190
278
|
initHandler,
|
|
191
279
|
]);
|
|
@@ -206,7 +294,6 @@ class MCPControllerRegister {
|
|
|
206
294
|
};
|
|
207
295
|
}
|
|
208
296
|
mcpServerRegister() {
|
|
209
|
-
var _a;
|
|
210
297
|
const routerFunc = this.router.post;
|
|
211
298
|
const self = this;
|
|
212
299
|
// const aclMiddleware = aclMiddlewareFactory(this.controllerMeta, this.methodMeta);
|
|
@@ -253,7 +340,7 @@ class MCPControllerRegister {
|
|
|
253
340
|
};
|
|
254
341
|
Reflect.apply(routerFunc, this.router, [
|
|
255
342
|
'chairMcpMessage',
|
|
256
|
-
|
|
343
|
+
self.mcpConfig.sseMessagePath,
|
|
257
344
|
...[],
|
|
258
345
|
messageHander,
|
|
259
346
|
]);
|
|
@@ -302,6 +389,7 @@ class MCPControllerRegister {
|
|
|
302
389
|
};
|
|
303
390
|
args.push(handler);
|
|
304
391
|
this.mcpServer.prompt(...args);
|
|
392
|
+
this.statelessMcpServer.prompt(...args);
|
|
305
393
|
}
|
|
306
394
|
async mcpToolRegister(controllerProto, toolMeta) {
|
|
307
395
|
var _a, _b, _c, _d, _e;
|
|
@@ -347,6 +435,7 @@ class MCPControllerRegister {
|
|
|
347
435
|
};
|
|
348
436
|
args.push(handler);
|
|
349
437
|
this.mcpServer.tool(...args);
|
|
438
|
+
this.statelessMcpServer.tool(...args);
|
|
350
439
|
}
|
|
351
440
|
async mcpResourceRegister(controllerProto, resourceMeta) {
|
|
352
441
|
var _a;
|
|
@@ -370,9 +459,10 @@ class MCPControllerRegister {
|
|
|
370
459
|
};
|
|
371
460
|
args.push(handler);
|
|
372
461
|
this.mcpServer.resource(...args);
|
|
462
|
+
this.statelessMcpServer.resource(...args);
|
|
373
463
|
}
|
|
374
464
|
async register() {
|
|
375
|
-
var _a, _b;
|
|
465
|
+
var _a, _b, _c, _d;
|
|
376
466
|
const promptMap = new Map();
|
|
377
467
|
const resourceMap = new Map();
|
|
378
468
|
const toolMap = new Map();
|
|
@@ -397,6 +487,11 @@ class MCPControllerRegister {
|
|
|
397
487
|
name: (_a = this.controllerMeta.name) !== null && _a !== void 0 ? _a : `chair-mcp-${this.app.name}-server`,
|
|
398
488
|
version: (_b = this.controllerMeta.version) !== null && _b !== void 0 ? _b : '1.0.0',
|
|
399
489
|
}, { capabilities: { logging: {} } });
|
|
490
|
+
this.statelessMcpServer = new mcp_js_1.McpServer({
|
|
491
|
+
name: (_c = this.controllerMeta.name) !== null && _c !== void 0 ? _c : `chair-mcp-${this.app.name}-stateless-server`,
|
|
492
|
+
version: (_d = this.controllerMeta.version) !== null && _d !== void 0 ? _d : '1.0.0',
|
|
493
|
+
}, { capabilities: { logging: {} } });
|
|
494
|
+
this.mcpStatelessStreamServerInit();
|
|
400
495
|
this.mcpStreamServerInit();
|
|
401
496
|
this.mcpServerInit();
|
|
402
497
|
this.mcpServerRegister();
|
|
@@ -414,4 +509,4 @@ class MCPControllerRegister {
|
|
|
414
509
|
}
|
|
415
510
|
exports.MCPControllerRegister = MCPControllerRegister;
|
|
416
511
|
MCPControllerRegister.hooks = [];
|
|
417
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQ29udHJvbGxlclJlZ2lzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTUNQQ29udHJvbGxlclJlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLDhEQUFpQztBQUdqQyxzQ0FRcUI7QUFJckIsb0VBQTZFO0FBQzdFLDBGQUFtRztBQUNuRyxvRUFBb0U7QUFDcEUsMkdBQXFHO0FBQ3JHLGlFQUF5RjtBQUN6RixnREFBZ0Q7QUFFaEQsd0RBQWtDO0FBQ2xDLGdFQUF1QztBQWtCdkMsTUFBYSxxQkFBcUI7SUFjaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFtQixFQUFFLGNBQWtDLEVBQUUsR0FBZ0I7UUFDckYsSUFBQSxxQkFBTSxFQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUsscUJBQWMsQ0FBQyxHQUFHLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMscUJBQXFCLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLGNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUNELHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQVksTUFBb0IsRUFBRSxjQUFpQyxFQUFFLEdBQWdCO1FBbEI3RSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLCtCQUEwQixHQUFtQixFQUFFLENBQUM7UUFDeEQsZUFBVSxHQUF1QyxFQUFFLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBK0QsQ0FBQztRQUd4RixxQkFBZ0IsR0FBa0QsRUFBRSxDQUFDO1FBYW5FLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLG1C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
|
|
512
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTUNQQ29udHJvbGxlclJlZ2lzdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTUNQQ29udHJvbGxlclJlZ2lzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLDhEQUFpQztBQUNqQyx5Q0FBa0U7QUFDbEUsdUNBQWtDO0FBRWxDLHNDQVFxQjtBQUlyQixvRUFBNkU7QUFDN0UsMEZBQW1HO0FBQ25HLG9FQUFvRTtBQUNwRSxpRUFBeUY7QUFDekYsZ0RBQWdEO0FBRWhELHdEQUFrQztBQUNsQyxnRUFBdUM7QUFFdkMsMkNBQXdDO0FBa0J4QyxNQUFhLHFCQUFxQjtJQWlCaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFtQixFQUFFLGNBQWtDLEVBQUUsR0FBZ0I7UUFDckYsSUFBQSxxQkFBTSxFQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUsscUJBQWMsQ0FBQyxHQUFHLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEMscUJBQXFCLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQXFCLENBQUMsS0FBSyxFQUFFLGNBQW1DLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUNELHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7SUFDeEMsQ0FBQztJQUVELFlBQVksTUFBb0IsRUFBRSxjQUFpQyxFQUFFLEdBQWdCO1FBckI3RSxxQkFBZ0IsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLCtCQUEwQixHQUFtQixFQUFFLENBQUM7UUFDeEQsZUFBVSxHQUF1QyxFQUFFLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBK0QsQ0FBQztRQU14RixxQkFBZ0IsR0FBa0QsRUFBRSxDQUFDO1FBYW5FLElBQUksQ0FBQyxHQUFHLEdBQUcs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
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"tegg"
|
|
8
8
|
]
|
|
9
9
|
},
|
|
10
|
-
"version": "3.
|
|
10
|
+
"version": "3.56.1",
|
|
11
11
|
"description": "controller decorator for egg",
|
|
12
12
|
"keywords": [
|
|
13
13
|
"egg",
|
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
"files": [
|
|
20
20
|
"app.js",
|
|
21
21
|
"app.d.ts",
|
|
22
|
+
"config/**/*.js",
|
|
23
|
+
"config/**/*.d.ts",
|
|
22
24
|
"lib/**/*.js",
|
|
23
25
|
"lib/**/*.d.ts",
|
|
24
26
|
"app/**/*.js",
|
|
@@ -46,14 +48,14 @@
|
|
|
46
48
|
"node": ">=14.0.0"
|
|
47
49
|
},
|
|
48
50
|
"dependencies": {
|
|
49
|
-
"@eggjs/egg-module-common": "^3.
|
|
50
|
-
"@eggjs/mcp-proxy": "^3.
|
|
51
|
+
"@eggjs/egg-module-common": "^3.56.1",
|
|
52
|
+
"@eggjs/mcp-proxy": "^3.56.1",
|
|
51
53
|
"@eggjs/router": "^2.0.1",
|
|
52
|
-
"@eggjs/tegg": "^3.
|
|
53
|
-
"@eggjs/tegg-common-util": "^3.
|
|
54
|
-
"@eggjs/tegg-loader": "^3.
|
|
55
|
-
"@eggjs/tegg-metadata": "^3.
|
|
56
|
-
"@eggjs/tegg-runtime": "^3.
|
|
54
|
+
"@eggjs/tegg": "^3.56.1",
|
|
55
|
+
"@eggjs/tegg-common-util": "^3.56.1",
|
|
56
|
+
"@eggjs/tegg-loader": "^3.56.1",
|
|
57
|
+
"@eggjs/tegg-metadata": "^3.56.1",
|
|
58
|
+
"@eggjs/tegg-runtime": "^3.56.1",
|
|
57
59
|
"@modelcontextprotocol/sdk": "^1.10.0",
|
|
58
60
|
"content-type": "^1.0.5",
|
|
59
61
|
"egg-errors": "^2.3.0",
|
|
@@ -64,9 +66,9 @@
|
|
|
64
66
|
"sdk-base": "^4.2.0"
|
|
65
67
|
},
|
|
66
68
|
"devDependencies": {
|
|
67
|
-
"@eggjs/module-test-util": "^3.
|
|
68
|
-
"@eggjs/tegg-config": "^3.
|
|
69
|
-
"@eggjs/tegg-plugin": "^3.
|
|
69
|
+
"@eggjs/module-test-util": "^3.56.1",
|
|
70
|
+
"@eggjs/tegg-config": "^3.56.1",
|
|
71
|
+
"@eggjs/tegg-plugin": "^3.56.1",
|
|
70
72
|
"@types/mocha": "^10.0.1",
|
|
71
73
|
"@types/node": "^20.2.4",
|
|
72
74
|
"cross-env": "^7.0.3",
|
|
@@ -80,5 +82,5 @@
|
|
|
80
82
|
"publishConfig": {
|
|
81
83
|
"access": "public"
|
|
82
84
|
},
|
|
83
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "25d3db03c6471c1bc11433fd09352bddf451aa14"
|
|
84
86
|
}
|