import type { Application, Context } from 'egg'; import http, { ServerResponse } from 'node:http'; import { ControllerMetadata, MCPControllerMeta, MCPPromptMeta, MCPToolMeta, EggContext, EggObjectName, MCPResourceMeta, MCPProtocols } from '@eggjs/tegg'; import { EggPrototype } from '@eggjs/tegg-metadata'; import { EggContainerFactory, EggObject } from '@eggjs/tegg-runtime'; import { ControllerRegister } from '../../ControllerRegister'; import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { JSONRPCMessage } from '@modelcontextprotocol/sdk/types.js'; import compose from 'koa-compose'; import { MCPConfig } from './MCPConfig'; import { MCPServerHelper } from './MCPServerHelper'; import { Server } from '@modelcontextprotocol/sdk/server/index.js'; export interface MCPControllerHook { preSSEInitHandle?: (ctx: Context, transport: SSEServerTransport, register: MCPControllerRegister) => Promise; preHandleInitHandle?: (ctx: Context) => Promise; preHandle?: (ctx: Context) => Promise; onStreamSessionInitialized?: (ctx: Context, transport: StreamableHTTPServerTransport, server: McpServer, register: MCPControllerRegister) => Promise; preProxy?: (ctx: Context, proxyReq: http.IncomingMessage, proxyResp: http.ServerResponse) => Promise; schemaLoader?: (controllerMeta: MCPControllerMeta, meta: MCPPromptMeta | MCPToolMeta) => Promise['2'] | Parameters['2']>; checkAndRunProxy?: (ctx: Context, type: MCPProtocols, sessionId: string) => Promise; middlewareStart?: (ctx: Context) => Promise; middlewareEnd?: (ctx: Context) => Promise; middlewareError?: (ctx: Context, e: Error) => Promise; } interface ServerRegisterRecord { getOrCreateEggObject: (proto: EggPrototype, name?: EggObjectName) => Promise; proto: EggPrototype; meta: T; } declare class InnerSSEServerTransport extends SSEServerTransport { send(message: JSONRPCMessage): Promise; } export declare class MCPControllerRegister implements ControllerRegister { static instance?: MCPControllerRegister; readonly app: Application; readonly eggContainerFactory: typeof EggContainerFactory; private readonly router; private controllerProtos; private registeredControllerProtos; transports: Record; sseConnections: Map; mcpServerHelperMap: Record MCPServerHelper>; private controllerMeta; mcpConfig: MCPConfig; streamTransports: Record; sseTransportsRequestMap: Map | null) => void; reject: (reason?: any) => void; }>>; static hooks: MCPControllerHook[]; globalMiddlewares: compose.ComposedMiddleware; registerMap: Record[]; prompts: ServerRegisterRecord[]; resources: ServerRegisterRecord[]; }>; pingIntervals: Record; static create(proto: EggPrototype, controllerMeta: ControllerMetadata, app: Application): MCPControllerRegister; constructor(_proto: EggPrototype, controllerMeta: MCPControllerMeta, app: Application); static addHook(hook: MCPControllerHook): void; static deleteHook(hook: MCPControllerHook): void; static connectStatelessStreamTransport(_name?: string): Promise; static clean(): void; mcpStatelessStreamServerInit(name?: string): void; mcpStreamServerInit(name?: string): void; mcpServerInit(name?: string): void; clearSseMcpServer(transport: SSEServerTransport): Promise; waitResponseClosed(res: ServerResponse): Promise; clearStreamMcpServer(sessionId: string): void; sseCtxStorageRun(ctx: Context, transport: SSEServerTransport, name?: string): void; mcpServerRegister(name?: string): void; getGlobalMiddleware(): void; mcpServerPing(server: Server, sessionId: string, name?: string): void; register(): Promise; } export {};