@modelcontextprotocol/sdk 1.8.0 → 1.10.0

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 (188) hide show
  1. package/README.md +339 -38
  2. package/dist/cjs/client/auth.d.ts +2 -1
  3. package/dist/cjs/client/auth.d.ts.map +1 -1
  4. package/dist/cjs/client/auth.js +3 -1
  5. package/dist/cjs/client/auth.js.map +1 -1
  6. package/dist/cjs/client/index.d.ts +49 -1
  7. package/dist/cjs/client/index.d.ts.map +1 -1
  8. package/dist/cjs/client/index.js +9 -4
  9. package/dist/cjs/client/index.js.map +1 -1
  10. package/dist/cjs/client/streamableHttp.d.ts +124 -0
  11. package/dist/cjs/client/streamableHttp.d.ts.map +1 -0
  12. package/dist/cjs/client/streamableHttp.js +353 -0
  13. package/dist/cjs/client/streamableHttp.js.map +1 -0
  14. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts +2 -0
  15. package/dist/cjs/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  16. package/dist/cjs/examples/client/simpleStreamableHttp.js +448 -0
  17. package/dist/cjs/examples/client/simpleStreamableHttp.js.map +1 -0
  18. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  19. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  20. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js +168 -0
  21. package/dist/cjs/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  22. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  23. package/dist/cjs/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  24. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js +139 -0
  25. package/dist/cjs/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  26. package/dist/cjs/examples/server/simpleSseServer.d.ts +2 -0
  27. package/dist/cjs/examples/server/simpleSseServer.d.ts.map +1 -0
  28. package/dist/cjs/examples/server/simpleSseServer.js +148 -0
  29. package/dist/cjs/examples/server/simpleSseServer.js.map +1 -0
  30. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts +2 -0
  31. package/dist/cjs/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  32. package/dist/cjs/examples/server/simpleStreamableHttp.js +250 -0
  33. package/dist/cjs/examples/server/simpleStreamableHttp.js.map +1 -0
  34. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  35. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  36. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js +229 -0
  37. package/dist/cjs/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  38. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  39. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  40. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js +112 -0
  41. package/dist/cjs/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  42. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts +31 -0
  43. package/dist/cjs/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  44. package/dist/cjs/examples/shared/inMemoryEventStore.js +69 -0
  45. package/dist/cjs/examples/shared/inMemoryEventStore.js.map +1 -0
  46. package/dist/cjs/inMemory.d.ts +13 -3
  47. package/dist/cjs/inMemory.d.ts.map +1 -1
  48. package/dist/cjs/inMemory.js +9 -7
  49. package/dist/cjs/inMemory.js.map +1 -1
  50. package/dist/cjs/server/auth/handlers/token.d.ts.map +1 -1
  51. package/dist/cjs/server/auth/handlers/token.js +10 -5
  52. package/dist/cjs/server/auth/handlers/token.js.map +1 -1
  53. package/dist/cjs/server/auth/provider.d.ts +9 -1
  54. package/dist/cjs/server/auth/provider.d.ts.map +1 -1
  55. package/dist/cjs/server/auth/providers/proxyProvider.d.ts +43 -0
  56. package/dist/cjs/server/auth/providers/proxyProvider.d.ts.map +1 -0
  57. package/dist/cjs/server/auth/providers/proxyProvider.js +145 -0
  58. package/dist/cjs/server/auth/providers/proxyProvider.js.map +1 -0
  59. package/dist/cjs/server/auth/router.d.ts +6 -0
  60. package/dist/cjs/server/auth/router.d.ts.map +1 -1
  61. package/dist/cjs/server/auth/router.js +5 -4
  62. package/dist/cjs/server/auth/router.js.map +1 -1
  63. package/dist/cjs/server/auth/types.d.ts +5 -0
  64. package/dist/cjs/server/auth/types.d.ts.map +1 -1
  65. package/dist/cjs/server/index.d.ts +12 -0
  66. package/dist/cjs/server/index.d.ts.map +1 -1
  67. package/dist/cjs/server/mcp.d.ts +100 -19
  68. package/dist/cjs/server/mcp.d.ts.map +1 -1
  69. package/dist/cjs/server/mcp.js +154 -12
  70. package/dist/cjs/server/mcp.js.map +1 -1
  71. package/dist/cjs/server/sse.d.ts +10 -3
  72. package/dist/cjs/server/sse.d.ts.map +1 -1
  73. package/dist/cjs/server/sse.js +14 -5
  74. package/dist/cjs/server/sse.js.map +1 -1
  75. package/dist/cjs/server/streamableHttp.d.ts +146 -0
  76. package/dist/cjs/server/streamableHttp.d.ts.map +1 -0
  77. package/dist/cjs/server/streamableHttp.js +538 -0
  78. package/dist/cjs/server/streamableHttp.js.map +1 -0
  79. package/dist/cjs/shared/protocol.d.ts +31 -5
  80. package/dist/cjs/shared/protocol.d.ts.map +1 -1
  81. package/dist/cjs/shared/protocol.js +29 -19
  82. package/dist/cjs/shared/protocol.js.map +1 -1
  83. package/dist/cjs/shared/stdio.js +1 -1
  84. package/dist/cjs/shared/stdio.js.map +1 -1
  85. package/dist/cjs/shared/transport.d.ts +32 -3
  86. package/dist/cjs/shared/transport.d.ts.map +1 -1
  87. package/dist/cjs/shared/uriTemplate.d.ts +1 -0
  88. package/dist/cjs/shared/uriTemplate.d.ts.map +1 -1
  89. package/dist/cjs/shared/uriTemplate.js +3 -0
  90. package/dist/cjs/shared/uriTemplate.js.map +1 -1
  91. package/dist/cjs/types.d.ts +1990 -35
  92. package/dist/cjs/types.d.ts.map +1 -1
  93. package/dist/cjs/types.js +38 -4
  94. package/dist/cjs/types.js.map +1 -1
  95. package/dist/esm/client/auth.d.ts +2 -1
  96. package/dist/esm/client/auth.d.ts.map +1 -1
  97. package/dist/esm/client/auth.js +3 -1
  98. package/dist/esm/client/auth.js.map +1 -1
  99. package/dist/esm/client/index.d.ts +49 -1
  100. package/dist/esm/client/index.d.ts.map +1 -1
  101. package/dist/esm/client/index.js +9 -4
  102. package/dist/esm/client/index.js.map +1 -1
  103. package/dist/esm/client/streamableHttp.d.ts +124 -0
  104. package/dist/esm/client/streamableHttp.d.ts.map +1 -0
  105. package/dist/esm/client/streamableHttp.js +348 -0
  106. package/dist/esm/client/streamableHttp.js.map +1 -0
  107. package/dist/esm/examples/client/simpleStreamableHttp.d.ts +2 -0
  108. package/dist/esm/examples/client/simpleStreamableHttp.d.ts.map +1 -0
  109. package/dist/esm/examples/client/simpleStreamableHttp.js +446 -0
  110. package/dist/esm/examples/client/simpleStreamableHttp.js.map +1 -0
  111. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts +2 -0
  112. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.d.ts.map +1 -0
  113. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js +166 -0
  114. package/dist/esm/examples/client/streamableHttpWithSseFallbackClient.js.map +1 -0
  115. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts +2 -0
  116. package/dist/esm/examples/server/jsonResponseStreamableHttp.d.ts.map +1 -0
  117. package/dist/esm/examples/server/jsonResponseStreamableHttp.js +134 -0
  118. package/dist/esm/examples/server/jsonResponseStreamableHttp.js.map +1 -0
  119. package/dist/esm/examples/server/simpleSseServer.d.ts +2 -0
  120. package/dist/esm/examples/server/simpleSseServer.d.ts.map +1 -0
  121. package/dist/esm/examples/server/simpleSseServer.js +143 -0
  122. package/dist/esm/examples/server/simpleSseServer.js.map +1 -0
  123. package/dist/esm/examples/server/simpleStreamableHttp.d.ts +2 -0
  124. package/dist/esm/examples/server/simpleStreamableHttp.d.ts.map +1 -0
  125. package/dist/esm/examples/server/simpleStreamableHttp.js +245 -0
  126. package/dist/esm/examples/server/simpleStreamableHttp.js.map +1 -0
  127. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts +2 -0
  128. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.d.ts.map +1 -0
  129. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js +224 -0
  130. package/dist/esm/examples/server/sseAndStreamableHttpCompatibleServer.js.map +1 -0
  131. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts +2 -0
  132. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.d.ts.map +1 -0
  133. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js +107 -0
  134. package/dist/esm/examples/server/standaloneSseWithGetStreamableHttp.js.map +1 -0
  135. package/dist/esm/examples/shared/inMemoryEventStore.d.ts +31 -0
  136. package/dist/esm/examples/shared/inMemoryEventStore.d.ts.map +1 -0
  137. package/dist/esm/examples/shared/inMemoryEventStore.js +65 -0
  138. package/dist/esm/examples/shared/inMemoryEventStore.js.map +1 -0
  139. package/dist/esm/inMemory.d.ts +13 -3
  140. package/dist/esm/inMemory.d.ts.map +1 -1
  141. package/dist/esm/inMemory.js +9 -7
  142. package/dist/esm/inMemory.js.map +1 -1
  143. package/dist/esm/server/auth/handlers/token.d.ts.map +1 -1
  144. package/dist/esm/server/auth/handlers/token.js +10 -5
  145. package/dist/esm/server/auth/handlers/token.js.map +1 -1
  146. package/dist/esm/server/auth/provider.d.ts +9 -1
  147. package/dist/esm/server/auth/provider.d.ts.map +1 -1
  148. package/dist/esm/server/auth/providers/proxyProvider.d.ts +43 -0
  149. package/dist/esm/server/auth/providers/proxyProvider.d.ts.map +1 -0
  150. package/dist/esm/server/auth/providers/proxyProvider.js +141 -0
  151. package/dist/esm/server/auth/providers/proxyProvider.js.map +1 -0
  152. package/dist/esm/server/auth/router.d.ts +6 -0
  153. package/dist/esm/server/auth/router.d.ts.map +1 -1
  154. package/dist/esm/server/auth/router.js +5 -4
  155. package/dist/esm/server/auth/router.js.map +1 -1
  156. package/dist/esm/server/auth/types.d.ts +5 -0
  157. package/dist/esm/server/auth/types.d.ts.map +1 -1
  158. package/dist/esm/server/index.d.ts +12 -0
  159. package/dist/esm/server/index.d.ts.map +1 -1
  160. package/dist/esm/server/mcp.d.ts +100 -19
  161. package/dist/esm/server/mcp.d.ts.map +1 -1
  162. package/dist/esm/server/mcp.js +154 -12
  163. package/dist/esm/server/mcp.js.map +1 -1
  164. package/dist/esm/server/sse.d.ts +10 -3
  165. package/dist/esm/server/sse.d.ts.map +1 -1
  166. package/dist/esm/server/sse.js +14 -5
  167. package/dist/esm/server/sse.js.map +1 -1
  168. package/dist/esm/server/streamableHttp.d.ts +146 -0
  169. package/dist/esm/server/streamableHttp.d.ts.map +1 -0
  170. package/dist/esm/server/streamableHttp.js +531 -0
  171. package/dist/esm/server/streamableHttp.js.map +1 -0
  172. package/dist/esm/shared/protocol.d.ts +31 -5
  173. package/dist/esm/shared/protocol.d.ts.map +1 -1
  174. package/dist/esm/shared/protocol.js +30 -20
  175. package/dist/esm/shared/protocol.js.map +1 -1
  176. package/dist/esm/shared/stdio.js +1 -1
  177. package/dist/esm/shared/stdio.js.map +1 -1
  178. package/dist/esm/shared/transport.d.ts +32 -3
  179. package/dist/esm/shared/transport.d.ts.map +1 -1
  180. package/dist/esm/shared/uriTemplate.d.ts +1 -0
  181. package/dist/esm/shared/uriTemplate.d.ts.map +1 -1
  182. package/dist/esm/shared/uriTemplate.js +3 -0
  183. package/dist/esm/shared/uriTemplate.js.map +1 -1
  184. package/dist/esm/types.d.ts +1990 -35
  185. package/dist/esm/types.d.ts.map +1 -1
  186. package/dist/esm/types.js +30 -2
  187. package/dist/esm/types.js.map +1 -1
  188. package/package.json +2 -2
@@ -0,0 +1,538 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StreamableHTTPServerTransport = void 0;
7
+ const types_js_1 = require("../types.js");
8
+ const raw_body_1 = __importDefault(require("raw-body"));
9
+ const content_type_1 = __importDefault(require("content-type"));
10
+ const node_crypto_1 = require("node:crypto");
11
+ const MAXIMUM_MESSAGE_SIZE = "4mb";
12
+ /**
13
+ * Server transport for Streamable HTTP: this implements the MCP Streamable HTTP transport specification.
14
+ * It supports both SSE streaming and direct HTTP responses.
15
+ *
16
+ * Usage example:
17
+ *
18
+ * ```typescript
19
+ * // Stateful mode - server sets the session ID
20
+ * const statefulTransport = new StreamableHTTPServerTransport({
21
+ * sessionId: randomUUID(),
22
+ * });
23
+ *
24
+ * // Stateless mode - explicitly set session ID to undefined
25
+ * const statelessTransport = new StreamableHTTPServerTransport({
26
+ * sessionId: undefined,
27
+ * });
28
+ *
29
+ * // Using with pre-parsed request body
30
+ * app.post('/mcp', (req, res) => {
31
+ * transport.handleRequest(req, res, req.body);
32
+ * });
33
+ * ```
34
+ *
35
+ * In stateful mode:
36
+ * - Session ID is generated and included in response headers
37
+ * - Session ID is always included in initialization responses
38
+ * - Requests with invalid session IDs are rejected with 404 Not Found
39
+ * - Non-initialization requests without a session ID are rejected with 400 Bad Request
40
+ * - State is maintained in-memory (connections, message history)
41
+ *
42
+ * In stateless mode:
43
+ * - Session ID is only included in initialization responses
44
+ * - No session validation is performed
45
+ */
46
+ class StreamableHTTPServerTransport {
47
+ constructor(options) {
48
+ var _a;
49
+ this._started = false;
50
+ this._streamMapping = new Map();
51
+ this._requestToStreamMapping = new Map();
52
+ this._requestResponseMap = new Map();
53
+ this._initialized = false;
54
+ this._enableJsonResponse = false;
55
+ this._standaloneSseStreamId = '_GET_stream';
56
+ this.sessionIdGenerator = options.sessionIdGenerator;
57
+ this._enableJsonResponse = (_a = options.enableJsonResponse) !== null && _a !== void 0 ? _a : false;
58
+ this._eventStore = options.eventStore;
59
+ this._onsessioninitialized = options.onsessioninitialized;
60
+ }
61
+ /**
62
+ * Starts the transport. This is required by the Transport interface but is a no-op
63
+ * for the Streamable HTTP transport as connections are managed per-request.
64
+ */
65
+ async start() {
66
+ if (this._started) {
67
+ throw new Error("Transport already started");
68
+ }
69
+ this._started = true;
70
+ }
71
+ /**
72
+ * Handles an incoming HTTP request, whether GET or POST
73
+ */
74
+ async handleRequest(req, res, parsedBody) {
75
+ if (req.method === "POST") {
76
+ await this.handlePostRequest(req, res, parsedBody);
77
+ }
78
+ else if (req.method === "GET") {
79
+ await this.handleGetRequest(req, res);
80
+ }
81
+ else if (req.method === "DELETE") {
82
+ await this.handleDeleteRequest(req, res);
83
+ }
84
+ else {
85
+ await this.handleUnsupportedRequest(res);
86
+ }
87
+ }
88
+ /**
89
+ * Handles GET requests for SSE stream
90
+ */
91
+ async handleGetRequest(req, res) {
92
+ // The client MUST include an Accept header, listing text/event-stream as a supported content type.
93
+ const acceptHeader = req.headers.accept;
94
+ if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes("text/event-stream"))) {
95
+ res.writeHead(406).end(JSON.stringify({
96
+ jsonrpc: "2.0",
97
+ error: {
98
+ code: -32000,
99
+ message: "Not Acceptable: Client must accept text/event-stream"
100
+ },
101
+ id: null
102
+ }));
103
+ return;
104
+ }
105
+ // If an Mcp-Session-Id is returned by the server during initialization,
106
+ // clients using the Streamable HTTP transport MUST include it
107
+ // in the Mcp-Session-Id header on all of their subsequent HTTP requests.
108
+ if (!this.validateSession(req, res)) {
109
+ return;
110
+ }
111
+ // Handle resumability: check for Last-Event-ID header
112
+ if (this._eventStore) {
113
+ const lastEventId = req.headers['last-event-id'];
114
+ if (lastEventId) {
115
+ await this.replayEvents(lastEventId, res);
116
+ return;
117
+ }
118
+ }
119
+ // The server MUST either return Content-Type: text/event-stream in response to this HTTP GET,
120
+ // or else return HTTP 405 Method Not Allowed
121
+ const headers = {
122
+ "Content-Type": "text/event-stream",
123
+ "Cache-Control": "no-cache, no-transform",
124
+ Connection: "keep-alive",
125
+ };
126
+ // After initialization, always include the session ID if we have one
127
+ if (this.sessionId !== undefined) {
128
+ headers["mcp-session-id"] = this.sessionId;
129
+ }
130
+ // Check if there's already an active standalone SSE stream for this session
131
+ if (this._streamMapping.get(this._standaloneSseStreamId) !== undefined) {
132
+ // Only one GET SSE stream is allowed per session
133
+ res.writeHead(409).end(JSON.stringify({
134
+ jsonrpc: "2.0",
135
+ error: {
136
+ code: -32000,
137
+ message: "Conflict: Only one SSE stream is allowed per session"
138
+ },
139
+ id: null
140
+ }));
141
+ return;
142
+ }
143
+ // We need to send headers immediately as messages will arrive much later,
144
+ // otherwise the client will just wait for the first message
145
+ res.writeHead(200, headers).flushHeaders();
146
+ // Assign the response to the standalone SSE stream
147
+ this._streamMapping.set(this._standaloneSseStreamId, res);
148
+ // Set up close handler for client disconnects
149
+ res.on("close", () => {
150
+ this._streamMapping.delete(this._standaloneSseStreamId);
151
+ });
152
+ }
153
+ /**
154
+ * Replays events that would have been sent after the specified event ID
155
+ * Only used when resumability is enabled
156
+ */
157
+ async replayEvents(lastEventId, res) {
158
+ var _a, _b;
159
+ if (!this._eventStore) {
160
+ return;
161
+ }
162
+ try {
163
+ const headers = {
164
+ "Content-Type": "text/event-stream",
165
+ "Cache-Control": "no-cache, no-transform",
166
+ Connection: "keep-alive",
167
+ };
168
+ if (this.sessionId !== undefined) {
169
+ headers["mcp-session-id"] = this.sessionId;
170
+ }
171
+ res.writeHead(200, headers).flushHeaders();
172
+ const streamId = await ((_a = this._eventStore) === null || _a === void 0 ? void 0 : _a.replayEventsAfter(lastEventId, {
173
+ send: async (eventId, message) => {
174
+ var _a;
175
+ if (!this.writeSSEEvent(res, message, eventId)) {
176
+ (_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, new Error("Failed replay events"));
177
+ res.end();
178
+ }
179
+ }
180
+ }));
181
+ this._streamMapping.set(streamId, res);
182
+ }
183
+ catch (error) {
184
+ (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);
185
+ }
186
+ }
187
+ /**
188
+ * Writes an event to the SSE stream with proper formatting
189
+ */
190
+ writeSSEEvent(res, message, eventId) {
191
+ let eventData = `event: message\n`;
192
+ // Include event ID if provided - this is important for resumability
193
+ if (eventId) {
194
+ eventData += `id: ${eventId}\n`;
195
+ }
196
+ eventData += `data: ${JSON.stringify(message)}\n\n`;
197
+ return res.write(eventData);
198
+ }
199
+ /**
200
+ * Handles unsupported requests (PUT, PATCH, etc.)
201
+ */
202
+ async handleUnsupportedRequest(res) {
203
+ res.writeHead(405, {
204
+ "Allow": "GET, POST, DELETE"
205
+ }).end(JSON.stringify({
206
+ jsonrpc: "2.0",
207
+ error: {
208
+ code: -32000,
209
+ message: "Method not allowed."
210
+ },
211
+ id: null
212
+ }));
213
+ }
214
+ /**
215
+ * Handles POST requests containing JSON-RPC messages
216
+ */
217
+ async handlePostRequest(req, res, parsedBody) {
218
+ var _a, _b, _c, _d, _e;
219
+ try {
220
+ // Validate the Accept header
221
+ const acceptHeader = req.headers.accept;
222
+ // The client MUST include an Accept header, listing both application/json and text/event-stream as supported content types.
223
+ if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes("application/json")) || !acceptHeader.includes("text/event-stream")) {
224
+ res.writeHead(406).end(JSON.stringify({
225
+ jsonrpc: "2.0",
226
+ error: {
227
+ code: -32000,
228
+ message: "Not Acceptable: Client must accept both application/json and text/event-stream"
229
+ },
230
+ id: null
231
+ }));
232
+ return;
233
+ }
234
+ const ct = req.headers["content-type"];
235
+ if (!ct || !ct.includes("application/json")) {
236
+ res.writeHead(415).end(JSON.stringify({
237
+ jsonrpc: "2.0",
238
+ error: {
239
+ code: -32000,
240
+ message: "Unsupported Media Type: Content-Type must be application/json"
241
+ },
242
+ id: null
243
+ }));
244
+ return;
245
+ }
246
+ let rawMessage;
247
+ if (parsedBody !== undefined) {
248
+ rawMessage = parsedBody;
249
+ }
250
+ else {
251
+ const parsedCt = content_type_1.default.parse(ct);
252
+ const body = await (0, raw_body_1.default)(req, {
253
+ limit: MAXIMUM_MESSAGE_SIZE,
254
+ encoding: (_a = parsedCt.parameters.charset) !== null && _a !== void 0 ? _a : "utf-8",
255
+ });
256
+ rawMessage = JSON.parse(body.toString());
257
+ }
258
+ let messages;
259
+ // handle batch and single messages
260
+ if (Array.isArray(rawMessage)) {
261
+ messages = rawMessage.map(msg => types_js_1.JSONRPCMessageSchema.parse(msg));
262
+ }
263
+ else {
264
+ messages = [types_js_1.JSONRPCMessageSchema.parse(rawMessage)];
265
+ }
266
+ // Check if this is an initialization request
267
+ // https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/lifecycle/
268
+ const isInitializationRequest = messages.some(types_js_1.isInitializeRequest);
269
+ if (isInitializationRequest) {
270
+ // If it's a server with session management and the session ID is already set we should reject the request
271
+ // to avoid re-initialization.
272
+ if (this._initialized) {
273
+ res.writeHead(400).end(JSON.stringify({
274
+ jsonrpc: "2.0",
275
+ error: {
276
+ code: -32600,
277
+ message: "Invalid Request: Server already initialized"
278
+ },
279
+ id: null
280
+ }));
281
+ return;
282
+ }
283
+ if (messages.length > 1) {
284
+ res.writeHead(400).end(JSON.stringify({
285
+ jsonrpc: "2.0",
286
+ error: {
287
+ code: -32600,
288
+ message: "Invalid Request: Only one initialization request is allowed"
289
+ },
290
+ id: null
291
+ }));
292
+ return;
293
+ }
294
+ this.sessionId = (_b = this.sessionIdGenerator) === null || _b === void 0 ? void 0 : _b.call(this);
295
+ this._initialized = true;
296
+ // If we have a session ID and an onsessioninitialized handler, call it immediately
297
+ // This is needed in cases where the server needs to keep track of multiple sessions
298
+ if (this.sessionId && this._onsessioninitialized) {
299
+ this._onsessioninitialized(this.sessionId);
300
+ }
301
+ }
302
+ // If an Mcp-Session-Id is returned by the server during initialization,
303
+ // clients using the Streamable HTTP transport MUST include it
304
+ // in the Mcp-Session-Id header on all of their subsequent HTTP requests.
305
+ if (!isInitializationRequest && !this.validateSession(req, res)) {
306
+ return;
307
+ }
308
+ // check if it contains requests
309
+ const hasRequests = messages.some(types_js_1.isJSONRPCRequest);
310
+ if (!hasRequests) {
311
+ // if it only contains notifications or responses, return 202
312
+ res.writeHead(202).end();
313
+ // handle each message
314
+ for (const message of messages) {
315
+ (_c = this.onmessage) === null || _c === void 0 ? void 0 : _c.call(this, message);
316
+ }
317
+ }
318
+ else if (hasRequests) {
319
+ // The default behavior is to use SSE streaming
320
+ // but in some cases server will return JSON responses
321
+ const streamId = (0, node_crypto_1.randomUUID)();
322
+ if (!this._enableJsonResponse) {
323
+ const headers = {
324
+ "Content-Type": "text/event-stream",
325
+ "Cache-Control": "no-cache",
326
+ Connection: "keep-alive",
327
+ };
328
+ // After initialization, always include the session ID if we have one
329
+ if (this.sessionId !== undefined) {
330
+ headers["mcp-session-id"] = this.sessionId;
331
+ }
332
+ res.writeHead(200, headers);
333
+ }
334
+ // Store the response for this request to send messages back through this connection
335
+ // We need to track by request ID to maintain the connection
336
+ for (const message of messages) {
337
+ if ((0, types_js_1.isJSONRPCRequest)(message)) {
338
+ this._streamMapping.set(streamId, res);
339
+ this._requestToStreamMapping.set(message.id, streamId);
340
+ }
341
+ }
342
+ // Set up close handler for client disconnects
343
+ res.on("close", () => {
344
+ this._streamMapping.delete(streamId);
345
+ });
346
+ // handle each message
347
+ for (const message of messages) {
348
+ (_d = this.onmessage) === null || _d === void 0 ? void 0 : _d.call(this, message);
349
+ }
350
+ // The server SHOULD NOT close the SSE stream before sending all JSON-RPC responses
351
+ // This will be handled by the send() method when responses are ready
352
+ }
353
+ }
354
+ catch (error) {
355
+ // return JSON-RPC formatted error
356
+ res.writeHead(400).end(JSON.stringify({
357
+ jsonrpc: "2.0",
358
+ error: {
359
+ code: -32700,
360
+ message: "Parse error",
361
+ data: String(error)
362
+ },
363
+ id: null
364
+ }));
365
+ (_e = this.onerror) === null || _e === void 0 ? void 0 : _e.call(this, error);
366
+ }
367
+ }
368
+ /**
369
+ * Handles DELETE requests to terminate sessions
370
+ */
371
+ async handleDeleteRequest(req, res) {
372
+ if (!this.validateSession(req, res)) {
373
+ return;
374
+ }
375
+ await this.close();
376
+ res.writeHead(200).end();
377
+ }
378
+ /**
379
+ * Validates session ID for non-initialization requests
380
+ * Returns true if the session is valid, false otherwise
381
+ */
382
+ validateSession(req, res) {
383
+ if (!this._initialized) {
384
+ // If the server has not been initialized yet, reject all requests
385
+ res.writeHead(400).end(JSON.stringify({
386
+ jsonrpc: "2.0",
387
+ error: {
388
+ code: -32000,
389
+ message: "Bad Request: Server not initialized"
390
+ },
391
+ id: null
392
+ }));
393
+ return false;
394
+ }
395
+ if (this.sessionId === undefined) {
396
+ // If the session ID is not set, the session management is disabled
397
+ // and we don't need to validate the session ID
398
+ return true;
399
+ }
400
+ const sessionId = req.headers["mcp-session-id"];
401
+ if (!sessionId) {
402
+ // Non-initialization requests without a session ID should return 400 Bad Request
403
+ res.writeHead(400).end(JSON.stringify({
404
+ jsonrpc: "2.0",
405
+ error: {
406
+ code: -32000,
407
+ message: "Bad Request: Mcp-Session-Id header is required"
408
+ },
409
+ id: null
410
+ }));
411
+ return false;
412
+ }
413
+ else if (Array.isArray(sessionId)) {
414
+ res.writeHead(400).end(JSON.stringify({
415
+ jsonrpc: "2.0",
416
+ error: {
417
+ code: -32000,
418
+ message: "Bad Request: Mcp-Session-Id header must be a single value"
419
+ },
420
+ id: null
421
+ }));
422
+ return false;
423
+ }
424
+ else if (sessionId !== this.sessionId) {
425
+ // Reject requests with invalid session ID with 404 Not Found
426
+ res.writeHead(404).end(JSON.stringify({
427
+ jsonrpc: "2.0",
428
+ error: {
429
+ code: -32001,
430
+ message: "Session not found"
431
+ },
432
+ id: null
433
+ }));
434
+ return false;
435
+ }
436
+ return true;
437
+ }
438
+ async close() {
439
+ var _a;
440
+ // Close all SSE connections
441
+ this._streamMapping.forEach((response) => {
442
+ response.end();
443
+ });
444
+ this._streamMapping.clear();
445
+ // Clear any pending responses
446
+ this._requestResponseMap.clear();
447
+ (_a = this.onclose) === null || _a === void 0 ? void 0 : _a.call(this);
448
+ }
449
+ async send(message, options) {
450
+ let requestId = options === null || options === void 0 ? void 0 : options.relatedRequestId;
451
+ if ((0, types_js_1.isJSONRPCResponse)(message) || (0, types_js_1.isJSONRPCError)(message)) {
452
+ // If the message is a response, use the request ID from the message
453
+ requestId = message.id;
454
+ }
455
+ // Check if this message should be sent on the standalone SSE stream (no request ID)
456
+ // Ignore notifications from tools (which have relatedRequestId set)
457
+ // Those will be sent via dedicated response SSE streams
458
+ if (requestId === undefined) {
459
+ // For standalone SSE streams, we can only send requests and notifications
460
+ if ((0, types_js_1.isJSONRPCResponse)(message) || (0, types_js_1.isJSONRPCError)(message)) {
461
+ throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");
462
+ }
463
+ const standaloneSse = this._streamMapping.get(this._standaloneSseStreamId);
464
+ if (standaloneSse === undefined) {
465
+ // The spec says the server MAY send messages on the stream, so it's ok to discard if no stream
466
+ return;
467
+ }
468
+ // Generate and store event ID if event store is provided
469
+ let eventId;
470
+ if (this._eventStore) {
471
+ // Stores the event and gets the generated event ID
472
+ eventId = await this._eventStore.storeEvent(this._standaloneSseStreamId, message);
473
+ }
474
+ // Send the message to the standalone SSE stream
475
+ this.writeSSEEvent(standaloneSse, message, eventId);
476
+ return;
477
+ }
478
+ // Get the response for this request
479
+ const streamId = this._requestToStreamMapping.get(requestId);
480
+ const response = this._streamMapping.get(streamId);
481
+ if (!streamId) {
482
+ throw new Error(`No connection established for request ID: ${String(requestId)}`);
483
+ }
484
+ if (!this._enableJsonResponse) {
485
+ // For SSE responses, generate event ID if event store is provided
486
+ let eventId;
487
+ if (this._eventStore) {
488
+ eventId = await this._eventStore.storeEvent(streamId, message);
489
+ }
490
+ if (response) {
491
+ // Write the event to the response stream
492
+ this.writeSSEEvent(response, message, eventId);
493
+ }
494
+ }
495
+ if ((0, types_js_1.isJSONRPCResponse)(message)) {
496
+ this._requestResponseMap.set(requestId, message);
497
+ const relatedIds = Array.from(this._requestToStreamMapping.entries())
498
+ .filter(([_, streamId]) => this._streamMapping.get(streamId) === response)
499
+ .map(([id]) => id);
500
+ // Check if we have responses for all requests using this connection
501
+ const allResponsesReady = relatedIds.every(id => this._requestResponseMap.has(id));
502
+ if (allResponsesReady) {
503
+ if (!response) {
504
+ throw new Error(`No connection established for request ID: ${String(requestId)}`);
505
+ }
506
+ if (this._enableJsonResponse) {
507
+ // All responses ready, send as JSON
508
+ const headers = {
509
+ 'Content-Type': 'application/json',
510
+ };
511
+ if (this.sessionId !== undefined) {
512
+ headers['mcp-session-id'] = this.sessionId;
513
+ }
514
+ const responses = relatedIds
515
+ .map(id => this._requestResponseMap.get(id));
516
+ response.writeHead(200, headers);
517
+ if (responses.length === 1) {
518
+ response.end(JSON.stringify(responses[0]));
519
+ }
520
+ else {
521
+ response.end(JSON.stringify(responses));
522
+ }
523
+ }
524
+ else {
525
+ // End the SSE stream
526
+ response.end();
527
+ }
528
+ // Clean up
529
+ for (const id of relatedIds) {
530
+ this._requestResponseMap.delete(id);
531
+ this._requestToStreamMapping.delete(id);
532
+ }
533
+ }
534
+ }
535
+ }
536
+ }
537
+ exports.StreamableHTTPServerTransport = StreamableHTTPServerTransport;
538
+ //# 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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxD,OAAO,EAEL,kBAAkB,EAWlB,YAAY,EAEZ,QAAQ,EAGR,OAAO,EACP,SAAS,EACT,MAAM,EACN,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;;;;;OAMG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,QAAQ,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,oBAAoB,CAAC;AAEzB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC;;OAEG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAC;CAC9B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,YAAY,SAAS,OAAO,EAC1D,iBAAiB,SAAS,YAAY,IAAI;IACxC;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,YAAY,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE;;;;OAIG;IACH,WAAW,EAAE,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;CACnI,CAAC;AAcJ;;;GAGG;AACH,8BAAsB,QAAQ,CAC5B,YAAY,SAAS,OAAO,EAC5B,iBAAiB,SAAS,YAAY,EACtC,WAAW,SAAS,MAAM;IAgDd,OAAO,CAAC,QAAQ,CAAC;IA9C7B,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,gBAAgB,CAMV;IACd,OAAO,CAAC,+BAA+B,CAC3B;IACZ,OAAO,CAAC,qBAAqB,CAGf;IACd,OAAO,CAAC,iBAAiB,CAGX;IACd,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,YAAY,CAAuC;IAE3D;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEjC;;OAEG;IACH,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAEpE;;OAEG;IACH,2BAA2B,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAExD,QAAQ,CAAC,EAAE,eAAe,YAAA;IAmB9C,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACG,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlD,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,UAAU;IA4ElB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,WAAW;IA4BnB,IAAI,SAAS,IAAI,SAAS,GAAG,SAAS,CAErC;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,yBAAyB,CAC1C,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAC7B,IAAI;IAEP;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,4BAA4B,CAC7C,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAClC,IAAI;IAEP;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAEvE;;;;OAIG;IACH,OAAO,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,CAAC,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAwFtB;;OAEG;IACG,YAAY,CAAC,YAAY,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAejG;;;;OAIG;IACH,iBAAiB,CACf,CAAC,SAAS,SAAS,CAAC;QAClB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;KAC5B,CAAC,EAEF,aAAa,EAAE,CAAC,EAChB,OAAO,EAAE,CACP,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EACnB,KAAK,EAAE,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,CAAC,KACxD,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,GACtC,IAAI;IASP;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQhD;;;;OAIG;IACH,sBAAsB,CACpB,CAAC,SAAS,SAAS,CAAC;QAClB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;KAC5B,CAAC,EAEF,kBAAkB,EAAE,CAAC,EACrB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC1D,IAAI;IAQP;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAGhD;AAED,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,EACjD,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAY3B"}