Skip to content

Commit 33941b3

Browse files
committed
fix: response error write
1 parent 4a6d17d commit 33941b3

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

plugin/controller/lib/impl/mcp/MCPControllerRegister.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export interface MCPControllerHook {
3535
onStreamSessionInitialized?: (ctx: Context, transport: StreamableHTTPServerTransport, register: MCPControllerRegister) => Promise<void>
3636

3737
// COMMON
38-
preProxy?: (ctx: Context, proxyReq: Parameters<typeof http.createServer>['0'], proxyResp: Parameters<typeof http.createServer>['1']) => Promise<void>
38+
preProxy?: (ctx: Context, proxyReq: http.IncomingMessage, proxyResp: http.ServerResponse) => Promise<void>
3939
schemaLoader?: (controllerMeta: MCPControllerMeta, meta: MCPPromptMeta | MCPToolMeta) => Promise<Parameters<McpServer['tool']>['2'] | Parameters<McpServer['prompt']>['2']>
4040
checkAndRunProxy?: (ctx: Context, type: MCPProtocols, sessionId: string) => Promise<boolean>;
4141
}
@@ -195,7 +195,6 @@ export class MCPControllerRegister implements ControllerRegister {
195195
// }
196196
const self = this;
197197
const initHandler = async (ctx: Context) => {
198-
ctx.respond = false;
199198
const transport = new SSEServerTransport(self.app.config.mcp.sseMessagePath, ctx.res);
200199
const id = transport.sessionId;
201200
if (MCPControllerRegister.hooks.length > 0) {
@@ -218,6 +217,7 @@ export class MCPControllerRegister implements ControllerRegister {
218217
'content-type': 'text/event-stream',
219218
'transfer-encoding': 'chunked',
220219
});
220+
ctx.respond = false;
221221
await self.mcpServer.connect(transport);
222222
return self.sseCtxStorageRun.bind(self)(ctx, transport);
223223
};

plugin/mcp-proxy/index.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ export class MCPProxyApiClient extends APIClientBase {
142142
async onStreamSessionInitialized(_ctx, transport, self) {
143143
const sessionId = transport.sessionId!;
144144
self.streamTransports[sessionId] = transport;
145-
apiClient.setProxyHandler(MCPProtocols.STREAM, async (req, res) => {
145+
apiClient.setProxyHandler(MCPProtocols.STREAM, async (req: http.IncomingMessage, res: http.ServerResponse) => {
146146
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
147147
// @ts-ignore
148148
self.app.RequestClass = EggRequest;
@@ -157,43 +157,46 @@ export class MCPProxyApiClient extends APIClientBase {
157157
}
158158
const sessionId = req.headers['mcp-session-id'] as string | undefined;
159159
if (!sessionId) {
160-
res.status(500).json({
160+
res.writeHead(500, { 'content-type': 'application/json' });
161+
res.end(JSON.stringify({
161162
jsonrpc: '2.0',
162163
error: {
163164
code: -32603,
164165
message: 'session id not have and run in proxy',
165166
},
166167
id: null,
167-
});
168+
}));
168169
} else {
169170
let transport: StreamableHTTPServerTransport;
170171
const existingTransport = self.streamTransports[sessionId];
171172
if (existingTransport instanceof StreamableHTTPServerTransport) {
172173
transport = existingTransport;
173174
} else {
174-
res.status(400).json({
175+
res.writeHead(400, { 'content-type': 'application/json' });
176+
res.end(JSON.stringify({
175177
jsonrpc: '2.0',
176178
error: {
177179
code: -32000,
178180
message: 'Bad Request: Session exists but uses a different transport protocol',
179181
},
180182
id: null,
181-
});
183+
}));
182184
return;
183185
}
184186
if (transport) {
185187
await self.app.ctxStorage.run(ctx, async () => {
186188
await transport.handleRequest(ctx.req, ctx.res);
187189
});
188190
} else {
189-
res.status(404).send({
191+
res.writeHead(400, { 'content-type': 'application/json' });
192+
res.end(JSON.stringify({
190193
jsonrpc: '2.0',
191194
error: {
192195
code: -32602,
193196
message: 'Bad Request: No transport found for sessionId',
194197
},
195198
id: null,
196-
});
199+
}));
197200
}
198201
}
199202
});

0 commit comments

Comments
 (0)