@modelcontextprotocol/sdk 1.9.0 → 1.10.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.
Files changed (144) hide show
  1. package/README.md +321 -28
  2. package/dist/cjs/client/index.d.ts.map +1 -1
  3. package/dist/cjs/client/index.js +5 -0
  4. package/dist/cjs/client/index.js.map +1 -1
  5. package/dist/cjs/client/streamableHttp.d.ts +124 -0
  6. package/dist/cjs/client/streamableHttp.d.ts.map +1 -0
  7. package/dist/cjs/client/streamableHttp.js +353 -0
  8. package/dist/cjs/client/streamableHttp.js.map +1 -0
  9. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts +2 -0
  10. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  11. package/dist/cjs/examples/client/simpleStreamableHttp.js +448 -0
  12. package/dist/cjs/examples/client/simpleStreamableHttp.js.map +1 -0
  13. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  14. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  15. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js +168 -0
  16. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  17. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  18. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  19. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +139 -0
  20. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  21. package/dist/cjs/examples/server/simpleSseServer.d.ts +2 -0
  22. package/dist/cjs/examples/server/simpleSseServer.d.ts.map +1 -0
  23. package/dist/cjs/examples/server/simpleSseServer.js +148 -0
  24. package/dist/cjs/examples/server/simpleSseServer.js.map +1 -0
  25. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.d.ts +2 -0
  26. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.d.ts.map +1 -0
  27. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js +149 -0
  28. package/dist/cjs/examples/server/simpleStatelessStreamableHttp.js.map +1 -0
  29. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts +2 -0
  30. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  31. package/dist/cjs/examples/server/simpleStreamableHttp.js +250 -0
  32. package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -0
  33. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  34. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  35. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +229 -0
  36. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  37. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  38. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  39. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +112 -0
  40. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  41. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts +31 -0
  42. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  43. package/dist/cjs/examples/shared/inMemoryEventStore.js +69 -0
  44. package/dist/cjs/examples/shared/inMemoryEventStore.js.map +1 -0
  45. package/dist/cjs/inMemory.d.ts +13 -3
  46. package/dist/cjs/inMemory.d.ts.map +1 -1
  47. package/dist/cjs/inMemory.js +9 -7
  48. package/dist/cjs/inMemory.js.map +1 -1
  49. package/dist/cjs/server/auth/types.d.ts +5 -0
  50. package/dist/cjs/server/auth/types.d.ts.map +1 -1
  51. package/dist/cjs/server/mcp.d.ts +100 -19
  52. package/dist/cjs/server/mcp.d.ts.map +1 -1
  53. package/dist/cjs/server/mcp.js +154 -12
  54. package/dist/cjs/server/mcp.js.map +1 -1
  55. package/dist/cjs/server/sse.d.ts +10 -3
  56. package/dist/cjs/server/sse.d.ts.map +1 -1
  57. package/dist/cjs/server/sse.js +13 -4
  58. package/dist/cjs/server/sse.js.map +1 -1
  59. package/dist/cjs/server/streamableHttp.d.ts +146 -0
  60. package/dist/cjs/server/streamableHttp.d.ts.map +1 -0
  61. package/dist/cjs/server/streamableHttp.js +538 -0
  62. package/dist/cjs/server/streamableHttp.js.map +1 -0
  63. package/dist/cjs/shared/protocol.d.ts +31 -5
  64. package/dist/cjs/shared/protocol.d.ts.map +1 -1
  65. package/dist/cjs/shared/protocol.js +23 -15
  66. package/dist/cjs/shared/protocol.js.map +1 -1
  67. package/dist/cjs/shared/transport.d.ts +32 -3
  68. package/dist/cjs/shared/transport.d.ts.map +1 -1
  69. package/dist/cjs/types.d.ts +6 -0
  70. package/dist/cjs/types.d.ts.map +1 -1
  71. package/dist/cjs/types.js +14 -2
  72. package/dist/cjs/types.js.map +1 -1
  73. package/dist/esm/client/index.d.ts.map +1 -1
  74. package/dist/esm/client/index.js +5 -0
  75. package/dist/esm/client/index.js.map +1 -1
  76. package/dist/esm/client/streamableHttp.d.ts +124 -0
  77. package/dist/esm/client/streamableHttp.d.ts.map +1 -0
  78. package/dist/esm/client/streamableHttp.js +348 -0
  79. package/dist/esm/client/streamableHttp.js.map +1 -0
  80. package/dist/esm/examples/client/simpleStreamableHttp.d.ts +2 -0
  81. package/dist/esm/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  82. package/dist/esm/examples/client/simpleStreamableHttp.js +446 -0
  83. package/dist/esm/examples/client/simpleStreamableHttp.js.map +1 -0
  84. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  85. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  86. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js +166 -0
  87. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  88. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  89. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  90. package/dist/esm/examples/server/jsonResponseStreamableHttp.js +134 -0
  91. package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  92. package/dist/esm/examples/server/simpleSseServer.d.ts +2 -0
  93. package/dist/esm/examples/server/simpleSseServer.d.ts.map +1 -0
  94. package/dist/esm/examples/server/simpleSseServer.js +143 -0
  95. package/dist/esm/examples/server/simpleSseServer.js.map +1 -0
  96. package/dist/esm/examples/server/simpleStatelessStreamableHttp.d.ts +2 -0
  97. package/dist/esm/examples/server/simpleStatelessStreamableHttp.d.ts.map +1 -0
  98. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js +144 -0
  99. package/dist/esm/examples/server/simpleStatelessStreamableHttp.js.map +1 -0
  100. package/dist/esm/examples/server/simpleStreamableHttp.d.ts +2 -0
  101. package/dist/esm/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  102. package/dist/esm/examples/server/simpleStreamableHttp.js +245 -0
  103. package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -0
  104. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  105. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  106. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +224 -0
  107. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  108. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  109. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  110. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +107 -0
  111. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  112. package/dist/esm/examples/shared/inMemoryEventStore.d.ts +31 -0
  113. package/dist/esm/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  114. package/dist/esm/examples/shared/inMemoryEventStore.js +65 -0
  115. package/dist/esm/examples/shared/inMemoryEventStore.js.map +1 -0
  116. package/dist/esm/inMemory.d.ts +13 -3
  117. package/dist/esm/inMemory.d.ts.map +1 -1
  118. package/dist/esm/inMemory.js +9 -7
  119. package/dist/esm/inMemory.js.map +1 -1
  120. package/dist/esm/server/auth/types.d.ts +5 -0
  121. package/dist/esm/server/auth/types.d.ts.map +1 -1
  122. package/dist/esm/server/mcp.d.ts +100 -19
  123. package/dist/esm/server/mcp.d.ts.map +1 -1
  124. package/dist/esm/server/mcp.js +154 -12
  125. package/dist/esm/server/mcp.js.map +1 -1
  126. package/dist/esm/server/sse.d.ts +10 -3
  127. package/dist/esm/server/sse.d.ts.map +1 -1
  128. package/dist/esm/server/sse.js +13 -4
  129. package/dist/esm/server/sse.js.map +1 -1
  130. package/dist/esm/server/streamableHttp.d.ts +146 -0
  131. package/dist/esm/server/streamableHttp.d.ts.map +1 -0
  132. package/dist/esm/server/streamableHttp.js +531 -0
  133. package/dist/esm/server/streamableHttp.js.map +1 -0
  134. package/dist/esm/shared/protocol.d.ts +31 -5
  135. package/dist/esm/shared/protocol.d.ts.map +1 -1
  136. package/dist/esm/shared/protocol.js +24 -16
  137. package/dist/esm/shared/protocol.js.map +1 -1
  138. package/dist/esm/shared/transport.d.ts +32 -3
  139. package/dist/esm/shared/transport.d.ts.map +1 -1
  140. package/dist/esm/types.d.ts +6 -0
  141. package/dist/esm/types.d.ts.map +1 -1
  142. package/dist/esm/types.js +6 -0
  143. package/dist/esm/types.js.map +1 -1
  144. package/package.json +1 -1
@@ -0,0 +1,531 @@
1
+ import { isInitializeRequest, isJSONRPCError, isJSONRPCRequest, isJSONRPCResponse, JSONRPCMessageSchema } from "../types.js";
2
+ import getRawBody from "raw-body";
3
+ import contentType from "content-type";
4
+ import { randomUUID } from "node:crypto";
5
+ const MAXIMUM_MESSAGE_SIZE = "4mb";
6
+ /**
7
+ * Server transport for Streamable HTTP: this implements the MCP Streamable HTTP transport specification.
8
+ * It supports both SSE streaming and direct HTTP responses.
9
+ *
10
+ * Usage example:
11
+ *
12
+ * ```typescript
13
+ * // Stateful mode - server sets the session ID
14
+ * const statefulTransport = new StreamableHTTPServerTransport({
15
+ * sessionId: randomUUID(),
16
+ * });
17
+ *
18
+ * // Stateless mode - explicitly set session ID to undefined
19
+ * const statelessTransport = new StreamableHTTPServerTransport({
20
+ * sessionId: undefined,
21
+ * });
22
+ *
23
+ * // Using with pre-parsed request body
24
+ * app.post('/mcp', (req, res) => {
25
+ * transport.handleRequest(req, res, req.body);
26
+ * });
27
+ * ```
28
+ *
29
+ * In stateful mode:
30
+ * - Session ID is generated and included in response headers
31
+ * - Session ID is always included in initialization responses
32
+ * - Requests with invalid session IDs are rejected with 404 Not Found
33
+ * - Non-initialization requests without a session ID are rejected with 400 Bad Request
34
+ * - State is maintained in-memory (connections, message history)
35
+ *
36
+ * In stateless mode:
37
+ * - Session ID is only included in initialization responses
38
+ * - No session validation is performed
39
+ */
40
+ export class StreamableHTTPServerTransport {
41
+ constructor(options) {
42
+ var _a;
43
+ this._started = false;
44
+ this._streamMapping = new Map();
45
+ this._requestToStreamMapping = new Map();
46
+ this._requestResponseMap = new Map();
47
+ this._initialized = false;
48
+ this._enableJsonResponse = false;
49
+ this._standaloneSseStreamId = '_GET_stream';
50
+ this.sessionIdGenerator = options.sessionIdGenerator;
51
+ this._enableJsonResponse = (_a = options.enableJsonResponse) !== null && _a !== void 0 ? _a : false;
52
+ this._eventStore = options.eventStore;
53
+ this._onsessioninitialized = options.onsessioninitialized;
54
+ }
55
+ /**
56
+ * Starts the transport. This is required by the Transport interface but is a no-op
57
+ * for the Streamable HTTP transport as connections are managed per-request.
58
+ */
59
+ async start() {
60
+ if (this._started) {
61
+ throw new Error("Transport already started");
62
+ }
63
+ this._started = true;
64
+ }
65
+ /**
66
+ * Handles an incoming HTTP request, whether GET or POST
67
+ */
68
+ async handleRequest(req, res, parsedBody) {
69
+ if (req.method === "POST") {
70
+ await this.handlePostRequest(req, res, parsedBody);
71
+ }
72
+ else if (req.method === "GET") {
73
+ await this.handleGetRequest(req, res);
74
+ }
75
+ else if (req.method === "DELETE") {
76
+ await this.handleDeleteRequest(req, res);
77
+ }
78
+ else {
79
+ await this.handleUnsupportedRequest(res);
80
+ }
81
+ }
82
+ /**
83
+ * Handles GET requests for SSE stream
84
+ */
85
+ async handleGetRequest(req, res) {
86
+ // The client MUST include an Accept header, listing text/event-stream as a supported content type.
87
+ const acceptHeader = req.headers.accept;
88
+ if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes("text/event-stream"))) {
89
+ res.writeHead(406).end(JSON.stringify({
90
+ jsonrpc: "2.0",
91
+ error: {
92
+ code: -32000,
93
+ message: "Not Acceptable: Client must accept text/event-stream"
94
+ },
95
+ id: null
96
+ }));
97
+ return;
98
+ }
99
+ // If an Mcp-Session-Id is returned by the server during initialization,
100
+ // clients using the Streamable HTTP transport MUST include it
101
+ // in the Mcp-Session-Id header on all of their subsequent HTTP requests.
102
+ if (!this.validateSession(req, res)) {
103
+ return;
104
+ }
105
+ // Handle resumability: check for Last-Event-ID header
106
+ if (this._eventStore) {
107
+ const lastEventId = req.headers['last-event-id'];
108
+ if (lastEventId) {
109
+ await this.replayEvents(lastEventId, res);
110
+ return;
111
+ }
112
+ }
113
+ // The server MUST either return Content-Type: text/event-stream in response to this HTTP GET,
114
+ // or else return HTTP 405 Method Not Allowed
115
+ const headers = {
116
+ "Content-Type": "text/event-stream",
117
+ "Cache-Control": "no-cache, no-transform",
118
+ Connection: "keep-alive",
119
+ };
120
+ // After initialization, always include the session ID if we have one
121
+ if (this.sessionId !== undefined) {
122
+ headers["mcp-session-id"] = this.sessionId;
123
+ }
124
+ // Check if there's already an active standalone SSE stream for this session
125
+ if (this._streamMapping.get(this._standaloneSseStreamId) !== undefined) {
126
+ // Only one GET SSE stream is allowed per session
127
+ res.writeHead(409).end(JSON.stringify({
128
+ jsonrpc: "2.0",
129
+ error: {
130
+ code: -32000,
131
+ message: "Conflict: Only one SSE stream is allowed per session"
132
+ },
133
+ id: null
134
+ }));
135
+ return;
136
+ }
137
+ // We need to send headers immediately as messages will arrive much later,
138
+ // otherwise the client will just wait for the first message
139
+ res.writeHead(200, headers).flushHeaders();
140
+ // Assign the response to the standalone SSE stream
141
+ this._streamMapping.set(this._standaloneSseStreamId, res);
142
+ // Set up close handler for client disconnects
143
+ res.on("close", () => {
144
+ this._streamMapping.delete(this._standaloneSseStreamId);
145
+ });
146
+ }
147
+ /**
148
+ * Replays events that would have been sent after the specified event ID
149
+ * Only used when resumability is enabled
150
+ */
151
+ async replayEvents(lastEventId, res) {
152
+ var _a, _b;
153
+ if (!this._eventStore) {
154
+ return;
155
+ }
156
+ try {
157
+ const headers = {
158
+ "Content-Type": "text/event-stream",
159
+ "Cache-Control": "no-cache, no-transform",
160
+ Connection: "keep-alive",
161
+ };
162
+ if (this.sessionId !== undefined) {
163
+ headers["mcp-session-id"] = this.sessionId;
164
+ }
165
+ res.writeHead(200, headers).flushHeaders();
166
+ const streamId = await ((_a = this._eventStore) === null || _a === void 0 ? void 0 : _a.replayEventsAfter(lastEventId, {
167
+ send: async (eventId, message) => {
168
+ var _a;
169
+ if (!this.writeSSEEvent(res, message, eventId)) {
170
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, new Error("Failed replay events"));
171
+ res.end();
172
+ }
173
+ }
174
+ }));
175
+ this._streamMapping.set(streamId, res);
176
+ }
177
+ catch (error) {
178
+ (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);
179
+ }
180
+ }
181
+ /**
182
+ * Writes an event to the SSE stream with proper formatting
183
+ */
184
+ writeSSEEvent(res, message, eventId) {
185
+ let eventData = `event: message\n`;
186
+ // Include event ID if provided - this is important for resumability
187
+ if (eventId) {
188
+ eventData += `id: ${eventId}\n`;
189
+ }
190
+ eventData += `data: ${JSON.stringify(message)}\n\n`;
191
+ return res.write(eventData);
192
+ }
193
+ /**
194
+ * Handles unsupported requests (PUT, PATCH, etc.)
195
+ */
196
+ async handleUnsupportedRequest(res) {
197
+ res.writeHead(405, {
198
+ "Allow": "GET, POST, DELETE"
199
+ }).end(JSON.stringify({
200
+ jsonrpc: "2.0",
201
+ error: {
202
+ code: -32000,
203
+ message: "Method not allowed."
204
+ },
205
+ id: null
206
+ }));
207
+ }
208
+ /**
209
+ * Handles POST requests containing JSON-RPC messages
210
+ */
211
+ async handlePostRequest(req, res, parsedBody) {
212
+ var _a, _b, _c, _d, _e;
213
+ try {
214
+ // Validate the Accept header
215
+ const acceptHeader = req.headers.accept;
216
+ // The client MUST include an Accept header, listing both application/json and text/event-stream as supported content types.
217
+ if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes("application/json")) || !acceptHeader.includes("text/event-stream")) {
218
+ res.writeHead(406).end(JSON.stringify({
219
+ jsonrpc: "2.0",
220
+ error: {
221
+ code: -32000,
222
+ message: "Not Acceptable: Client must accept both application/json and text/event-stream"
223
+ },
224
+ id: null
225
+ }));
226
+ return;
227
+ }
228
+ const ct = req.headers["content-type"];
229
+ if (!ct || !ct.includes("application/json")) {
230
+ res.writeHead(415).end(JSON.stringify({
231
+ jsonrpc: "2.0",
232
+ error: {
233
+ code: -32000,
234
+ message: "Unsupported Media Type: Content-Type must be application/json"
235
+ },
236
+ id: null
237
+ }));
238
+ return;
239
+ }
240
+ let rawMessage;
241
+ if (parsedBody !== undefined) {
242
+ rawMessage = parsedBody;
243
+ }
244
+ else {
245
+ const parsedCt = contentType.parse(ct);
246
+ const body = await getRawBody(req, {
247
+ limit: MAXIMUM_MESSAGE_SIZE,
248
+ encoding: (_a = parsedCt.parameters.charset) !== null && _a !== void 0 ? _a : "utf-8",
249
+ });
250
+ rawMessage = JSON.parse(body.toString());
251
+ }
252
+ let messages;
253
+ // handle batch and single messages
254
+ if (Array.isArray(rawMessage)) {
255
+ messages = rawMessage.map(msg => JSONRPCMessageSchema.parse(msg));
256
+ }
257
+ else {
258
+ messages = [JSONRPCMessageSchema.parse(rawMessage)];
259
+ }
260
+ // Check if this is an initialization request
261
+ // https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/lifecycle/
262
+ const isInitializationRequest = messages.some(isInitializeRequest);
263
+ if (isInitializationRequest) {
264
+ // If it's a server with session management and the session ID is already set we should reject the request
265
+ // to avoid re-initialization.
266
+ if (this._initialized && this.sessionId !== undefined) {
267
+ res.writeHead(400).end(JSON.stringify({
268
+ jsonrpc: "2.0",
269
+ error: {
270
+ code: -32600,
271
+ message: "Invalid Request: Server already initialized"
272
+ },
273
+ id: null
274
+ }));
275
+ return;
276
+ }
277
+ if (messages.length > 1) {
278
+ res.writeHead(400).end(JSON.stringify({
279
+ jsonrpc: "2.0",
280
+ error: {
281
+ code: -32600,
282
+ message: "Invalid Request: Only one initialization request is allowed"
283
+ },
284
+ id: null
285
+ }));
286
+ return;
287
+ }
288
+ this.sessionId = (_b = this.sessionIdGenerator) === null || _b === void 0 ? void 0 : _b.call(this);
289
+ this._initialized = true;
290
+ // If we have a session ID and an onsessioninitialized handler, call it immediately
291
+ // This is needed in cases where the server needs to keep track of multiple sessions
292
+ if (this.sessionId && this._onsessioninitialized) {
293
+ this._onsessioninitialized(this.sessionId);
294
+ }
295
+ }
296
+ // If an Mcp-Session-Id is returned by the server during initialization,
297
+ // clients using the Streamable HTTP transport MUST include it
298
+ // in the Mcp-Session-Id header on all of their subsequent HTTP requests.
299
+ if (!isInitializationRequest && !this.validateSession(req, res)) {
300
+ return;
301
+ }
302
+ // check if it contains requests
303
+ const hasRequests = messages.some(isJSONRPCRequest);
304
+ if (!hasRequests) {
305
+ // if it only contains notifications or responses, return 202
306
+ res.writeHead(202).end();
307
+ // handle each message
308
+ for (const message of messages) {
309
+ (_c = this.onmessage) === null || _c === void 0 ? void 0 : _c.call(this, message);
310
+ }
311
+ }
312
+ else if (hasRequests) {
313
+ // The default behavior is to use SSE streaming
314
+ // but in some cases server will return JSON responses
315
+ const streamId = randomUUID();
316
+ if (!this._enableJsonResponse) {
317
+ const headers = {
318
+ "Content-Type": "text/event-stream",
319
+ "Cache-Control": "no-cache",
320
+ Connection: "keep-alive",
321
+ };
322
+ // After initialization, always include the session ID if we have one
323
+ if (this.sessionId !== undefined) {
324
+ headers["mcp-session-id"] = this.sessionId;
325
+ }
326
+ res.writeHead(200, headers);
327
+ }
328
+ // Store the response for this request to send messages back through this connection
329
+ // We need to track by request ID to maintain the connection
330
+ for (const message of messages) {
331
+ if (isJSONRPCRequest(message)) {
332
+ this._streamMapping.set(streamId, res);
333
+ this._requestToStreamMapping.set(message.id, streamId);
334
+ }
335
+ }
336
+ // Set up close handler for client disconnects
337
+ res.on("close", () => {
338
+ this._streamMapping.delete(streamId);
339
+ });
340
+ // handle each message
341
+ for (const message of messages) {
342
+ (_d = this.onmessage) === null || _d === void 0 ? void 0 : _d.call(this, message);
343
+ }
344
+ // The server SHOULD NOT close the SSE stream before sending all JSON-RPC responses
345
+ // This will be handled by the send() method when responses are ready
346
+ }
347
+ }
348
+ catch (error) {
349
+ // return JSON-RPC formatted error
350
+ res.writeHead(400).end(JSON.stringify({
351
+ jsonrpc: "2.0",
352
+ error: {
353
+ code: -32700,
354
+ message: "Parse error",
355
+ data: String(error)
356
+ },
357
+ id: null
358
+ }));
359
+ (_e = this.onerror) === null || _e === void 0 ? void 0 : _e.call(this, error);
360
+ }
361
+ }
362
+ /**
363
+ * Handles DELETE requests to terminate sessions
364
+ */
365
+ async handleDeleteRequest(req, res) {
366
+ if (!this.validateSession(req, res)) {
367
+ return;
368
+ }
369
+ await this.close();
370
+ res.writeHead(200).end();
371
+ }
372
+ /**
373
+ * Validates session ID for non-initialization requests
374
+ * Returns true if the session is valid, false otherwise
375
+ */
376
+ validateSession(req, res) {
377
+ if (!this._initialized) {
378
+ // If the server has not been initialized yet, reject all requests
379
+ res.writeHead(400).end(JSON.stringify({
380
+ jsonrpc: "2.0",
381
+ error: {
382
+ code: -32000,
383
+ message: "Bad Request: Server not initialized"
384
+ },
385
+ id: null
386
+ }));
387
+ return false;
388
+ }
389
+ if (this.sessionId === undefined) {
390
+ // If the session ID is not set, the session management is disabled
391
+ // and we don't need to validate the session ID
392
+ return true;
393
+ }
394
+ const sessionId = req.headers["mcp-session-id"];
395
+ if (!sessionId) {
396
+ // Non-initialization requests without a session ID should return 400 Bad Request
397
+ res.writeHead(400).end(JSON.stringify({
398
+ jsonrpc: "2.0",
399
+ error: {
400
+ code: -32000,
401
+ message: "Bad Request: Mcp-Session-Id header is required"
402
+ },
403
+ id: null
404
+ }));
405
+ return false;
406
+ }
407
+ else if (Array.isArray(sessionId)) {
408
+ res.writeHead(400).end(JSON.stringify({
409
+ jsonrpc: "2.0",
410
+ error: {
411
+ code: -32000,
412
+ message: "Bad Request: Mcp-Session-Id header must be a single value"
413
+ },
414
+ id: null
415
+ }));
416
+ return false;
417
+ }
418
+ else if (sessionId !== this.sessionId) {
419
+ // Reject requests with invalid session ID with 404 Not Found
420
+ res.writeHead(404).end(JSON.stringify({
421
+ jsonrpc: "2.0",
422
+ error: {
423
+ code: -32001,
424
+ message: "Session not found"
425
+ },
426
+ id: null
427
+ }));
428
+ return false;
429
+ }
430
+ return true;
431
+ }
432
+ async close() {
433
+ var _a;
434
+ // Close all SSE connections
435
+ this._streamMapping.forEach((response) => {
436
+ response.end();
437
+ });
438
+ this._streamMapping.clear();
439
+ // Clear any pending responses
440
+ this._requestResponseMap.clear();
441
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
442
+ }
443
+ async send(message, options) {
444
+ let requestId = options === null || options === void 0 ? void 0 : options.relatedRequestId;
445
+ if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
446
+ // If the message is a response, use the request ID from the message
447
+ requestId = message.id;
448
+ }
449
+ // Check if this message should be sent on the standalone SSE stream (no request ID)
450
+ // Ignore notifications from tools (which have relatedRequestId set)
451
+ // Those will be sent via dedicated response SSE streams
452
+ if (requestId === undefined) {
453
+ // For standalone SSE streams, we can only send requests and notifications
454
+ if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
455
+ throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");
456
+ }
457
+ const standaloneSse = this._streamMapping.get(this._standaloneSseStreamId);
458
+ if (standaloneSse === undefined) {
459
+ // The spec says the server MAY send messages on the stream, so it's ok to discard if no stream
460
+ return;
461
+ }
462
+ // Generate and store event ID if event store is provided
463
+ let eventId;
464
+ if (this._eventStore) {
465
+ // Stores the event and gets the generated event ID
466
+ eventId = await this._eventStore.storeEvent(this._standaloneSseStreamId, message);
467
+ }
468
+ // Send the message to the standalone SSE stream
469
+ this.writeSSEEvent(standaloneSse, message, eventId);
470
+ return;
471
+ }
472
+ // Get the response for this request
473
+ const streamId = this._requestToStreamMapping.get(requestId);
474
+ const response = this._streamMapping.get(streamId);
475
+ if (!streamId) {
476
+ throw new Error(`No connection established for request ID: ${String(requestId)}`);
477
+ }
478
+ if (!this._enableJsonResponse) {
479
+ // For SSE responses, generate event ID if event store is provided
480
+ let eventId;
481
+ if (this._eventStore) {
482
+ eventId = await this._eventStore.storeEvent(streamId, message);
483
+ }
484
+ if (response) {
485
+ // Write the event to the response stream
486
+ this.writeSSEEvent(response, message, eventId);
487
+ }
488
+ }
489
+ if (isJSONRPCResponse(message)) {
490
+ this._requestResponseMap.set(requestId, message);
491
+ const relatedIds = Array.from(this._requestToStreamMapping.entries())
492
+ .filter(([_, streamId]) => this._streamMapping.get(streamId) === response)
493
+ .map(([id]) => id);
494
+ // Check if we have responses for all requests using this connection
495
+ const allResponsesReady = relatedIds.every(id => this._requestResponseMap.has(id));
496
+ if (allResponsesReady) {
497
+ if (!response) {
498
+ throw new Error(`No connection established for request ID: ${String(requestId)}`);
499
+ }
500
+ if (this._enableJsonResponse) {
501
+ // All responses ready, send as JSON
502
+ const headers = {
503
+ 'Content-Type': 'application/json',
504
+ };
505
+ if (this.sessionId !== undefined) {
506
+ headers['mcp-session-id'] = this.sessionId;
507
+ }
508
+ const responses = relatedIds
509
+ .map(id => this._requestResponseMap.get(id));
510
+ response.writeHead(200, headers);
511
+ if (responses.length === 1) {
512
+ response.end(JSON.stringify(responses[0]));
513
+ }
514
+ else {
515
+ response.end(JSON.stringify(responses));
516
+ }
517
+ }
518
+ else {
519
+ // End the SSE stream
520
+ response.end();
521
+ }
522
+ // Clean up
523
+ for (const id of relatedIds) {
524
+ this._requestResponseMap.delete(id);
525
+ this._requestToStreamMapping.delete(id);
526
+ }
527
+ }
528
+ }
529
+ }
530
+ }
531
+ //# sourceMappingURL=streamableHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamableHttp.js","sourceRoot":"","sources":["../../../src/server/streamableHttp.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { ZodLiteral, ZodObject, ZodType, z } from "zod";
2
- import { ClientCapabilities, Notification, Progress, Request, Result, ServerCapabilities } from "../types.js";
3
- import { Transport } from "./transport.js";
2
+ import { ClientCapabilities, Notification, Progress, Request, RequestId, Result, ServerCapabilities } from "../types.js";
3
+ import { Transport, TransportSendOptions } from "./transport.js";
4
+ import { AuthInfo } from "../server/auth/types.js";
4
5
  /**
5
6
  * Callback for progress notifications.
6
7
  */
@@ -52,19 +53,44 @@ export type RequestOptions = {
52
53
  * If not specified, there is no maximum total timeout.
53
54
  */
54
55
  maxTotalTimeout?: number;
56
+ } & TransportSendOptions;
57
+ /**
58
+ * Options that can be given per notification.
59
+ */
60
+ export type NotificationOptions = {
61
+ /**
62
+ * May be used to indicate to the transport which incoming request to associate this outgoing notification with.
63
+ */
64
+ relatedRequestId?: RequestId;
55
65
  };
56
66
  /**
57
67
  * Extra data given to request handlers.
58
68
  */
59
- export type RequestHandlerExtra = {
69
+ export type RequestHandlerExtra<SendRequestT extends Request, SendNotificationT extends Notification> = {
60
70
  /**
61
71
  * An abort signal used to communicate if the request was cancelled from the sender's side.
62
72
  */
63
73
  signal: AbortSignal;
74
+ /**
75
+ * Information about a validated access token, provided to request handlers.
76
+ */
77
+ authInfo?: AuthInfo;
64
78
  /**
65
79
  * The session ID from the transport, if available.
66
80
  */
67
81
  sessionId?: string;
82
+ /**
83
+ * Sends a notification that relates to the current request being handled.
84
+ *
85
+ * This is used by certain transports to correctly associate related messages.
86
+ */
87
+ sendNotification: (notification: SendNotificationT) => Promise<void>;
88
+ /**
89
+ * Sends a request that relates to the current request being handled.
90
+ *
91
+ * This is used by certain transports to correctly associate related messages.
92
+ */
93
+ sendRequest: <U extends ZodType<object>>(request: SendRequestT, resultSchema: U, options?: RequestOptions) => Promise<z.infer<U>>;
68
94
  };
69
95
  /**
70
96
  * Implements MCP protocol framing on top of a pluggable transport, including
@@ -148,7 +174,7 @@ export declare abstract class Protocol<SendRequestT extends Request, SendNotific
148
174
  /**
149
175
  * Emits a notification, which is a one-way message that does not expect a response.
150
176
  */
151
- notification(notification: SendNotificationT): Promise<void>;
177
+ notification(notification: SendNotificationT, options?: NotificationOptions): Promise<void>;
152
178
  /**
153
179
  * Registers a handler to invoke when this protocol object receives a request with the given method.
154
180
  *
@@ -156,7 +182,7 @@ export declare abstract class Protocol<SendRequestT extends Request, SendNotific
156
182
  */
157
183
  setRequestHandler<T extends ZodObject<{
158
184
  method: ZodLiteral<string>;
159
- }>>(requestSchema: T, handler: (request: z.infer<T>, extra: RequestHandlerExtra) => SendResultT | Promise<SendResultT>): void;
185
+ }>>(requestSchema: T, handler: (request: z.infer<T>, extra: RequestHandlerExtra<SendRequestT, SendNotificationT>) => SendResultT | Promise<SendResultT>): void;
160
186
  /**
161
187
  * Removes the request handler for the given method.
162
188
  */
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/shared/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/shared/protocol.ts"],"names":[],"mappings":"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"}