@mcp-ts/sdk 2.4.5 → 2.5.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.
- package/dist/adapters/agui-adapter.d.mts +3 -3
- package/dist/adapters/agui-adapter.d.ts +3 -3
- package/dist/adapters/agui-adapter.js.map +1 -1
- package/dist/adapters/agui-adapter.mjs.map +1 -1
- package/dist/adapters/agui-middleware.d.mts +3 -3
- package/dist/adapters/agui-middleware.d.ts +3 -3
- package/dist/adapters/agui-middleware.js.map +1 -1
- package/dist/adapters/agui-middleware.mjs.map +1 -1
- package/dist/adapters/ai-adapter.d.mts +3 -3
- package/dist/adapters/ai-adapter.d.ts +3 -3
- package/dist/adapters/ai-adapter.js.map +1 -1
- package/dist/adapters/ai-adapter.mjs.map +1 -1
- package/dist/adapters/langchain-adapter.d.mts +3 -3
- package/dist/adapters/langchain-adapter.d.ts +3 -3
- package/dist/adapters/langchain-adapter.js +2 -2
- package/dist/adapters/langchain-adapter.js.map +1 -1
- package/dist/adapters/langchain-adapter.mjs +2 -2
- package/dist/adapters/langchain-adapter.mjs.map +1 -1
- package/dist/adapters/mastra-adapter.d.mts +2 -2
- package/dist/adapters/mastra-adapter.d.ts +2 -2
- package/dist/adapters/mastra-adapter.js +2 -2
- package/dist/adapters/mastra-adapter.js.map +1 -1
- package/dist/adapters/mastra-adapter.mjs +2 -2
- package/dist/adapters/mastra-adapter.mjs.map +1 -1
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +9 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +9 -0
- package/dist/client/index.mjs.map +1 -1
- package/dist/client/react.d.mts +15 -4
- package/dist/client/react.d.ts +15 -4
- package/dist/client/react.js +56 -37
- package/dist/client/react.js.map +1 -1
- package/dist/client/react.mjs +56 -37
- package/dist/client/react.mjs.map +1 -1
- package/dist/client/vue.d.mts +4 -4
- package/dist/client/vue.d.ts +4 -4
- package/dist/client/vue.js +9 -0
- package/dist/client/vue.js.map +1 -1
- package/dist/client/vue.mjs +9 -0
- package/dist/client/vue.mjs.map +1 -1
- package/dist/{index-CZk2gu2E.d.ts → index-BEdyuz1M.d.ts} +6 -1
- package/dist/{index-CkM3p0eE.d.mts → index-C99wE2Zf.d.mts} +6 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +380 -82
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +376 -82
- package/dist/index.mjs.map +1 -1
- package/dist/{multi-session-client-QOOPdEVp.d.ts → multi-session-client-CclWRxTD.d.mts} +14 -2
- package/dist/{multi-session-client-ChQrBZhF.d.mts → multi-session-client-DzvZD6Tt.d.ts} +14 -2
- package/dist/server/index.d.mts +18 -4
- package/dist/server/index.d.ts +18 -4
- package/dist/server/index.js +371 -82
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +367 -82
- package/dist/server/index.mjs.map +1 -1
- package/dist/shared/index.d.mts +4 -4
- package/dist/shared/index.d.ts +4 -4
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs.map +1 -1
- package/dist/{tool-router-CGs3IDOJ.d.mts → tool-router-C9ECn3FX.d.mts} +1 -1
- package/dist/{tool-router-DQ-HrD7W.d.ts → tool-router-CUSSk6lT.d.ts} +1 -1
- package/dist/{types-Bf-7GOLW.d.mts → types-CbFbPkfQ.d.mts} +38 -3
- package/dist/{types-Bf-7GOLW.d.ts → types-CbFbPkfQ.d.ts} +38 -3
- package/migrations/neon/20260513010000_install_mcp_sessions.sql +1 -0
- package/migrations/supabase/20260330195700_install_mcp_sessions.sql +1 -0
- package/package.json +2 -2
- package/src/adapters/agui-adapter.ts +6 -2
- package/src/adapters/ai-adapter.ts +3 -1
- package/src/adapters/langchain-adapter.ts +5 -3
- package/src/adapters/mastra-adapter.ts +5 -3
- package/src/client/core/sse-client.ts +21 -0
- package/src/client/react/oauth-popup.tsx +17 -24
- package/src/client/react/use-mcp.ts +69 -15
- package/src/server/handlers/sse-handler.ts +202 -9
- package/src/server/mcp/multi-session-client.ts +7 -3
- package/src/server/mcp/oauth-client.ts +25 -10
- package/src/server/mcp/tool-policy-gateway.ts +90 -0
- package/src/server/storage/neon-backend.ts +65 -60
- package/src/server/storage/session-lifecycle.ts +5 -0
- package/src/server/storage/supabase-backend.ts +27 -15
- package/src/server/storage/tool-policy.ts +89 -0
- package/src/server/storage/types.ts +11 -0
- package/src/shared/types.ts +52 -1
package/dist/client/react.mjs
CHANGED
|
@@ -37,6 +37,15 @@ var SSEClient = class {
|
|
|
37
37
|
async disconnectFromServer(sessionId) {
|
|
38
38
|
return this.sendRequest("disconnect", { sessionId });
|
|
39
39
|
}
|
|
40
|
+
async reconnectToServer(params) {
|
|
41
|
+
return this.sendRequest("reconnect", params);
|
|
42
|
+
}
|
|
43
|
+
async setToolPolicy(sessionId, toolPolicy) {
|
|
44
|
+
return this.sendRequest("setToolPolicy", { sessionId, toolPolicy });
|
|
45
|
+
}
|
|
46
|
+
async getToolPolicy(sessionId) {
|
|
47
|
+
return this.sendRequest("getToolPolicy", { sessionId });
|
|
48
|
+
}
|
|
40
49
|
async listTools(sessionId) {
|
|
41
50
|
return this.sendRequest("listTools", { sessionId });
|
|
42
51
|
}
|
|
@@ -423,6 +432,7 @@ function useMcp(options) {
|
|
|
423
432
|
state: getInitialConnectionState(s.status),
|
|
424
433
|
createdAt: new Date(s.createdAt),
|
|
425
434
|
updatedAt: new Date(s.updatedAt ?? s.createdAt),
|
|
435
|
+
toolPolicy: s.toolPolicy,
|
|
426
436
|
tools: []
|
|
427
437
|
}))
|
|
428
438
|
);
|
|
@@ -468,21 +478,10 @@ function useMcp(options) {
|
|
|
468
478
|
if (!clientRef.current) {
|
|
469
479
|
throw new Error("SSE client not initialized");
|
|
470
480
|
}
|
|
471
|
-
const
|
|
472
|
-
(c) => c.serverId === params.serverId || c.serverUrl === params.serverUrl
|
|
473
|
-
);
|
|
474
|
-
if (existing) {
|
|
475
|
-
await clientRef.current.disconnectFromServer(existing.sessionId);
|
|
476
|
-
if (isMountedRef.current) {
|
|
477
|
-
setConnections(
|
|
478
|
-
(prev) => prev.filter((c) => c.sessionId !== existing.sessionId)
|
|
479
|
-
);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
const result = await clientRef.current.connectToServer(params);
|
|
481
|
+
const result = await clientRef.current.reconnectToServer(params);
|
|
483
482
|
return result.sessionId;
|
|
484
483
|
},
|
|
485
|
-
[
|
|
484
|
+
[]
|
|
486
485
|
);
|
|
487
486
|
const disconnect = useCallback(async (sessionId) => {
|
|
488
487
|
if (!clientRef.current) {
|
|
@@ -530,6 +529,29 @@ function useMcp(options) {
|
|
|
530
529
|
}
|
|
531
530
|
return await clientRef.current.listTools(sessionId);
|
|
532
531
|
}, []);
|
|
532
|
+
const updateToolPolicy = useCallback(async (sessionId, toolPolicy) => {
|
|
533
|
+
if (!clientRef.current) {
|
|
534
|
+
throw new Error("SSE client not initialized");
|
|
535
|
+
}
|
|
536
|
+
const result = await clientRef.current.setToolPolicy(sessionId, toolPolicy);
|
|
537
|
+
if (isMountedRef.current) {
|
|
538
|
+
setConnections((prev) => prev.map(
|
|
539
|
+
(connection) => connection.sessionId === sessionId ? {
|
|
540
|
+
...connection,
|
|
541
|
+
toolPolicy: result.toolPolicy,
|
|
542
|
+
tools: result.tools,
|
|
543
|
+
updatedAt: /* @__PURE__ */ new Date()
|
|
544
|
+
} : connection
|
|
545
|
+
));
|
|
546
|
+
}
|
|
547
|
+
return result;
|
|
548
|
+
}, []);
|
|
549
|
+
const getToolAccess = useCallback(async (sessionId) => {
|
|
550
|
+
if (!clientRef.current) {
|
|
551
|
+
throw new Error("SSE client not initialized");
|
|
552
|
+
}
|
|
553
|
+
return await clientRef.current.getToolPolicy(sessionId);
|
|
554
|
+
}, []);
|
|
533
555
|
const listPrompts = useCallback(async (sessionId) => {
|
|
534
556
|
if (!clientRef.current) {
|
|
535
557
|
throw new Error("SSE client not initialized");
|
|
@@ -598,6 +620,8 @@ function useMcp(options) {
|
|
|
598
620
|
resumeAuth,
|
|
599
621
|
callTool,
|
|
600
622
|
listTools,
|
|
623
|
+
updateToolPolicy,
|
|
624
|
+
getToolAccess,
|
|
601
625
|
listPrompts,
|
|
602
626
|
getPrompt,
|
|
603
627
|
listResources,
|
|
@@ -622,6 +646,8 @@ function useMcp(options) {
|
|
|
622
646
|
resumeAuth,
|
|
623
647
|
callTool,
|
|
624
648
|
listTools,
|
|
649
|
+
updateToolPolicy,
|
|
650
|
+
getToolAccess,
|
|
625
651
|
listPrompts,
|
|
626
652
|
getPrompt,
|
|
627
653
|
listResources,
|
|
@@ -706,7 +732,6 @@ function createOAuthPopupRedirectHandler(options = {}) {
|
|
|
706
732
|
openCenteredPopup(url, {
|
|
707
733
|
...options,
|
|
708
734
|
onBlocked: options.onBlocked ?? ((blockedUrl) => {
|
|
709
|
-
window.alert("Popup blocked! Allow popups for this site to complete authentication.");
|
|
710
735
|
window.location.href = blockedUrl;
|
|
711
736
|
})
|
|
712
737
|
});
|
|
@@ -727,28 +752,24 @@ function useMcpOAuthPopup(connections, finishAuth) {
|
|
|
727
752
|
const popupWindow = event.source && "postMessage" in event.source ? event.source : null;
|
|
728
753
|
const rawState = typeof event.data.state === "string" ? event.data.state : typeof event.data.sessionId === "string" ? event.data.sessionId : "";
|
|
729
754
|
const targetSessionId = rawState ? parseOAuthState(rawState)?.sessionId || rawState : "";
|
|
730
|
-
if (
|
|
755
|
+
if (targetSessionId) {
|
|
731
756
|
pendingPopupsRef.current.set(targetSessionId, { popupWindow, state: rawState });
|
|
732
757
|
}
|
|
733
758
|
if (!targetSessionId) {
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
});
|
|
739
|
-
}
|
|
759
|
+
postPopupResult(popupWindow, {
|
|
760
|
+
success: false,
|
|
761
|
+
error: "Missing OAuth session identifier"
|
|
762
|
+
});
|
|
740
763
|
return;
|
|
741
764
|
}
|
|
742
765
|
const targetSession = connections.find((connection) => connection.sessionId === targetSessionId);
|
|
743
766
|
if (!targetSession) {
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
});
|
|
751
|
-
}
|
|
767
|
+
postPopupResult(popupWindow, {
|
|
768
|
+
sessionId: targetSessionId,
|
|
769
|
+
state: rawState,
|
|
770
|
+
success: false,
|
|
771
|
+
error: "OAuth session not found in the current client state"
|
|
772
|
+
});
|
|
752
773
|
return;
|
|
753
774
|
}
|
|
754
775
|
const codeKey = `${targetSession.sessionId}:${code}`;
|
|
@@ -761,14 +782,12 @@ function useMcpOAuthPopup(connections, finishAuth) {
|
|
|
761
782
|
} catch (error) {
|
|
762
783
|
processingCodesRef.current.delete(codeKey);
|
|
763
784
|
pendingPopupsRef.current.delete(targetSession.sessionId);
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
});
|
|
771
|
-
}
|
|
785
|
+
postPopupResult(popupWindow, {
|
|
786
|
+
sessionId: rawState,
|
|
787
|
+
state: rawState,
|
|
788
|
+
success: false,
|
|
789
|
+
error: error instanceof Error ? error.message : "Failed to finish auth"
|
|
790
|
+
});
|
|
772
791
|
}
|
|
773
792
|
};
|
|
774
793
|
const channel = createAuthBroadcastChannel();
|