@mcp-ts/sdk 1.5.0 → 1.5.2
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 +1 -1
- package/dist/adapters/agui-adapter.d.ts +1 -1
- package/dist/adapters/agui-adapter.js +43 -9
- package/dist/adapters/agui-adapter.js.map +1 -1
- package/dist/adapters/agui-adapter.mjs +43 -9
- package/dist/adapters/agui-adapter.mjs.map +1 -1
- package/dist/adapters/agui-middleware.d.mts +1 -1
- package/dist/adapters/agui-middleware.d.ts +1 -1
- 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 +1 -1
- package/dist/adapters/ai-adapter.d.ts +1 -1
- package/dist/adapters/ai-adapter.js +42 -8
- package/dist/adapters/ai-adapter.js.map +1 -1
- package/dist/adapters/ai-adapter.mjs +42 -8
- package/dist/adapters/ai-adapter.mjs.map +1 -1
- package/dist/adapters/langchain-adapter.d.mts +1 -1
- package/dist/adapters/langchain-adapter.d.ts +1 -1
- package/dist/adapters/langchain-adapter.js +42 -8
- package/dist/adapters/langchain-adapter.js.map +1 -1
- package/dist/adapters/langchain-adapter.mjs +42 -8
- package/dist/adapters/langchain-adapter.mjs.map +1 -1
- package/dist/client/react.d.mts +91 -2
- package/dist/client/react.d.ts +91 -2
- package/dist/client/react.js +339 -3
- package/dist/client/react.js.map +1 -1
- package/dist/client/react.mjs +335 -4
- package/dist/client/react.mjs.map +1 -1
- package/dist/client/vue.d.mts +10 -0
- package/dist/client/vue.d.ts +10 -0
- package/dist/client/vue.js +28 -2
- package/dist/client/vue.js.map +1 -1
- package/dist/client/vue.mjs +28 -2
- package/dist/client/vue.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +170 -37
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +170 -37
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.js +55 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +55 -11
- package/dist/server/index.mjs.map +1 -1
- package/dist/shared/index.d.mts +2 -2
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.js +115 -26
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs +115 -26
- package/dist/shared/index.mjs.map +1 -1
- package/dist/{tool-router-XnWVxPzv.d.mts → tool-router-DK0RJblO.d.mts} +3 -0
- package/dist/{tool-router-Bo8qZbsD.d.ts → tool-router-DsKhRmJm.d.ts} +3 -0
- package/package.json +1 -1
- package/src/adapters/agui-adapter.ts +7 -7
- package/src/adapters/ai-adapter.ts +5 -5
- package/src/adapters/langchain-adapter.ts +5 -5
- package/src/client/react/index.ts +14 -0
- package/src/client/react/oauth-popup.tsx +446 -0
- package/src/client/react/use-mcp.ts +84 -3
- package/src/client/vue/use-mcp.ts +80 -3
- package/src/server/handlers/sse-handler.ts +39 -0
- package/src/server/mcp/oauth-client.ts +32 -14
- package/src/shared/meta-tools.ts +62 -13
- package/src/shared/tool-index.ts +85 -12
- package/src/shared/tool-router.ts +8 -7
- package/supabase/migrations/20260421010000_add_session_cleanup_cron.sql +32 -0
package/dist/server/index.mjs
CHANGED
|
@@ -1645,13 +1645,8 @@ var MCPClient = class _MCPClient {
|
|
|
1645
1645
|
this.transportType = transportType;
|
|
1646
1646
|
this.emitStateChange("CONNECTED");
|
|
1647
1647
|
this.emitProgress("Connected successfully");
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
const needsTtlPromotion = !existingSession || existingSession.active !== true;
|
|
1651
|
-
if (needsTransportUpdate || needsTtlPromotion) {
|
|
1652
|
-
console.log(`[MCPClient] Saving session ${this.sessionId} with 12hr TTL (connect success)`);
|
|
1653
|
-
await this.saveSession(SESSION_TTL_SECONDS, true);
|
|
1654
|
-
}
|
|
1648
|
+
console.log(`[MCPClient] Saving session ${this.sessionId} with 12hr TTL (connect success)`);
|
|
1649
|
+
await this.saveSession(SESSION_TTL_SECONDS, true);
|
|
1655
1650
|
} catch (error) {
|
|
1656
1651
|
if (error instanceof UnauthorizedError$1 || error instanceof Error && error.message.toLowerCase().includes("unauthorized")) {
|
|
1657
1652
|
let authUrl = "";
|
|
@@ -1689,6 +1684,13 @@ var MCPClient = class _MCPClient {
|
|
|
1689
1684
|
const errorMessage = error instanceof Error ? error.message : "Connection failed";
|
|
1690
1685
|
this.emitError(errorMessage, "connection");
|
|
1691
1686
|
this.emitStateChange("FAILED");
|
|
1687
|
+
try {
|
|
1688
|
+
const existingSession = await storage.getSession(this.identity, this.sessionId);
|
|
1689
|
+
if (!existingSession || existingSession.active !== true) {
|
|
1690
|
+
await storage.removeSession(this.identity, this.sessionId);
|
|
1691
|
+
}
|
|
1692
|
+
} catch {
|
|
1693
|
+
}
|
|
1692
1694
|
throw error;
|
|
1693
1695
|
}
|
|
1694
1696
|
}
|
|
@@ -1712,6 +1714,7 @@ var MCPClient = class _MCPClient {
|
|
|
1712
1714
|
const transportsToTry = this.transportType ? [this.transportType] : ["streamable_http", "sse"];
|
|
1713
1715
|
let lastError;
|
|
1714
1716
|
let tokensExchanged = false;
|
|
1717
|
+
let authenticatedStateEmitted = false;
|
|
1715
1718
|
for (const currentType of transportsToTry) {
|
|
1716
1719
|
const isLastAttempt = currentType === transportsToTry[transportsToTry.length - 1];
|
|
1717
1720
|
try {
|
|
@@ -1723,8 +1726,10 @@ var MCPClient = class _MCPClient {
|
|
|
1723
1726
|
} else {
|
|
1724
1727
|
this.emitProgress(`Tokens already exchanged, skipping auth step for ${currentType}...`);
|
|
1725
1728
|
}
|
|
1726
|
-
|
|
1727
|
-
|
|
1729
|
+
if (!authenticatedStateEmitted) {
|
|
1730
|
+
this.emitStateChange("AUTHENTICATED");
|
|
1731
|
+
authenticatedStateEmitted = true;
|
|
1732
|
+
}
|
|
1728
1733
|
this.emitProgress("Creating authenticated client...");
|
|
1729
1734
|
this.client = new Client(
|
|
1730
1735
|
{
|
|
@@ -1743,6 +1748,7 @@ var MCPClient = class _MCPClient {
|
|
|
1743
1748
|
);
|
|
1744
1749
|
this.emitStateChange("CONNECTING");
|
|
1745
1750
|
await this.client.connect(this.transport);
|
|
1751
|
+
this.transportType = currentType;
|
|
1746
1752
|
this.emitStateChange("CONNECTED");
|
|
1747
1753
|
console.log(`[MCPClient] Updating session ${this.sessionId} to 12hr TTL (OAuth complete)`);
|
|
1748
1754
|
await this.saveSession(SESSION_TTL_SECONDS, true);
|
|
@@ -2609,9 +2615,23 @@ var SSEConnectionManager = class {
|
|
|
2609
2615
|
if (existing) {
|
|
2610
2616
|
return existing;
|
|
2611
2617
|
}
|
|
2618
|
+
const session = await storage.getSession(this.identity, sessionId);
|
|
2619
|
+
if (!session) {
|
|
2620
|
+
throw new Error("Session not found");
|
|
2621
|
+
}
|
|
2612
2622
|
const client = new MCPClient({
|
|
2613
2623
|
identity: this.identity,
|
|
2614
|
-
sessionId
|
|
2624
|
+
sessionId,
|
|
2625
|
+
// These fields are optional in MCPClient, but when rehydrating a known
|
|
2626
|
+
// stored session on the server we pass them explicitly to preserve the
|
|
2627
|
+
// original transport/connection metadata instead of relying on lazy
|
|
2628
|
+
// reloading during initialize().
|
|
2629
|
+
serverId: session.serverId,
|
|
2630
|
+
serverName: session.serverName,
|
|
2631
|
+
serverUrl: session.serverUrl,
|
|
2632
|
+
callbackUrl: session.callbackUrl,
|
|
2633
|
+
transportType: session.transportType,
|
|
2634
|
+
headers: session.headers
|
|
2615
2635
|
});
|
|
2616
2636
|
client.onConnectionEvent((event) => this.emitConnectionEvent(event));
|
|
2617
2637
|
client.onObservabilityEvent((event) => this.sendEvent(event));
|
|
@@ -2668,6 +2688,16 @@ var SSEConnectionManager = class {
|
|
|
2668
2688
|
const client = new MCPClient({
|
|
2669
2689
|
identity: this.identity,
|
|
2670
2690
|
sessionId,
|
|
2691
|
+
// These fields are optional in MCPClient, but when rehydrating a known
|
|
2692
|
+
// stored session on the server we pass them explicitly to preserve the
|
|
2693
|
+
// original transport/connection metadata instead of relying on lazy
|
|
2694
|
+
// reloading during initialize().
|
|
2695
|
+
serverId: session.serverId,
|
|
2696
|
+
serverName: session.serverName,
|
|
2697
|
+
serverUrl: session.serverUrl,
|
|
2698
|
+
callbackUrl: session.callbackUrl,
|
|
2699
|
+
transportType: session.transportType,
|
|
2700
|
+
headers: session.headers,
|
|
2671
2701
|
...clientMetadata
|
|
2672
2702
|
});
|
|
2673
2703
|
client.onConnectionEvent((event) => this.emitConnectionEvent(event));
|
|
@@ -2700,7 +2730,21 @@ var SSEConnectionManager = class {
|
|
|
2700
2730
|
try {
|
|
2701
2731
|
const client = new MCPClient({
|
|
2702
2732
|
identity: this.identity,
|
|
2703
|
-
sessionId
|
|
2733
|
+
sessionId,
|
|
2734
|
+
// These fields are optional in MCPClient, but when rehydrating a known
|
|
2735
|
+
// stored session on the server we pass them explicitly to preserve the
|
|
2736
|
+
// original connection metadata instead of relying on lazy
|
|
2737
|
+
// reloading during initialize().
|
|
2738
|
+
serverId: session.serverId,
|
|
2739
|
+
serverName: session.serverName,
|
|
2740
|
+
serverUrl: session.serverUrl,
|
|
2741
|
+
callbackUrl: session.callbackUrl,
|
|
2742
|
+
// NOTE: transportType is intentionally omitted here.
|
|
2743
|
+
// The session's stored transportType is a placeholder ('streamable_http')
|
|
2744
|
+
// set before transport negotiation. Omitting it lets MCPClient auto-negotiate
|
|
2745
|
+
// (try streamable_http → SSE fallback), which is critical for servers like
|
|
2746
|
+
// Neon that only support SSE transport.
|
|
2747
|
+
headers: session.headers
|
|
2704
2748
|
});
|
|
2705
2749
|
client.onConnectionEvent((event) => this.emitConnectionEvent(event));
|
|
2706
2750
|
await client.finishAuth(code);
|