agents 0.0.0-ccbea72 → 0.0.0-cd8b7fd
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.
- package/README.md +5 -3
- package/dist/ai-chat-agent.d.ts +95 -13
- package/dist/ai-chat-agent.js +354 -74
- package/dist/ai-chat-agent.js.map +1 -1
- package/dist/{ai-chat-v5-migration-DBHGW4Hv.js → ai-chat-v5-migration-DguhuLKF.js} +1 -1
- package/dist/{ai-chat-v5-migration-DBHGW4Hv.js.map → ai-chat-v5-migration-DguhuLKF.js.map} +1 -1
- package/dist/ai-chat-v5-migration.js +1 -1
- package/dist/ai-react.d.ts +15 -9
- package/dist/ai-react.js +179 -29
- package/dist/ai-react.js.map +1 -1
- package/dist/{ai-types-B3aQaFv3.js → ai-types-CwgHzwUb.js} +5 -1
- package/dist/ai-types-CwgHzwUb.js.map +1 -0
- package/dist/{ai-types-D5YoPrBZ.d.ts → ai-types-D_hTbf25.d.ts} +15 -7
- package/dist/ai-types.d.ts +1 -1
- package/dist/ai-types.js +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +28 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/{client-BfiZ3HQd.js → client-CcyhkGfN.js} +2 -2
- package/dist/{client-BfiZ3HQd.js.map → client-CcyhkGfN.js.map} +1 -1
- package/dist/{client-CbWe9FBd.d.ts → client-ClORm6f0.d.ts} +2 -2
- package/dist/client-DfIOsabL.d.ts +834 -0
- package/dist/client-QZa2Rq0l.js +1105 -0
- package/dist/client-QZa2Rq0l.js.map +1 -0
- package/dist/client.d.ts +2 -2
- package/dist/client.js +2 -2
- package/dist/codemode/ai.js +6 -5
- package/dist/codemode/ai.js.map +1 -1
- package/dist/context-BkKbAa1R.js +8 -0
- package/dist/context-BkKbAa1R.js.map +1 -0
- package/dist/context-_sPQqJWv.d.ts +24 -0
- package/dist/context.d.ts +6 -0
- package/dist/context.js +3 -0
- package/dist/{do-oauth-client-provider-DGc5pP0l.d.ts → do-oauth-client-provider-B-ryFIPr.d.ts} +20 -5
- package/dist/{do-oauth-client-provider-CswoD5Lu.js → do-oauth-client-provider-B1fVIshX.js} +70 -8
- package/dist/do-oauth-client-provider-B1fVIshX.js.map +1 -0
- package/dist/{index-DhJCaDWd.d.ts → index-CyDpAVHZ.d.ts} +2 -2
- package/dist/{index-D6iosdF4.d.ts → index-DPJ32qQn.d.ts} +83 -66
- package/dist/index.d.ts +34 -34
- package/dist/index.js +6 -5
- package/dist/mcp/client.d.ts +4 -4
- package/dist/mcp/client.js +2 -1
- package/dist/mcp/do-oauth-client-provider.d.ts +1 -1
- package/dist/mcp/do-oauth-client-provider.js +1 -1
- package/dist/mcp/index.d.ts +89 -24
- package/dist/mcp/index.js +294 -81
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/x402.js +10 -6
- package/dist/mcp/x402.js.map +1 -1
- package/dist/{mcp-Dw5vDrY8.d.ts → mcp-CzbSsLfc.d.ts} +1 -1
- package/dist/observability/index.d.ts +2 -2
- package/dist/observability/index.js +6 -5
- package/dist/{react-YzfC33jB.d.ts → react-MaOSl7Pr.d.ts} +33 -35
- package/dist/react.d.ts +10 -9
- package/dist/react.js +2 -2
- package/dist/react.js.map +1 -1
- package/dist/{serializable-CymX8ovI.d.ts → serializable-C4GLimgv.d.ts} +1 -1
- package/dist/serializable.d.ts +1 -1
- package/dist/{src-Dz0H9hSU.js → src-BmbDclOA.js} +128 -147
- package/dist/src-BmbDclOA.js.map +1 -0
- package/package.json +53 -38
- package/dist/ai-types-B3aQaFv3.js.map +0 -1
- package/dist/client-9Ld2_lnt.js +0 -786
- package/dist/client-9Ld2_lnt.js.map +0 -1
- package/dist/client-BmMRlvlM.d.ts +0 -5313
- package/dist/do-oauth-client-provider-CswoD5Lu.js.map +0 -1
- package/dist/src-Dz0H9hSU.js.map +0 -1
package/dist/mcp/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "../
|
|
3
|
-
import
|
|
4
|
-
import "../
|
|
5
|
-
import
|
|
1
|
+
import "../context-BkKbAa1R.js";
|
|
2
|
+
import { t as MessageType } from "../ai-types-CwgHzwUb.js";
|
|
3
|
+
import "../client-CcyhkGfN.js";
|
|
4
|
+
import "../client-QZa2Rq0l.js";
|
|
5
|
+
import "../do-oauth-client-provider-B1fVIshX.js";
|
|
6
|
+
import { c as getCurrentAgent, s as getAgentByName, t as Agent } from "../src-BmbDclOA.js";
|
|
6
7
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
8
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
9
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
7
10
|
import { ElicitRequestSchema, InitializeRequestSchema, JSONRPCMessageSchema, isInitializeRequest, isJSONRPCError, isJSONRPCNotification, isJSONRPCRequest, isJSONRPCResponse } from "@modelcontextprotocol/sdk/types.js";
|
|
8
11
|
|
|
9
12
|
//#region src/mcp/utils.ts
|
|
@@ -21,7 +24,7 @@ const MCP_HTTP_METHOD_HEADER = "cf-mcp-method";
|
|
|
21
24
|
*/
|
|
22
25
|
const MCP_MESSAGE_HEADER = "cf-mcp-message";
|
|
23
26
|
const MAXIMUM_MESSAGE_SIZE_BYTES = 4 * 1024 * 1024;
|
|
24
|
-
const createStreamingHttpHandler = (basePath, namespace,
|
|
27
|
+
const createStreamingHttpHandler = (basePath, namespace, options = {}) => {
|
|
25
28
|
let pathname = basePath;
|
|
26
29
|
if (basePath === "/") pathname = "/*";
|
|
27
30
|
const basePattern = new URLPattern({ pathname });
|
|
@@ -130,7 +133,10 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
130
133
|
return new Response(body$1, { status: 400 });
|
|
131
134
|
}
|
|
132
135
|
sessionId = sessionId ?? namespace.newUniqueId().toString();
|
|
133
|
-
const agent = await getAgentByName(namespace, `streamable-http:${sessionId}`, {
|
|
136
|
+
const agent = await getAgentByName(namespace, `streamable-http:${sessionId}`, {
|
|
137
|
+
props: ctx.props,
|
|
138
|
+
jurisdiction: options.jurisdiction
|
|
139
|
+
});
|
|
134
140
|
const isInitialized = await agent.getInitializeRequest();
|
|
135
141
|
if (maybeInitializeRequest) await agent.setInitializeRequest(maybeInitializeRequest);
|
|
136
142
|
else if (!isInitialized) {
|
|
@@ -205,7 +211,7 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
205
211
|
if (messages.every((msg) => isJSONRPCNotification(msg) || isJSONRPCResponse(msg))) {
|
|
206
212
|
ws.close();
|
|
207
213
|
return new Response(null, {
|
|
208
|
-
headers: corsHeaders(request, corsOptions),
|
|
214
|
+
headers: corsHeaders(request, options.corsOptions),
|
|
209
215
|
status: 202
|
|
210
216
|
});
|
|
211
217
|
}
|
|
@@ -215,7 +221,7 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
215
221
|
Connection: "keep-alive",
|
|
216
222
|
"Content-Type": "text/event-stream",
|
|
217
223
|
"mcp-session-id": sessionId,
|
|
218
|
-
...corsHeaders(request, corsOptions)
|
|
224
|
+
...corsHeaders(request, options.corsOptions)
|
|
219
225
|
},
|
|
220
226
|
status: 200
|
|
221
227
|
});
|
|
@@ -243,7 +249,10 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
243
249
|
const { readable, writable } = new TransformStream();
|
|
244
250
|
const writer = writable.getWriter();
|
|
245
251
|
const encoder = new TextEncoder();
|
|
246
|
-
const agent = await getAgentByName(namespace, `streamable-http:${sessionId}`, {
|
|
252
|
+
const agent = await getAgentByName(namespace, `streamable-http:${sessionId}`, {
|
|
253
|
+
props: ctx.props,
|
|
254
|
+
jurisdiction: options.jurisdiction
|
|
255
|
+
});
|
|
247
256
|
if (!await agent.getInitializeRequest()) return new Response(JSON.stringify({
|
|
248
257
|
jsonrpc: "2.0",
|
|
249
258
|
error: {
|
|
@@ -292,7 +301,7 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
292
301
|
Connection: "keep-alive",
|
|
293
302
|
"Content-Type": "text/event-stream",
|
|
294
303
|
"mcp-session-id": sessionId,
|
|
295
|
-
...corsHeaders(request, corsOptions)
|
|
304
|
+
...corsHeaders(request, options.corsOptions)
|
|
296
305
|
},
|
|
297
306
|
status: 200
|
|
298
307
|
});
|
|
@@ -307,9 +316,9 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
307
316
|
id: null
|
|
308
317
|
}), {
|
|
309
318
|
status: 400,
|
|
310
|
-
headers: corsHeaders(request, corsOptions)
|
|
319
|
+
headers: corsHeaders(request, options.corsOptions)
|
|
311
320
|
});
|
|
312
|
-
const agent = await getAgentByName(namespace, `streamable-http:${sessionId}
|
|
321
|
+
const agent = await getAgentByName(namespace, `streamable-http:${sessionId}`, { jurisdiction: options.jurisdiction });
|
|
313
322
|
if (!await agent.getInitializeRequest()) return new Response(JSON.stringify({
|
|
314
323
|
jsonrpc: "2.0",
|
|
315
324
|
error: {
|
|
@@ -319,12 +328,12 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
319
328
|
id: null
|
|
320
329
|
}), {
|
|
321
330
|
status: 404,
|
|
322
|
-
headers: corsHeaders(request, corsOptions)
|
|
331
|
+
headers: corsHeaders(request, options.corsOptions)
|
|
323
332
|
});
|
|
324
333
|
ctx.waitUntil(agent.destroy().catch(() => {}));
|
|
325
334
|
return new Response(null, {
|
|
326
335
|
status: 204,
|
|
327
|
-
headers: corsHeaders(request, corsOptions)
|
|
336
|
+
headers: corsHeaders(request, options.corsOptions)
|
|
328
337
|
});
|
|
329
338
|
}
|
|
330
339
|
}
|
|
@@ -339,7 +348,7 @@ const createStreamingHttpHandler = (basePath, namespace, corsOptions) => {
|
|
|
339
348
|
return new Response(body, { status: 404 });
|
|
340
349
|
};
|
|
341
350
|
};
|
|
342
|
-
const createLegacySseHandler = (basePath, namespace,
|
|
351
|
+
const createLegacySseHandler = (basePath, namespace, options = {}) => {
|
|
343
352
|
let pathname = basePath;
|
|
344
353
|
if (basePath === "/") pathname = "/*";
|
|
345
354
|
const basePattern = new URLPattern({ pathname });
|
|
@@ -356,7 +365,10 @@ const createLegacySseHandler = (basePath, namespace, corsOptions) => {
|
|
|
356
365
|
endpointUrl.searchParams.set("sessionId", sessionId);
|
|
357
366
|
const endpointMessage = `event: endpoint\ndata: ${endpointUrl.pathname + endpointUrl.search + endpointUrl.hash}\n\n`;
|
|
358
367
|
writer.write(encoder.encode(endpointMessage));
|
|
359
|
-
const agent = await getAgentByName(namespace, `sse:${sessionId}`, {
|
|
368
|
+
const agent = await getAgentByName(namespace, `sse:${sessionId}`, {
|
|
369
|
+
props: ctx.props,
|
|
370
|
+
jurisdiction: options.jurisdiction
|
|
371
|
+
});
|
|
360
372
|
const existingHeaders = {};
|
|
361
373
|
request.headers.forEach((value, key) => {
|
|
362
374
|
existingHeaders[key] = value;
|
|
@@ -408,7 +420,7 @@ const createLegacySseHandler = (basePath, namespace, corsOptions) => {
|
|
|
408
420
|
"Cache-Control": "no-cache",
|
|
409
421
|
Connection: "keep-alive",
|
|
410
422
|
"Content-Type": "text/event-stream",
|
|
411
|
-
...corsHeaders(request, corsOptions)
|
|
423
|
+
...corsHeaders(request, options.corsOptions)
|
|
412
424
|
} });
|
|
413
425
|
}
|
|
414
426
|
if (request.method === "POST" && messagePattern.test(url)) {
|
|
@@ -418,15 +430,19 @@ const createLegacySseHandler = (basePath, namespace, corsOptions) => {
|
|
|
418
430
|
if (!contentType.includes("application/json")) return new Response(`Unsupported content-type: ${contentType}`, { status: 400 });
|
|
419
431
|
const contentLength = Number.parseInt(request.headers.get("content-length") || "0", 10);
|
|
420
432
|
if (contentLength > MAXIMUM_MESSAGE_SIZE_BYTES) return new Response(`Request body too large: ${contentLength} bytes`, { status: 400 });
|
|
421
|
-
const agent = await getAgentByName(namespace, `sse:${sessionId}`, {
|
|
433
|
+
const agent = await getAgentByName(namespace, `sse:${sessionId}`, {
|
|
434
|
+
props: ctx.props,
|
|
435
|
+
jurisdiction: options.jurisdiction
|
|
436
|
+
});
|
|
422
437
|
const messageBody = await request.json();
|
|
423
|
-
const
|
|
438
|
+
const extraInfo = { requestInfo: { headers: Object.fromEntries(request.headers.entries()) } };
|
|
439
|
+
const error = await agent.onSSEMcpMessage(sessionId, messageBody, extraInfo);
|
|
424
440
|
if (error) return new Response(error.message, {
|
|
425
441
|
headers: {
|
|
426
442
|
"Cache-Control": "no-cache",
|
|
427
443
|
Connection: "keep-alive",
|
|
428
444
|
"Content-Type": "text/event-stream",
|
|
429
|
-
...corsHeaders(request, corsOptions)
|
|
445
|
+
...corsHeaders(request, options.corsOptions)
|
|
430
446
|
},
|
|
431
447
|
status: 400
|
|
432
448
|
});
|
|
@@ -435,7 +451,7 @@ const createLegacySseHandler = (basePath, namespace, corsOptions) => {
|
|
|
435
451
|
"Cache-Control": "no-cache",
|
|
436
452
|
Connection: "keep-alive",
|
|
437
453
|
"Content-Type": "text/event-stream",
|
|
438
|
-
...corsHeaders(request, corsOptions)
|
|
454
|
+
...corsHeaders(request, options.corsOptions)
|
|
439
455
|
},
|
|
440
456
|
status: 202
|
|
441
457
|
});
|
|
@@ -464,9 +480,12 @@ function isDurableObjectNamespace(namespace) {
|
|
|
464
480
|
//#endregion
|
|
465
481
|
//#region src/mcp/transport.ts
|
|
466
482
|
var McpSSETransport = class {
|
|
467
|
-
constructor(
|
|
483
|
+
constructor() {
|
|
468
484
|
this._started = false;
|
|
469
|
-
|
|
485
|
+
const { agent } = getCurrentAgent();
|
|
486
|
+
if (!agent) throw new Error("McpAgent was not found in Transport constructor");
|
|
487
|
+
this.sessionId = agent.getSessionId();
|
|
488
|
+
this._getWebSocket = () => agent.getWebSocket();
|
|
470
489
|
}
|
|
471
490
|
async start() {
|
|
472
491
|
if (this._started) throw new Error("Transport already started");
|
|
@@ -625,8 +644,43 @@ var StreamableHTTPServerTransport = class {
|
|
|
625
644
|
}
|
|
626
645
|
};
|
|
627
646
|
|
|
647
|
+
//#endregion
|
|
648
|
+
//#region src/mcp/client-transports.ts
|
|
649
|
+
/**
|
|
650
|
+
* Deprecated transport wrappers
|
|
651
|
+
*/
|
|
652
|
+
let didWarnAboutSSEEdgeClientTransport = false;
|
|
653
|
+
/**
|
|
654
|
+
* @deprecated Use SSEClientTransport from @modelcontextprotocol/sdk/client/sse.js instead. This alias will be removed in the next major version.
|
|
655
|
+
*/
|
|
656
|
+
var SSEEdgeClientTransport = class extends SSEClientTransport {
|
|
657
|
+
constructor(url, options) {
|
|
658
|
+
super(url, options);
|
|
659
|
+
if (!didWarnAboutSSEEdgeClientTransport) {
|
|
660
|
+
didWarnAboutSSEEdgeClientTransport = true;
|
|
661
|
+
console.warn("SSEEdgeClientTransport is deprecated. Use SSEClientTransport from @modelcontextprotocol/sdk/client/sse.js instead. SSEEdgeClientTransport will be removed in the next major version.");
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
};
|
|
665
|
+
let didWarnAboutStreamableHTTPEdgeClientTransport = false;
|
|
666
|
+
/**
|
|
667
|
+
* @deprecated Use StreamableHTTPClientTransport from @modelcontextprotocol/sdk/client/streamableHttp.js instead. This alias will be removed in the next major version.
|
|
668
|
+
*/
|
|
669
|
+
var StreamableHTTPEdgeClientTransport = class extends StreamableHTTPClientTransport {
|
|
670
|
+
constructor(url, options) {
|
|
671
|
+
super(url, options);
|
|
672
|
+
if (!didWarnAboutStreamableHTTPEdgeClientTransport) {
|
|
673
|
+
didWarnAboutStreamableHTTPEdgeClientTransport = true;
|
|
674
|
+
console.warn("StreamableHTTPEdgeClientTransport is deprecated. Use StreamableHTTPClientTransport from @modelcontextprotocol/sdk/client/streamableHttp.js instead. StreamableHTTPEdgeClientTransport will be removed in the next major version.");
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
};
|
|
678
|
+
|
|
628
679
|
//#endregion
|
|
629
680
|
//#region src/mcp/worker-transport.ts
|
|
681
|
+
const SUPPORTED_PROTOCOL_VERSIONS = ["2025-03-26", "2025-06-18"];
|
|
682
|
+
const DEFAULT_PROTOCOL_VERSION = "2025-03-26";
|
|
683
|
+
const MCP_PROTOCOL_VERSION_HEADER = "MCP-Protocol-Version";
|
|
630
684
|
var WorkerTransport = class {
|
|
631
685
|
constructor(options) {
|
|
632
686
|
this.started = false;
|
|
@@ -636,15 +690,113 @@ var WorkerTransport = class {
|
|
|
636
690
|
this.streamMapping = /* @__PURE__ */ new Map();
|
|
637
691
|
this.requestToStreamMapping = /* @__PURE__ */ new Map();
|
|
638
692
|
this.requestResponseMap = /* @__PURE__ */ new Map();
|
|
693
|
+
this.stateRestored = false;
|
|
639
694
|
this.sessionIdGenerator = options?.sessionIdGenerator;
|
|
640
695
|
this.enableJsonResponse = options?.enableJsonResponse ?? false;
|
|
641
696
|
this.onsessioninitialized = options?.onsessioninitialized;
|
|
697
|
+
this.corsOptions = options?.corsOptions;
|
|
698
|
+
this.storage = options?.storage;
|
|
699
|
+
}
|
|
700
|
+
/**
|
|
701
|
+
* Restore transport state from persistent storage.
|
|
702
|
+
* This is automatically called on start.
|
|
703
|
+
*/
|
|
704
|
+
async restoreState() {
|
|
705
|
+
if (!this.storage || this.stateRestored) return;
|
|
706
|
+
const state = await Promise.resolve(this.storage.get());
|
|
707
|
+
if (state) {
|
|
708
|
+
this.sessionId = state.sessionId;
|
|
709
|
+
this.initialized = state.initialized;
|
|
710
|
+
this.protocolVersion = state.protocolVersion;
|
|
711
|
+
}
|
|
712
|
+
this.stateRestored = true;
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* Persist current transport state to storage.
|
|
716
|
+
*/
|
|
717
|
+
async saveState() {
|
|
718
|
+
if (!this.storage) return;
|
|
719
|
+
const state = {
|
|
720
|
+
sessionId: this.sessionId,
|
|
721
|
+
initialized: this.initialized,
|
|
722
|
+
protocolVersion: this.protocolVersion
|
|
723
|
+
};
|
|
724
|
+
await Promise.resolve(this.storage.set(state));
|
|
642
725
|
}
|
|
643
726
|
async start() {
|
|
644
727
|
if (this.started) throw new Error("Transport already started");
|
|
645
728
|
this.started = true;
|
|
646
729
|
}
|
|
730
|
+
validateProtocolVersion(request) {
|
|
731
|
+
const versionHeader = request.headers.get(MCP_PROTOCOL_VERSION_HEADER);
|
|
732
|
+
if (!versionHeader) {
|
|
733
|
+
if (!this.protocolVersion || this.protocolVersion === DEFAULT_PROTOCOL_VERSION) return;
|
|
734
|
+
return new Response(JSON.stringify({
|
|
735
|
+
jsonrpc: "2.0",
|
|
736
|
+
error: {
|
|
737
|
+
code: -32e3,
|
|
738
|
+
message: `Bad Request: ${MCP_PROTOCOL_VERSION_HEADER} header is required`
|
|
739
|
+
},
|
|
740
|
+
id: null
|
|
741
|
+
}), {
|
|
742
|
+
status: 400,
|
|
743
|
+
headers: {
|
|
744
|
+
"Content-Type": "application/json",
|
|
745
|
+
...this.getHeaders()
|
|
746
|
+
}
|
|
747
|
+
});
|
|
748
|
+
}
|
|
749
|
+
if (!SUPPORTED_PROTOCOL_VERSIONS.includes(versionHeader)) return new Response(JSON.stringify({
|
|
750
|
+
jsonrpc: "2.0",
|
|
751
|
+
error: {
|
|
752
|
+
code: -32e3,
|
|
753
|
+
message: `Bad Request: Unsupported ${MCP_PROTOCOL_VERSION_HEADER}: ${versionHeader}. Supported versions: ${SUPPORTED_PROTOCOL_VERSIONS.join(", ")}`
|
|
754
|
+
},
|
|
755
|
+
id: null
|
|
756
|
+
}), {
|
|
757
|
+
status: 400,
|
|
758
|
+
headers: {
|
|
759
|
+
"Content-Type": "application/json",
|
|
760
|
+
...this.getHeaders()
|
|
761
|
+
}
|
|
762
|
+
});
|
|
763
|
+
if (this.protocolVersion && versionHeader !== this.protocolVersion) return new Response(JSON.stringify({
|
|
764
|
+
jsonrpc: "2.0",
|
|
765
|
+
error: {
|
|
766
|
+
code: -32e3,
|
|
767
|
+
message: `Bad Request: ${MCP_PROTOCOL_VERSION_HEADER} mismatch. Expected: ${this.protocolVersion}, Got: ${versionHeader}`
|
|
768
|
+
},
|
|
769
|
+
id: null
|
|
770
|
+
}), {
|
|
771
|
+
status: 400,
|
|
772
|
+
headers: {
|
|
773
|
+
"Content-Type": "application/json",
|
|
774
|
+
...this.getHeaders()
|
|
775
|
+
}
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
getHeaders({ forPreflight } = {}) {
|
|
779
|
+
const options = {
|
|
780
|
+
origin: "*",
|
|
781
|
+
headers: "Content-Type, Accept, Authorization, mcp-session-id, MCP-Protocol-Version",
|
|
782
|
+
methods: "GET, POST, DELETE, OPTIONS",
|
|
783
|
+
exposeHeaders: "mcp-session-id",
|
|
784
|
+
maxAge: 86400,
|
|
785
|
+
...this.corsOptions
|
|
786
|
+
};
|
|
787
|
+
if (forPreflight) return {
|
|
788
|
+
"Access-Control-Allow-Origin": options.origin,
|
|
789
|
+
"Access-Control-Allow-Headers": options.headers,
|
|
790
|
+
"Access-Control-Allow-Methods": options.methods,
|
|
791
|
+
"Access-Control-Max-Age": options.maxAge.toString()
|
|
792
|
+
};
|
|
793
|
+
return {
|
|
794
|
+
"Access-Control-Allow-Origin": options.origin,
|
|
795
|
+
"Access-Control-Expose-Headers": options.exposeHeaders
|
|
796
|
+
};
|
|
797
|
+
}
|
|
647
798
|
async handleRequest(request, parsedBody) {
|
|
799
|
+
await this.restoreState();
|
|
648
800
|
switch (request.method) {
|
|
649
801
|
case "OPTIONS": return this.handleOptionsRequest(request);
|
|
650
802
|
case "GET": return this.handleGetRequest(request);
|
|
@@ -663,10 +815,15 @@ var WorkerTransport = class {
|
|
|
663
815
|
id: null
|
|
664
816
|
}), {
|
|
665
817
|
status: 406,
|
|
666
|
-
headers: {
|
|
818
|
+
headers: {
|
|
819
|
+
"Content-Type": "application/json",
|
|
820
|
+
...this.getHeaders()
|
|
821
|
+
}
|
|
667
822
|
});
|
|
668
|
-
const
|
|
669
|
-
if (
|
|
823
|
+
const sessionError = this.validateSession(request);
|
|
824
|
+
if (sessionError) return sessionError;
|
|
825
|
+
const versionError = this.validateProtocolVersion(request);
|
|
826
|
+
if (versionError) return versionError;
|
|
670
827
|
const streamId = this.standaloneSseStreamId;
|
|
671
828
|
if (this.streamMapping.get(streamId) !== void 0) return new Response(JSON.stringify({
|
|
672
829
|
jsonrpc: "2.0",
|
|
@@ -677,7 +834,10 @@ var WorkerTransport = class {
|
|
|
677
834
|
id: null
|
|
678
835
|
}), {
|
|
679
836
|
status: 409,
|
|
680
|
-
headers: {
|
|
837
|
+
headers: {
|
|
838
|
+
"Content-Type": "application/json",
|
|
839
|
+
...this.getHeaders()
|
|
840
|
+
}
|
|
681
841
|
});
|
|
682
842
|
const { readable, writable } = new TransformStream();
|
|
683
843
|
const writer = writable.getWriter();
|
|
@@ -686,8 +846,7 @@ var WorkerTransport = class {
|
|
|
686
846
|
"Content-Type": "text/event-stream",
|
|
687
847
|
"Cache-Control": "no-cache",
|
|
688
848
|
Connection: "keep-alive",
|
|
689
|
-
|
|
690
|
-
"Access-Control-Expose-Headers": "mcp-session-id"
|
|
849
|
+
...this.getHeaders()
|
|
691
850
|
});
|
|
692
851
|
if (this.sessionId !== void 0) headers.set("mcp-session-id", this.sessionId);
|
|
693
852
|
const keepAlive = setInterval(() => {
|
|
@@ -710,7 +869,7 @@ var WorkerTransport = class {
|
|
|
710
869
|
}
|
|
711
870
|
async handlePostRequest(request, parsedBody) {
|
|
712
871
|
const acceptHeader = request.headers.get("Accept");
|
|
713
|
-
if (!acceptHeader?.includes("application/json") || !acceptHeader
|
|
872
|
+
if (!acceptHeader?.includes("application/json") || !acceptHeader?.includes("text/event-stream")) return new Response(JSON.stringify({
|
|
714
873
|
jsonrpc: "2.0",
|
|
715
874
|
error: {
|
|
716
875
|
code: -32e3,
|
|
@@ -719,7 +878,10 @@ var WorkerTransport = class {
|
|
|
719
878
|
id: null
|
|
720
879
|
}), {
|
|
721
880
|
status: 406,
|
|
722
|
-
headers: {
|
|
881
|
+
headers: {
|
|
882
|
+
"Content-Type": "application/json",
|
|
883
|
+
...this.getHeaders()
|
|
884
|
+
}
|
|
723
885
|
});
|
|
724
886
|
if (!request.headers.get("Content-Type")?.includes("application/json")) return new Response(JSON.stringify({
|
|
725
887
|
jsonrpc: "2.0",
|
|
@@ -730,7 +892,10 @@ var WorkerTransport = class {
|
|
|
730
892
|
id: null
|
|
731
893
|
}), {
|
|
732
894
|
status: 415,
|
|
733
|
-
headers: {
|
|
895
|
+
headers: {
|
|
896
|
+
"Content-Type": "application/json",
|
|
897
|
+
...this.getHeaders()
|
|
898
|
+
}
|
|
734
899
|
});
|
|
735
900
|
let rawMessage = parsedBody;
|
|
736
901
|
if (rawMessage === void 0) try {
|
|
@@ -745,7 +910,10 @@ var WorkerTransport = class {
|
|
|
745
910
|
id: null
|
|
746
911
|
}), {
|
|
747
912
|
status: 400,
|
|
748
|
-
headers: {
|
|
913
|
+
headers: {
|
|
914
|
+
"Content-Type": "application/json",
|
|
915
|
+
...this.getHeaders()
|
|
916
|
+
}
|
|
749
917
|
});
|
|
750
918
|
}
|
|
751
919
|
let messages;
|
|
@@ -762,9 +930,13 @@ var WorkerTransport = class {
|
|
|
762
930
|
id: null
|
|
763
931
|
}), {
|
|
764
932
|
status: 400,
|
|
765
|
-
headers: {
|
|
933
|
+
headers: {
|
|
934
|
+
"Content-Type": "application/json",
|
|
935
|
+
...this.getHeaders()
|
|
936
|
+
}
|
|
766
937
|
});
|
|
767
938
|
}
|
|
939
|
+
const requestInfo = { headers: Object.fromEntries(request.headers.entries()) };
|
|
768
940
|
const isInitializationRequest = messages.some(isInitializeRequest);
|
|
769
941
|
if (isInitializationRequest) {
|
|
770
942
|
if (this.initialized && this.sessionId !== void 0) return new Response(JSON.stringify({
|
|
@@ -776,7 +948,10 @@ var WorkerTransport = class {
|
|
|
776
948
|
id: null
|
|
777
949
|
}), {
|
|
778
950
|
status: 400,
|
|
779
|
-
headers: {
|
|
951
|
+
headers: {
|
|
952
|
+
"Content-Type": "application/json",
|
|
953
|
+
...this.getHeaders()
|
|
954
|
+
}
|
|
780
955
|
});
|
|
781
956
|
if (messages.length > 1) return new Response(JSON.stringify({
|
|
782
957
|
jsonrpc: "2.0",
|
|
@@ -787,21 +962,33 @@ var WorkerTransport = class {
|
|
|
787
962
|
id: null
|
|
788
963
|
}), {
|
|
789
964
|
status: 400,
|
|
790
|
-
headers: {
|
|
965
|
+
headers: {
|
|
966
|
+
"Content-Type": "application/json",
|
|
967
|
+
...this.getHeaders()
|
|
968
|
+
}
|
|
791
969
|
});
|
|
970
|
+
const initRequest = messages.find(isInitializeRequest);
|
|
971
|
+
if (initRequest?.params) {
|
|
972
|
+
const version = initRequest.params.protocolVersion;
|
|
973
|
+
if (version && SUPPORTED_PROTOCOL_VERSIONS.includes(version)) this.protocolVersion = version;
|
|
974
|
+
else this.protocolVersion = DEFAULT_PROTOCOL_VERSION;
|
|
975
|
+
}
|
|
792
976
|
this.sessionId = this.sessionIdGenerator?.();
|
|
793
977
|
this.initialized = true;
|
|
978
|
+
await this.saveState();
|
|
794
979
|
if (this.sessionId && this.onsessioninitialized) this.onsessioninitialized(this.sessionId);
|
|
795
980
|
}
|
|
796
981
|
if (!isInitializationRequest) {
|
|
797
|
-
const
|
|
798
|
-
if (
|
|
982
|
+
const sessionError = this.validateSession(request);
|
|
983
|
+
if (sessionError) return sessionError;
|
|
984
|
+
const versionError = this.validateProtocolVersion(request);
|
|
985
|
+
if (versionError) return versionError;
|
|
799
986
|
}
|
|
800
987
|
if (!messages.some(isJSONRPCRequest)) {
|
|
801
|
-
for (const message of messages) this.onmessage?.(message);
|
|
988
|
+
for (const message of messages) this.onmessage?.(message, { requestInfo });
|
|
802
989
|
return new Response(null, {
|
|
803
990
|
status: 202,
|
|
804
|
-
headers: {
|
|
991
|
+
headers: { ...this.getHeaders() }
|
|
805
992
|
});
|
|
806
993
|
}
|
|
807
994
|
const streamId = crypto.randomUUID();
|
|
@@ -813,7 +1000,7 @@ var WorkerTransport = class {
|
|
|
813
1000
|
}
|
|
814
1001
|
});
|
|
815
1002
|
for (const message of messages) if (isJSONRPCRequest(message)) this.requestToStreamMapping.set(message.id, streamId);
|
|
816
|
-
for (const message of messages) this.onmessage?.(message);
|
|
1003
|
+
for (const message of messages) this.onmessage?.(message, { requestInfo });
|
|
817
1004
|
});
|
|
818
1005
|
const { readable, writable } = new TransformStream();
|
|
819
1006
|
const writer = writable.getWriter();
|
|
@@ -822,8 +1009,7 @@ var WorkerTransport = class {
|
|
|
822
1009
|
"Content-Type": "text/event-stream",
|
|
823
1010
|
"Cache-Control": "no-cache",
|
|
824
1011
|
Connection: "keep-alive",
|
|
825
|
-
|
|
826
|
-
"Access-Control-Expose-Headers": "mcp-session-id"
|
|
1012
|
+
...this.getHeaders()
|
|
827
1013
|
});
|
|
828
1014
|
if (this.sessionId !== void 0) headers.set("mcp-session-id", this.sessionId);
|
|
829
1015
|
this.streamMapping.set(streamId, {
|
|
@@ -835,28 +1021,24 @@ var WorkerTransport = class {
|
|
|
835
1021
|
}
|
|
836
1022
|
});
|
|
837
1023
|
for (const message of messages) if (isJSONRPCRequest(message)) this.requestToStreamMapping.set(message.id, streamId);
|
|
838
|
-
for (const message of messages) this.onmessage?.(message);
|
|
1024
|
+
for (const message of messages) this.onmessage?.(message, { requestInfo });
|
|
839
1025
|
return new Response(readable, { headers });
|
|
840
1026
|
}
|
|
841
1027
|
async handleDeleteRequest(request) {
|
|
842
|
-
const
|
|
843
|
-
if (
|
|
1028
|
+
const sessionError = this.validateSession(request);
|
|
1029
|
+
if (sessionError) return sessionError;
|
|
1030
|
+
const versionError = this.validateProtocolVersion(request);
|
|
1031
|
+
if (versionError) return versionError;
|
|
844
1032
|
await this.close();
|
|
845
1033
|
return new Response(null, {
|
|
846
1034
|
status: 200,
|
|
847
|
-
headers: {
|
|
1035
|
+
headers: { ...this.getHeaders() }
|
|
848
1036
|
});
|
|
849
1037
|
}
|
|
850
1038
|
handleOptionsRequest(_request) {
|
|
851
|
-
const headers = new Headers({
|
|
852
|
-
"Access-Control-Allow-Origin": "*",
|
|
853
|
-
"Access-Control-Allow-Methods": "GET, POST, DELETE, OPTIONS",
|
|
854
|
-
"Access-Control-Allow-Headers": "Content-Type, Accept, Authorization, mcp-session-id",
|
|
855
|
-
"Access-Control-Max-Age": "86400"
|
|
856
|
-
});
|
|
857
1039
|
return new Response(null, {
|
|
858
|
-
status:
|
|
859
|
-
headers
|
|
1040
|
+
status: 200,
|
|
1041
|
+
headers: { ...this.getHeaders({ forPreflight: true }) }
|
|
860
1042
|
});
|
|
861
1043
|
}
|
|
862
1044
|
handleUnsupportedRequest() {
|
|
@@ -876,7 +1058,7 @@ var WorkerTransport = class {
|
|
|
876
1058
|
});
|
|
877
1059
|
}
|
|
878
1060
|
validateSession(request) {
|
|
879
|
-
if (this.sessionIdGenerator === void 0) return
|
|
1061
|
+
if (this.sessionIdGenerator === void 0) return;
|
|
880
1062
|
if (!this.initialized) return new Response(JSON.stringify({
|
|
881
1063
|
jsonrpc: "2.0",
|
|
882
1064
|
error: {
|
|
@@ -886,7 +1068,10 @@ var WorkerTransport = class {
|
|
|
886
1068
|
id: null
|
|
887
1069
|
}), {
|
|
888
1070
|
status: 400,
|
|
889
|
-
headers: {
|
|
1071
|
+
headers: {
|
|
1072
|
+
"Content-Type": "application/json",
|
|
1073
|
+
...this.getHeaders()
|
|
1074
|
+
}
|
|
890
1075
|
});
|
|
891
1076
|
const sessionId = request.headers.get("mcp-session-id");
|
|
892
1077
|
if (!sessionId) return new Response(JSON.stringify({
|
|
@@ -898,7 +1083,10 @@ var WorkerTransport = class {
|
|
|
898
1083
|
id: null
|
|
899
1084
|
}), {
|
|
900
1085
|
status: 400,
|
|
901
|
-
headers: {
|
|
1086
|
+
headers: {
|
|
1087
|
+
"Content-Type": "application/json",
|
|
1088
|
+
...this.getHeaders()
|
|
1089
|
+
}
|
|
902
1090
|
});
|
|
903
1091
|
if (sessionId !== this.sessionId) return new Response(JSON.stringify({
|
|
904
1092
|
jsonrpc: "2.0",
|
|
@@ -909,9 +1097,11 @@ var WorkerTransport = class {
|
|
|
909
1097
|
id: null
|
|
910
1098
|
}), {
|
|
911
1099
|
status: 404,
|
|
912
|
-
headers: {
|
|
1100
|
+
headers: {
|
|
1101
|
+
"Content-Type": "application/json",
|
|
1102
|
+
...this.getHeaders()
|
|
1103
|
+
}
|
|
913
1104
|
});
|
|
914
|
-
return true;
|
|
915
1105
|
}
|
|
916
1106
|
async close() {
|
|
917
1107
|
for (const { cleanup } of this.streamMapping.values()) cleanup();
|
|
@@ -919,8 +1109,8 @@ var WorkerTransport = class {
|
|
|
919
1109
|
this.requestResponseMap.clear();
|
|
920
1110
|
this.onclose?.();
|
|
921
1111
|
}
|
|
922
|
-
async send(message) {
|
|
923
|
-
let requestId;
|
|
1112
|
+
async send(message, options) {
|
|
1113
|
+
let requestId = options?.relatedRequestId;
|
|
924
1114
|
if (isJSONRPCResponse(message) || isJSONRPCError(message)) requestId = message.id;
|
|
925
1115
|
if (requestId === void 0) {
|
|
926
1116
|
if (isJSONRPCResponse(message) || isJSONRPCError(message)) throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");
|
|
@@ -950,8 +1140,7 @@ var WorkerTransport = class {
|
|
|
950
1140
|
const responses = relatedIds.map((id) => this.requestResponseMap.get(id));
|
|
951
1141
|
const headers = new Headers({
|
|
952
1142
|
"Content-Type": "application/json",
|
|
953
|
-
|
|
954
|
-
"Access-Control-Expose-Headers": "mcp-session-id"
|
|
1143
|
+
...this.getHeaders()
|
|
955
1144
|
});
|
|
956
1145
|
if (this.sessionId !== void 0) headers.set("mcp-session-id", this.sessionId);
|
|
957
1146
|
const body = responses.length === 1 ? responses[0] : responses;
|
|
@@ -978,23 +1167,30 @@ function runWithAuthContext(context, fn) {
|
|
|
978
1167
|
|
|
979
1168
|
//#endregion
|
|
980
1169
|
//#region src/mcp/handler.ts
|
|
981
|
-
function
|
|
1170
|
+
function createMcpHandler(server, options = {}) {
|
|
982
1171
|
const route = options.route ?? "/mcp";
|
|
983
1172
|
return async (request, _env, ctx) => {
|
|
984
1173
|
const url = new URL(request.url);
|
|
985
1174
|
if (route && url.pathname !== route) return new Response("Not Found", { status: 404 });
|
|
986
|
-
const
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
1175
|
+
const transport = options.transport ?? new WorkerTransport({
|
|
1176
|
+
sessionIdGenerator: options.sessionIdGenerator,
|
|
1177
|
+
enableJsonResponse: options.enableJsonResponse,
|
|
1178
|
+
onsessioninitialized: options.onsessioninitialized,
|
|
1179
|
+
corsOptions: options.corsOptions,
|
|
1180
|
+
storage: options.storage
|
|
1181
|
+
});
|
|
1182
|
+
const buildAuthContext = () => {
|
|
1183
|
+
if (options.authContext) return options.authContext;
|
|
1184
|
+
if (ctx.props && Object.keys(ctx.props).length > 0) return { props: ctx.props };
|
|
1185
|
+
};
|
|
990
1186
|
const handleRequest = async () => {
|
|
991
1187
|
return await transport.handleRequest(request);
|
|
992
1188
|
};
|
|
1189
|
+
const authContext = buildAuthContext();
|
|
1190
|
+
if (!transport.started) await server.connect(transport);
|
|
993
1191
|
try {
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
else response = await handleRequest();
|
|
997
|
-
return response;
|
|
1192
|
+
if (authContext) return await runWithAuthContext(authContext, handleRequest);
|
|
1193
|
+
else return await handleRequest();
|
|
998
1194
|
} catch (error) {
|
|
999
1195
|
console.error("MCP handler error:", error);
|
|
1000
1196
|
return new Response(JSON.stringify({
|
|
@@ -1011,6 +1207,17 @@ function experimental_createMcpHandler(server, options = {}) {
|
|
|
1011
1207
|
}
|
|
1012
1208
|
};
|
|
1013
1209
|
}
|
|
1210
|
+
let didWarnAboutExperimentalCreateMcpHandler = false;
|
|
1211
|
+
/**
|
|
1212
|
+
* @deprecated This has been renamed to createMcpHandler, and experimental_createMcpHandler will be removed in the next major version
|
|
1213
|
+
*/
|
|
1214
|
+
function experimental_createMcpHandler(server, options = {}) {
|
|
1215
|
+
if (!didWarnAboutExperimentalCreateMcpHandler) {
|
|
1216
|
+
didWarnAboutExperimentalCreateMcpHandler = true;
|
|
1217
|
+
console.warn("experimental_createMcpHandler is deprecated, use createMcpHandler instead. experimental_createMcpHandler will be removed in the next major version.");
|
|
1218
|
+
}
|
|
1219
|
+
return createMcpHandler(server, options);
|
|
1220
|
+
}
|
|
1014
1221
|
|
|
1015
1222
|
//#endregion
|
|
1016
1223
|
//#region src/mcp/index.ts
|
|
@@ -1051,7 +1258,7 @@ var McpAgent = class McpAgent extends Agent {
|
|
|
1051
1258
|
/** Returns a new transport matching the type of the Agent. */
|
|
1052
1259
|
initTransport() {
|
|
1053
1260
|
switch (this.getTransportType()) {
|
|
1054
|
-
case "sse": return new McpSSETransport(
|
|
1261
|
+
case "sse": return new McpSSETransport();
|
|
1055
1262
|
case "streamable-http": return new StreamableHTTPServerTransport({});
|
|
1056
1263
|
}
|
|
1057
1264
|
}
|
|
@@ -1104,7 +1311,7 @@ var McpAgent = class McpAgent extends Agent {
|
|
|
1104
1311
|
}
|
|
1105
1312
|
}
|
|
1106
1313
|
/** Handles MCP Messages for the legacy SSE transport. */
|
|
1107
|
-
async onSSEMcpMessage(_sessionId, messageBody) {
|
|
1314
|
+
async onSSEMcpMessage(_sessionId, messageBody, extraInfo) {
|
|
1108
1315
|
if (this.getTransportType() !== "sse") return /* @__PURE__ */ new Error("Internal Server Error: Expected SSE transport");
|
|
1109
1316
|
try {
|
|
1110
1317
|
let parsedMessage;
|
|
@@ -1115,7 +1322,7 @@ var McpAgent = class McpAgent extends Agent {
|
|
|
1115
1322
|
throw error;
|
|
1116
1323
|
}
|
|
1117
1324
|
if (await this._handleElicitationResponse(parsedMessage)) return null;
|
|
1118
|
-
this._transport?.onmessage?.(parsedMessage);
|
|
1325
|
+
this._transport?.onmessage?.(parsedMessage, extraInfo);
|
|
1119
1326
|
return null;
|
|
1120
1327
|
} catch (error) {
|
|
1121
1328
|
console.error("Error forwarding message to SSE:", error);
|
|
@@ -1201,7 +1408,7 @@ var McpAgent = class McpAgent extends Agent {
|
|
|
1201
1408
|
/** Return a handler for the given path for this MCP.
|
|
1202
1409
|
* Defaults to Streamable HTTP transport.
|
|
1203
1410
|
*/
|
|
1204
|
-
static serve(path, { binding = "MCP_OBJECT", corsOptions, transport = "streamable-http" } = {}) {
|
|
1411
|
+
static serve(path, { binding = "MCP_OBJECT", corsOptions, transport = "streamable-http", jurisdiction } = {}) {
|
|
1205
1412
|
return { async fetch(request, env, ctx) {
|
|
1206
1413
|
const corsResponse = handleCORS(request, corsOptions);
|
|
1207
1414
|
if (corsResponse) return corsResponse;
|
|
@@ -1210,8 +1417,14 @@ var McpAgent = class McpAgent extends Agent {
|
|
|
1210
1417
|
if (!isDurableObjectNamespace(bindingValue)) throw new Error(`Invalid McpAgent binding for ${binding}. Make sure it's a Durable Object binding.`);
|
|
1211
1418
|
const namespace = bindingValue;
|
|
1212
1419
|
switch (transport) {
|
|
1213
|
-
case "streamable-http": return createStreamingHttpHandler(path, namespace,
|
|
1214
|
-
|
|
1420
|
+
case "streamable-http": return createStreamingHttpHandler(path, namespace, {
|
|
1421
|
+
corsOptions,
|
|
1422
|
+
jurisdiction
|
|
1423
|
+
})(request, ctx);
|
|
1424
|
+
case "sse": return createLegacySseHandler(path, namespace, {
|
|
1425
|
+
corsOptions,
|
|
1426
|
+
jurisdiction
|
|
1427
|
+
})(request, ctx);
|
|
1215
1428
|
default: return new Response("Invalid MCP transport mode. Only `streamable-http` or `sse` are allowed.", { status: 500 });
|
|
1216
1429
|
}
|
|
1217
1430
|
} };
|
|
@@ -1231,5 +1444,5 @@ var McpAgent = class McpAgent extends Agent {
|
|
|
1231
1444
|
};
|
|
1232
1445
|
|
|
1233
1446
|
//#endregion
|
|
1234
|
-
export { ElicitRequestSchema, McpAgent, SSEEdgeClientTransport, StreamableHTTPEdgeClientTransport, WorkerTransport, experimental_createMcpHandler, getMcpAuthContext };
|
|
1447
|
+
export { ElicitRequestSchema, McpAgent, SSEEdgeClientTransport, StreamableHTTPEdgeClientTransport, WorkerTransport, createMcpHandler, experimental_createMcpHandler, getMcpAuthContext };
|
|
1235
1448
|
//# sourceMappingURL=index.js.map
|