integrate-sdk 0.7.43 → 0.7.45
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/index.js +80 -35
- package/dist/adapters/solid-start.js +80 -35
- package/dist/adapters/svelte-kit.js +80 -35
- package/dist/ai/index.d.ts +1 -3
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +4 -33
- package/dist/ai/vercel-ai.d.ts +6 -2
- package/dist/ai/vercel-ai.d.ts.map +1 -1
- package/dist/ai/vercel-ai.js +4 -1
- package/dist/index.js +80 -35
- package/dist/server.js +84 -67
- package/dist/src/ai/index.d.ts +1 -3
- package/dist/src/ai/index.d.ts.map +1 -1
- package/dist/src/ai/vercel-ai.d.ts +6 -2
- package/dist/src/ai/vercel-ai.d.ts.map +1 -1
- package/dist/src/client.d.ts +9 -4
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +105 -0
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/oauth/manager.d.ts +32 -12
- package/dist/src/oauth/manager.d.ts.map +1 -1
- package/dist/src/server.d.ts +2 -1
- package/dist/src/server.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/ai/openai-agents.d.ts +0 -99
- package/dist/ai/openai-agents.d.ts.map +0 -1
- package/dist/ai/openai-agents.js +0 -4235
- package/dist/src/ai/openai-agents.d.ts +0 -99
- package/dist/src/ai/openai-agents.d.ts.map +0 -1
|
@@ -982,7 +982,9 @@ class OAuthManager {
|
|
|
982
982
|
flowConfig;
|
|
983
983
|
oauthApiBase;
|
|
984
984
|
apiBaseUrl;
|
|
985
|
-
|
|
985
|
+
getTokenCallback;
|
|
986
|
+
setTokenCallback;
|
|
987
|
+
constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
|
|
986
988
|
this.oauthApiBase = oauthApiBase;
|
|
987
989
|
this.apiBaseUrl = apiBaseUrl;
|
|
988
990
|
this.windowManager = new OAuthWindowManager;
|
|
@@ -991,6 +993,8 @@ class OAuthManager {
|
|
|
991
993
|
popupOptions: flowConfig?.popupOptions,
|
|
992
994
|
onAuthCallback: flowConfig?.onAuthCallback
|
|
993
995
|
};
|
|
996
|
+
this.getTokenCallback = tokenCallbacks?.getProviderToken;
|
|
997
|
+
this.setTokenCallback = tokenCallbacks?.setProviderToken;
|
|
994
998
|
this.cleanupExpiredPendingAuths();
|
|
995
999
|
}
|
|
996
1000
|
async initiateFlow(provider, config, returnUrl) {
|
|
@@ -1054,7 +1058,7 @@ class OAuthManager {
|
|
|
1054
1058
|
scopes: response.scopes
|
|
1055
1059
|
};
|
|
1056
1060
|
this.providerTokens.set(pendingAuth.provider, tokenData);
|
|
1057
|
-
this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1061
|
+
await this.saveProviderToken(pendingAuth.provider, tokenData);
|
|
1058
1062
|
this.pendingAuths.delete(state);
|
|
1059
1063
|
this.removePendingAuthFromStorage(state);
|
|
1060
1064
|
return { ...tokenData, provider: pendingAuth.provider };
|
|
@@ -1065,7 +1069,7 @@ class OAuthManager {
|
|
|
1065
1069
|
}
|
|
1066
1070
|
}
|
|
1067
1071
|
async checkAuthStatus(provider) {
|
|
1068
|
-
const tokenData = this.
|
|
1072
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1069
1073
|
if (!tokenData) {
|
|
1070
1074
|
return {
|
|
1071
1075
|
authorized: false,
|
|
@@ -1080,26 +1084,38 @@ class OAuthManager {
|
|
|
1080
1084
|
};
|
|
1081
1085
|
}
|
|
1082
1086
|
async disconnectProvider(provider) {
|
|
1083
|
-
const tokenData = this.
|
|
1087
|
+
const tokenData = await this.getProviderToken(provider);
|
|
1084
1088
|
if (!tokenData) {
|
|
1085
1089
|
throw new Error(`No access token available for provider "${provider}". Cannot disconnect provider.`);
|
|
1086
1090
|
}
|
|
1087
1091
|
this.providerTokens.delete(provider);
|
|
1088
1092
|
this.clearProviderToken(provider);
|
|
1089
1093
|
}
|
|
1090
|
-
getProviderToken(provider) {
|
|
1094
|
+
async getProviderToken(provider, context) {
|
|
1095
|
+
if (this.getTokenCallback) {
|
|
1096
|
+
try {
|
|
1097
|
+
const tokenData = await this.getTokenCallback(provider, context);
|
|
1098
|
+
if (tokenData) {
|
|
1099
|
+
this.providerTokens.set(provider, tokenData);
|
|
1100
|
+
}
|
|
1101
|
+
return tokenData;
|
|
1102
|
+
} catch (error) {
|
|
1103
|
+
console.error(`Failed to get token for ${provider} via callback:`, error);
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1091
1107
|
return this.providerTokens.get(provider);
|
|
1092
1108
|
}
|
|
1093
1109
|
getAllProviderTokens() {
|
|
1094
1110
|
return new Map(this.providerTokens);
|
|
1095
1111
|
}
|
|
1096
|
-
setProviderToken(provider, tokenData) {
|
|
1112
|
+
async setProviderToken(provider, tokenData, context) {
|
|
1097
1113
|
this.providerTokens.set(provider, tokenData);
|
|
1098
|
-
this.saveProviderToken(provider, tokenData);
|
|
1114
|
+
await this.saveProviderToken(provider, tokenData, context);
|
|
1099
1115
|
}
|
|
1100
1116
|
clearProviderToken(provider) {
|
|
1101
1117
|
this.providerTokens.delete(provider);
|
|
1102
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1118
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1103
1119
|
try {
|
|
1104
1120
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
1105
1121
|
} catch (error) {
|
|
@@ -1110,7 +1126,7 @@ class OAuthManager {
|
|
|
1110
1126
|
clearAllProviderTokens() {
|
|
1111
1127
|
const providers = Array.from(this.providerTokens.keys());
|
|
1112
1128
|
this.providerTokens.clear();
|
|
1113
|
-
if (typeof window !== "undefined" && window.localStorage) {
|
|
1129
|
+
if (!this.getTokenCallback && typeof window !== "undefined" && window.localStorage) {
|
|
1114
1130
|
for (const provider of providers) {
|
|
1115
1131
|
try {
|
|
1116
1132
|
window.localStorage.removeItem(`integrate_token_${provider}`);
|
|
@@ -1138,7 +1154,16 @@ class OAuthManager {
|
|
|
1138
1154
|
}
|
|
1139
1155
|
}
|
|
1140
1156
|
}
|
|
1141
|
-
saveProviderToken(provider, tokenData) {
|
|
1157
|
+
async saveProviderToken(provider, tokenData, context) {
|
|
1158
|
+
if (this.setTokenCallback) {
|
|
1159
|
+
try {
|
|
1160
|
+
await this.setTokenCallback(provider, tokenData, context);
|
|
1161
|
+
} catch (error) {
|
|
1162
|
+
console.error(`Failed to save token for ${provider} via callback:`, error);
|
|
1163
|
+
throw error;
|
|
1164
|
+
}
|
|
1165
|
+
return;
|
|
1166
|
+
}
|
|
1142
1167
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1143
1168
|
try {
|
|
1144
1169
|
const key = `integrate_token_${provider}`;
|
|
@@ -1148,7 +1173,15 @@ class OAuthManager {
|
|
|
1148
1173
|
}
|
|
1149
1174
|
}
|
|
1150
1175
|
}
|
|
1151
|
-
loadProviderToken(provider) {
|
|
1176
|
+
async loadProviderToken(provider) {
|
|
1177
|
+
if (this.getTokenCallback) {
|
|
1178
|
+
try {
|
|
1179
|
+
return await this.getTokenCallback(provider);
|
|
1180
|
+
} catch (error) {
|
|
1181
|
+
console.error(`Failed to load token for ${provider} via callback:`, error);
|
|
1182
|
+
return;
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1152
1185
|
if (typeof window !== "undefined" && window.localStorage) {
|
|
1153
1186
|
try {
|
|
1154
1187
|
const key = `integrate_token_${provider}`;
|
|
@@ -1162,9 +1195,9 @@ class OAuthManager {
|
|
|
1162
1195
|
}
|
|
1163
1196
|
return;
|
|
1164
1197
|
}
|
|
1165
|
-
loadAllProviderTokens(providers) {
|
|
1198
|
+
async loadAllProviderTokens(providers) {
|
|
1166
1199
|
for (const provider of providers) {
|
|
1167
|
-
const tokenData = this.loadProviderToken(provider);
|
|
1200
|
+
const tokenData = await this.loadProviderToken(provider);
|
|
1168
1201
|
if (tokenData) {
|
|
1169
1202
|
this.providerTokens.set(provider, tokenData);
|
|
1170
1203
|
}
|
|
@@ -1362,16 +1395,28 @@ class MCPClientBase {
|
|
|
1362
1395
|
};
|
|
1363
1396
|
this.onReauthRequired = config.onReauthRequired;
|
|
1364
1397
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
1365
|
-
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl
|
|
1398
|
+
this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
|
|
1399
|
+
getProviderToken: config.getProviderToken,
|
|
1400
|
+
setProviderToken: config.setProviderToken
|
|
1401
|
+
});
|
|
1366
1402
|
const providers = this.integrations.filter((p) => p.oauth).map((p) => p.oauth.provider);
|
|
1367
|
-
this.oauthManager.loadAllProviderTokens(providers)
|
|
1403
|
+
this.oauthManager.loadAllProviderTokens(providers).catch((error) => {
|
|
1404
|
+
console.error("Failed to load provider tokens:", error);
|
|
1405
|
+
});
|
|
1368
1406
|
for (const integration of this.integrations) {
|
|
1369
1407
|
for (const toolName of integration.tools) {
|
|
1370
1408
|
this.enabledToolNames.add(toolName);
|
|
1371
1409
|
}
|
|
1372
1410
|
if (integration.oauth) {
|
|
1373
|
-
const
|
|
1374
|
-
this.authState.set(
|
|
1411
|
+
const provider = integration.oauth.provider;
|
|
1412
|
+
this.authState.set(provider, { authenticated: false });
|
|
1413
|
+
this.oauthManager.getProviderToken(provider).then((tokenData) => {
|
|
1414
|
+
if (tokenData) {
|
|
1415
|
+
this.authState.set(provider, { authenticated: true });
|
|
1416
|
+
}
|
|
1417
|
+
}).catch((error) => {
|
|
1418
|
+
console.error(`Failed to check token for ${provider}:`, error);
|
|
1419
|
+
});
|
|
1375
1420
|
}
|
|
1376
1421
|
}
|
|
1377
1422
|
const integrationIds = this.integrations.map((i) => i.id);
|
|
@@ -1399,9 +1444,9 @@ class MCPClientBase {
|
|
|
1399
1444
|
}
|
|
1400
1445
|
return new Proxy({}, {
|
|
1401
1446
|
get: (_target, methodName) => {
|
|
1402
|
-
return async (args) => {
|
|
1447
|
+
return async (args, options) => {
|
|
1403
1448
|
const toolName = methodToToolName(methodName, integrationId);
|
|
1404
|
-
return await this.callToolWithRetry(toolName, args, 0);
|
|
1449
|
+
return await this.callToolWithRetry(toolName, args, 0, options);
|
|
1405
1450
|
};
|
|
1406
1451
|
}
|
|
1407
1452
|
});
|
|
@@ -1409,17 +1454,17 @@ class MCPClientBase {
|
|
|
1409
1454
|
createServerProxy() {
|
|
1410
1455
|
return new Proxy({}, {
|
|
1411
1456
|
get: (_target, methodName) => {
|
|
1412
|
-
return async (args) => {
|
|
1457
|
+
return async (args, options) => {
|
|
1413
1458
|
const toolName = methodToToolName(methodName, "");
|
|
1414
1459
|
const finalToolName = toolName.startsWith("_") ? toolName.substring(1) : toolName;
|
|
1415
|
-
return await this.callServerToolInternal(finalToolName, args);
|
|
1460
|
+
return await this.callServerToolInternal(finalToolName, args, options);
|
|
1416
1461
|
};
|
|
1417
1462
|
}
|
|
1418
1463
|
});
|
|
1419
1464
|
}
|
|
1420
|
-
async callServerToolInternal(name, args) {
|
|
1465
|
+
async callServerToolInternal(name, args, options) {
|
|
1421
1466
|
try {
|
|
1422
|
-
const response = await this.callToolThroughHandler(name, args);
|
|
1467
|
+
const response = await this.callToolThroughHandler(name, args, undefined, options);
|
|
1423
1468
|
return response;
|
|
1424
1469
|
} catch (error) {
|
|
1425
1470
|
const parsedError = parseServerError(error, { toolName: name });
|
|
@@ -1468,8 +1513,8 @@ class MCPClientBase {
|
|
|
1468
1513
|
const enabledTools = response.tools.filter((tool) => this.enabledToolNames.has(tool.name));
|
|
1469
1514
|
console.log(`Discovered ${response.tools.length} tools, ${enabledTools.length} enabled by integrations`);
|
|
1470
1515
|
}
|
|
1471
|
-
async _callToolByName(name, args) {
|
|
1472
|
-
return await this.callToolWithRetry(name, args, 0);
|
|
1516
|
+
async _callToolByName(name, args, options) {
|
|
1517
|
+
return await this.callToolWithRetry(name, args, 0, options);
|
|
1473
1518
|
}
|
|
1474
1519
|
async callServerTool(name, args) {
|
|
1475
1520
|
try {
|
|
@@ -1480,12 +1525,12 @@ class MCPClientBase {
|
|
|
1480
1525
|
throw parsedError;
|
|
1481
1526
|
}
|
|
1482
1527
|
}
|
|
1483
|
-
async callToolThroughHandler(name, args, provider) {
|
|
1528
|
+
async callToolThroughHandler(name, args, provider, options) {
|
|
1484
1529
|
const transportHeaders = this.transport.headers || {};
|
|
1485
1530
|
const hasApiKey = !!transportHeaders["X-API-KEY"];
|
|
1486
1531
|
if (hasApiKey) {
|
|
1487
1532
|
if (provider) {
|
|
1488
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1533
|
+
const tokenData = await this.oauthManager.getProviderToken(provider, options?.context);
|
|
1489
1534
|
if (tokenData && this.transport.setHeader) {
|
|
1490
1535
|
const previousAuthHeader = transportHeaders["Authorization"];
|
|
1491
1536
|
try {
|
|
@@ -1515,7 +1560,7 @@ class MCPClientBase {
|
|
|
1515
1560
|
"Content-Type": "application/json"
|
|
1516
1561
|
};
|
|
1517
1562
|
if (provider) {
|
|
1518
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1563
|
+
const tokenData = await this.oauthManager.getProviderToken(provider, options?.context);
|
|
1519
1564
|
if (tokenData) {
|
|
1520
1565
|
headers["Authorization"] = `Bearer ${tokenData.accessToken}`;
|
|
1521
1566
|
}
|
|
@@ -1553,13 +1598,13 @@ class MCPClientBase {
|
|
|
1553
1598
|
const result = await response.json();
|
|
1554
1599
|
return result;
|
|
1555
1600
|
}
|
|
1556
|
-
async callToolWithRetry(name, args, retryCount = 0) {
|
|
1601
|
+
async callToolWithRetry(name, args, retryCount = 0, options) {
|
|
1557
1602
|
if (!this.enabledToolNames.has(name)) {
|
|
1558
1603
|
throw new Error(`Tool "${name}" is not enabled. Enable it by adding the appropriate integration.`);
|
|
1559
1604
|
}
|
|
1560
1605
|
const provider = this.getProviderForTool(name);
|
|
1561
1606
|
try {
|
|
1562
|
-
const response = await this.callToolThroughHandler(name, args, provider);
|
|
1607
|
+
const response = await this.callToolThroughHandler(name, args, provider, options);
|
|
1563
1608
|
if (provider) {
|
|
1564
1609
|
this.authState.set(provider, { authenticated: true });
|
|
1565
1610
|
}
|
|
@@ -1710,7 +1755,7 @@ class MCPClientBase {
|
|
|
1710
1755
|
this.eventEmitter.emit("auth:started", { provider });
|
|
1711
1756
|
try {
|
|
1712
1757
|
await this.oauthManager.initiateFlow(provider, integration.oauth, options?.returnUrl);
|
|
1713
|
-
const tokenData = this.oauthManager.getProviderToken(provider);
|
|
1758
|
+
const tokenData = await this.oauthManager.getProviderToken(provider);
|
|
1714
1759
|
if (tokenData) {
|
|
1715
1760
|
this.eventEmitter.emit("auth:complete", {
|
|
1716
1761
|
provider,
|
|
@@ -1741,11 +1786,11 @@ class MCPClientBase {
|
|
|
1741
1786
|
throw error;
|
|
1742
1787
|
}
|
|
1743
1788
|
}
|
|
1744
|
-
getProviderToken(provider) {
|
|
1745
|
-
return this.oauthManager.getProviderToken(provider);
|
|
1789
|
+
async getProviderToken(provider, context) {
|
|
1790
|
+
return await this.oauthManager.getProviderToken(provider, context);
|
|
1746
1791
|
}
|
|
1747
|
-
setProviderToken(provider, tokenData) {
|
|
1748
|
-
this.oauthManager.setProviderToken(provider, tokenData);
|
|
1792
|
+
async setProviderToken(provider, tokenData, context) {
|
|
1793
|
+
await this.oauthManager.setProviderToken(provider, tokenData, context);
|
|
1749
1794
|
this.authState.set(provider, { authenticated: true });
|
|
1750
1795
|
}
|
|
1751
1796
|
getAllProviderTokens() {
|
package/dist/ai/index.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ import type { MCPClient } from "../client.js";
|
|
|
7
7
|
import type { AIToolsOptions } from "./utils.js";
|
|
8
8
|
export * from "./vercel-ai.js";
|
|
9
9
|
export * from "./openai.js";
|
|
10
|
-
export * from "./openai-agents.js";
|
|
11
10
|
export * from "./anthropic.js";
|
|
12
11
|
export * from "./google.js";
|
|
13
12
|
export * from "./cloudflare.js";
|
|
@@ -18,7 +17,7 @@ export * from "./utils.js";
|
|
|
18
17
|
/**
|
|
19
18
|
* Supported AI provider names
|
|
20
19
|
*/
|
|
21
|
-
export type AIProviderName = "vercel-ai" | "openai" | "
|
|
20
|
+
export type AIProviderName = "vercel-ai" | "openai" | "anthropic" | "google" | "cloudflare" | "langchain" | "llamaindex" | "mastra";
|
|
22
21
|
/**
|
|
23
22
|
* Generic function to get AI tools for any supported provider
|
|
24
23
|
*
|
|
@@ -69,7 +68,6 @@ export type AIProviderName = "vercel-ai" | "openai" | "openai-agents" | "anthrop
|
|
|
69
68
|
*/
|
|
70
69
|
export declare function getAITools(client: MCPClient<any>, provider: "vercel-ai", options?: AIToolsOptions): Promise<Record<string, any>>;
|
|
71
70
|
export declare function getAITools(client: MCPClient<any>, provider: "openai", options?: AIToolsOptions): Promise<Array<any>>;
|
|
72
|
-
export declare function getAITools(client: MCPClient<any>, provider: "openai-agents", options?: AIToolsOptions): Promise<Array<any>>;
|
|
73
71
|
export declare function getAITools(client: MCPClient<any>, provider: "anthropic", options?: AIToolsOptions): Promise<Array<any>>;
|
|
74
72
|
export declare function getAITools(client: MCPClient<any>, provider: "google", options?: AIToolsOptions): Promise<Array<any>>;
|
|
75
73
|
export declare function getAITools(client: MCPClient<any>, provider: "cloudflare", options?: AIToolsOptions): Promise<Record<string, any>>;
|
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAY3B;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,QAAQ,CAAC;AAEb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhC,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhC,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvB,wBAAsB,UAAU,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC"}
|
package/dist/ai/index.js
CHANGED
|
@@ -4426,7 +4426,10 @@ function convertMCPToolToVercelAI(mcpTool, client, options) {
|
|
|
4426
4426
|
description: mcpTool.description || `Execute ${mcpTool.name}`,
|
|
4427
4427
|
inputSchema: jsonSchemaToZod(mcpTool.inputSchema),
|
|
4428
4428
|
execute: async (args) => {
|
|
4429
|
-
|
|
4429
|
+
if (options?.providerTokens) {
|
|
4430
|
+
return await executeToolWithToken(client, mcpTool.name, args, options);
|
|
4431
|
+
}
|
|
4432
|
+
return await client._callToolByName(mcpTool.name, args, options?.context ? { context: options.context } : undefined);
|
|
4430
4433
|
}
|
|
4431
4434
|
};
|
|
4432
4435
|
}
|
|
@@ -4525,33 +4528,6 @@ async function handleOpenAIResponse(client, response, options) {
|
|
|
4525
4528
|
return handleOpenAIToolCalls(client, functionCalls, finalOptions);
|
|
4526
4529
|
}
|
|
4527
4530
|
|
|
4528
|
-
// openai-agents.ts
|
|
4529
|
-
function convertMCPToolToOpenAIAgents(mcpTool, client, options) {
|
|
4530
|
-
return {
|
|
4531
|
-
name: mcpTool.name,
|
|
4532
|
-
description: mcpTool.description || `Execute ${mcpTool.name}`,
|
|
4533
|
-
parameters: jsonSchemaToZod(mcpTool.inputSchema),
|
|
4534
|
-
execute: async (args) => {
|
|
4535
|
-
return await executeToolWithToken(client, mcpTool.name, args, options);
|
|
4536
|
-
}
|
|
4537
|
-
};
|
|
4538
|
-
}
|
|
4539
|
-
function convertMCPToolsToOpenAIAgents(client, options) {
|
|
4540
|
-
const mcpTools = client.getEnabledTools();
|
|
4541
|
-
return mcpTools.map((mcpTool) => convertMCPToolToOpenAIAgents(mcpTool, client, options));
|
|
4542
|
-
}
|
|
4543
|
-
async function getOpenAIAgentsTools(client, options) {
|
|
4544
|
-
await ensureClientConnected(client);
|
|
4545
|
-
let providerTokens = options?.providerTokens;
|
|
4546
|
-
if (!providerTokens) {
|
|
4547
|
-
try {
|
|
4548
|
-
providerTokens = await getProviderTokens();
|
|
4549
|
-
} catch {}
|
|
4550
|
-
}
|
|
4551
|
-
const finalOptions = providerTokens ? { ...options, providerTokens } : options;
|
|
4552
|
-
return convertMCPToolsToOpenAIAgents(client, finalOptions);
|
|
4553
|
-
}
|
|
4554
|
-
|
|
4555
4531
|
// langchain.ts
|
|
4556
4532
|
function convertMCPToolToLangChain(mcpTool, client, options) {
|
|
4557
4533
|
return {
|
|
@@ -4647,8 +4623,6 @@ async function getAITools(client, provider, options) {
|
|
|
4647
4623
|
return await getVercelAITools(client, options);
|
|
4648
4624
|
case "openai":
|
|
4649
4625
|
return await getOpenAITools(client, options);
|
|
4650
|
-
case "openai-agents":
|
|
4651
|
-
return await getOpenAIAgentsTools(client, options);
|
|
4652
4626
|
case "anthropic":
|
|
4653
4627
|
return await getAnthropicTools(client, options);
|
|
4654
4628
|
case "google":
|
|
@@ -4677,7 +4651,6 @@ export {
|
|
|
4677
4651
|
getProviderTokens,
|
|
4678
4652
|
getProviderForTool,
|
|
4679
4653
|
getOpenAITools,
|
|
4680
|
-
getOpenAIAgentsTools,
|
|
4681
4654
|
getMastraTools,
|
|
4682
4655
|
getLlamaIndexTools,
|
|
4683
4656
|
getLangChainTools,
|
|
@@ -4693,7 +4666,6 @@ export {
|
|
|
4693
4666
|
executeAnthropicToolCall,
|
|
4694
4667
|
ensureClientConnected,
|
|
4695
4668
|
convertMCPToolsToVercelAI,
|
|
4696
|
-
convertMCPToolsToOpenAIAgents,
|
|
4697
4669
|
convertMCPToolsToOpenAI,
|
|
4698
4670
|
convertMCPToolsToMastra,
|
|
4699
4671
|
convertMCPToolsToLlamaIndex,
|
|
@@ -4702,7 +4674,6 @@ export {
|
|
|
4702
4674
|
convertMCPToolsToCloudflare,
|
|
4703
4675
|
convertMCPToolsToAnthropic,
|
|
4704
4676
|
convertMCPToolToVercelAI,
|
|
4705
|
-
convertMCPToolToOpenAIAgents,
|
|
4706
4677
|
convertMCPToolToOpenAI,
|
|
4707
4678
|
convertMCPToolToMastra,
|
|
4708
4679
|
convertMCPToolToLlamaIndex,
|
package/dist/ai/vercel-ai.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import type { MCPClient } from "../client.js";
|
|
8
8
|
import type { MCPTool } from "../protocol/messages.js";
|
|
9
|
+
import type { MCPContext } from "../config/types.js";
|
|
9
10
|
import { type AIToolsOptions } from "./utils.js";
|
|
10
11
|
/**
|
|
11
12
|
* Tool definition compatible with Vercel AI SDK v5
|
|
@@ -20,13 +21,15 @@ export interface VercelAITool {
|
|
|
20
21
|
* Options for converting MCP tools to Vercel AI SDK format
|
|
21
22
|
*/
|
|
22
23
|
export interface VercelAIToolsOptions extends AIToolsOptions {
|
|
24
|
+
/** User context for multi-tenant token storage */
|
|
25
|
+
context?: MCPContext;
|
|
23
26
|
}
|
|
24
27
|
/**
|
|
25
28
|
* Convert a single MCP tool to Vercel AI SDK format
|
|
26
29
|
*
|
|
27
30
|
* @param mcpTool - The MCP tool definition
|
|
28
31
|
* @param client - The MCP client instance (used for executing the tool)
|
|
29
|
-
* @param options - Optional configuration including provider tokens
|
|
32
|
+
* @param options - Optional configuration including provider tokens and context
|
|
30
33
|
* @returns Vercel AI SDK compatible tool definition
|
|
31
34
|
*/
|
|
32
35
|
export declare function convertMCPToolToVercelAI(mcpTool: MCPTool, client: MCPClient<any>, options?: VercelAIToolsOptions): VercelAITool;
|
|
@@ -109,11 +112,12 @@ export declare function convertMCPToolsToVercelAI(client: MCPClient<any>, option
|
|
|
109
112
|
*
|
|
110
113
|
* export async function POST(req: Request) {
|
|
111
114
|
* const { messages } = await req.json();
|
|
115
|
+
* const userId = await getUserIdFromSession(req);
|
|
112
116
|
*
|
|
113
117
|
* const result = streamText({
|
|
114
118
|
* model: "openai/gpt-4",
|
|
115
119
|
* messages,
|
|
116
|
-
* tools: await getVercelAITools(serverClient), //
|
|
120
|
+
* tools: await getVercelAITools(serverClient, { context: { userId } }), // Pass user context
|
|
117
121
|
* });
|
|
118
122
|
*
|
|
119
123
|
* return result.toUIMessageStreamResponse();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../src/ai/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;
|
|
1
|
+
{"version":3,"file":"vercel-ai.d.ts","sourceRoot":"","sources":["../../../src/ai/vercel-ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kDAAkD;IAClD,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,YAAY,CAcd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CASrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,OAAO,CAAC,EAAE,oBAAoB,gCAkB/B"}
|
package/dist/ai/vercel-ai.js
CHANGED
|
@@ -4208,7 +4208,10 @@ function convertMCPToolToVercelAI(mcpTool, client, options) {
|
|
|
4208
4208
|
description: mcpTool.description || `Execute ${mcpTool.name}`,
|
|
4209
4209
|
inputSchema: jsonSchemaToZod(mcpTool.inputSchema),
|
|
4210
4210
|
execute: async (args) => {
|
|
4211
|
-
|
|
4211
|
+
if (options?.providerTokens) {
|
|
4212
|
+
return await executeToolWithToken(client, mcpTool.name, args, options);
|
|
4213
|
+
}
|
|
4214
|
+
return await client._callToolByName(mcpTool.name, args, options?.context ? { context: options.context } : undefined);
|
|
4212
4215
|
}
|
|
4213
4216
|
};
|
|
4214
4217
|
}
|