1
1
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js" ;
2
- import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js' ;
3
2
import { InMemoryEventStore } from '@modelcontextprotocol/sdk/examples/shared/inMemoryEventStore.js' ;
4
3
import express , { Request , Response } from "express" ;
5
4
import { createServer } from "./everything.js" ;
6
5
import { randomUUID } from 'node:crypto' ;
7
6
8
7
const app = express ( ) ;
9
8
10
- app . use ( express . json ( ) ) ;
11
-
12
9
const { server, cleanup } = createServer ( ) ;
13
10
14
11
const transports : { [ sessionId : string ] : StreamableHTTPServerTransport } = { } ;
15
12
16
13
app . post ( '/mcp' , async ( req : Request , res : Response ) => {
17
- console . log ( 'Received MCP request:' , req . body ) ;
14
+ console . log ( 'Received MCP POST request' ) ;
18
15
try {
19
16
// Check for existing session ID
20
17
const sessionId = req . headers [ 'mcp-session-id' ] as string | undefined ;
@@ -23,7 +20,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
23
20
if ( sessionId && transports [ sessionId ] ) {
24
21
// Reuse existing transport
25
22
transport = transports [ sessionId ] ;
26
- } else if ( ! sessionId && isInitializeRequest ( req . body ) ) {
23
+ } else if ( ! sessionId ) {
27
24
// New initialization request
28
25
const eventStore = new InMemoryEventStore ( ) ;
29
26
transport = new StreamableHTTPServerTransport ( {
@@ -50,7 +47,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
50
47
// so responses can flow back through the same transport
51
48
await server . connect ( transport ) ;
52
49
53
- await transport . handleRequest ( req , res , req . body ) ;
50
+ await transport . handleRequest ( req , res ) ;
54
51
return ; // Already handled
55
52
} else {
56
53
// Invalid request - no session ID or not initialization request
@@ -67,7 +64,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
67
64
68
65
// Handle the request with existing transport - no need to reconnect
69
66
// The existing transport is already connected to the server
70
- await transport . handleRequest ( req , res , req . body ) ;
67
+ await transport . handleRequest ( req , res ) ;
71
68
} catch ( error ) {
72
69
console . error ( 'Error handling MCP request:' , error ) ;
73
70
if ( ! res . headersSent ) {
@@ -86,6 +83,7 @@ app.post('/mcp', async (req: Request, res: Response) => {
86
83
87
84
// Handle GET requests for SSE streams (using built-in support from StreamableHTTP)
88
85
app . get ( '/mcp' , async ( req : Request , res : Response ) => {
86
+ console . log ( 'Received MCP GET request' ) ;
89
87
const sessionId = req . headers [ 'mcp-session-id' ] as string | undefined ;
90
88
if ( ! sessionId || ! transports [ sessionId ] ) {
91
89
res . status ( 400 ) . json ( {
0 commit comments