integrate-sdk 0.2.1 → 0.2.3
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 +0 -1
- package/dist/client.d.ts +41 -6
- package/dist/client.d.ts.map +1 -1
- package/dist/config/types.d.ts +25 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +118 -1
- package/dist/plugins/github.d.ts +2 -2
- package/dist/plugins/github.d.ts.map +1 -1
- package/dist/plugins/gmail.d.ts +2 -2
- package/dist/plugins/gmail.d.ts.map +1 -1
- package/dist/plugins/types.d.ts +2 -2
- package/dist/plugins/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# Integrate SDK
|
|
2
2
|
|
|
3
3
|
[](https://github.com/Revyo/integrate-sdk/actions/workflows/test.yml)
|
|
4
|
-
[](https://www.npmjs.com/package/integrate-sdk)
|
|
5
4
|
[](https://opensource.org/licenses/MIT)
|
|
6
5
|
|
|
7
6
|
A type-safe TypeScript SDK for connecting to the Integrate MCP (Model Context Protocol) server. Access GitHub, Gmail, Notion, and other integrations through a simple, plugin-based API.
|
package/dist/client.d.ts
CHANGED
|
@@ -52,6 +52,8 @@ export declare class MCPClient<TPlugins extends readonly MCPPlugin[] = readonly
|
|
|
52
52
|
private onReauthRequired?;
|
|
53
53
|
private maxReauthRetries;
|
|
54
54
|
private authState;
|
|
55
|
+
private connectionMode;
|
|
56
|
+
private connecting;
|
|
55
57
|
readonly github: PluginNamespaces<TPlugins> extends {
|
|
56
58
|
github: GitHubPluginClient;
|
|
57
59
|
} ? GitHubPluginClient : never;
|
|
@@ -60,6 +62,10 @@ export declare class MCPClient<TPlugins extends readonly MCPPlugin[] = readonly
|
|
|
60
62
|
} ? GmailPluginClient : never;
|
|
61
63
|
readonly server: ServerPluginClient;
|
|
62
64
|
constructor(config: MCPClientConfig<TPlugins>);
|
|
65
|
+
/**
|
|
66
|
+
* Ensure the client is connected (for lazy connection mode)
|
|
67
|
+
*/
|
|
68
|
+
private ensureConnected;
|
|
63
69
|
/**
|
|
64
70
|
* Create a proxy for a plugin namespace that intercepts method calls
|
|
65
71
|
* and routes them to the appropriate tool
|
|
@@ -172,24 +178,53 @@ export declare class MCPClient<TPlugins extends readonly MCPPlugin[] = readonly
|
|
|
172
178
|
/**
|
|
173
179
|
* Create a new MCP Client instance
|
|
174
180
|
*
|
|
175
|
-
*
|
|
181
|
+
* By default, uses singleton pattern and lazy connection:
|
|
182
|
+
* - Returns cached instance if one exists with same configuration
|
|
183
|
+
* - Automatically connects on first method call
|
|
184
|
+
* - Automatically cleans up on process exit
|
|
176
185
|
*
|
|
177
186
|
* @example
|
|
178
187
|
* ```typescript
|
|
188
|
+
* // Lazy connection (default) - connects automatically on first use
|
|
179
189
|
* const client = createMCPClient({
|
|
180
190
|
* plugins: [
|
|
181
191
|
* githubPlugin({ clientId: '...', clientSecret: '...' }),
|
|
182
|
-
* gmailPlugin({ clientId: '...', clientSecret: '...' }),
|
|
183
192
|
* ],
|
|
184
193
|
* });
|
|
185
194
|
*
|
|
186
|
-
*
|
|
187
|
-
* const
|
|
188
|
-
*
|
|
189
|
-
*
|
|
195
|
+
* // No need to call connect()!
|
|
196
|
+
* const repos = await client.github.listOwnRepos({});
|
|
197
|
+
*
|
|
198
|
+
* // No need to call disconnect()! (auto-cleanup on exit)
|
|
199
|
+
* ```
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* // Manual connection mode (original behavior)
|
|
204
|
+
* const client = createMCPClient({
|
|
205
|
+
* plugins: [githubPlugin({ ... })],
|
|
206
|
+
* connectionMode: 'manual',
|
|
207
|
+
* singleton: false,
|
|
190
208
|
* });
|
|
209
|
+
*
|
|
210
|
+
* await client.connect();
|
|
211
|
+
* const repos = await client.github.listOwnRepos({});
|
|
212
|
+
* await client.disconnect();
|
|
191
213
|
* ```
|
|
192
214
|
*/
|
|
193
215
|
export declare function createMCPClient<TPlugins extends readonly MCPPlugin[]>(config: MCPClientConfig<TPlugins>): MCPClient<TPlugins>;
|
|
216
|
+
/**
|
|
217
|
+
* Clear the client cache and disconnect all cached clients
|
|
218
|
+
* Useful for testing or when you need to force recreation of clients
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```typescript
|
|
222
|
+
* // In test teardown
|
|
223
|
+
* afterAll(async () => {
|
|
224
|
+
* await clearClientCache();
|
|
225
|
+
* });
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
228
|
+
export declare function clearClientCache(): Promise<void>;
|
|
194
229
|
export {};
|
|
195
230
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,OAAO,EAEP,mBAAmB,EAIpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -63,6 +63,31 @@ export interface MCPClientConfig<TPlugins extends readonly MCPPlugin[]> {
|
|
|
63
63
|
* Set to 0 to disable automatic retries
|
|
64
64
|
*/
|
|
65
65
|
maxReauthRetries?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Connection behavior
|
|
68
|
+
*
|
|
69
|
+
* - 'lazy' (default): Automatically connects on first method call
|
|
70
|
+
* - 'eager': Connects immediately when createMCPClient is called
|
|
71
|
+
* - 'manual': Requires manual connect() call (original behavior)
|
|
72
|
+
*
|
|
73
|
+
* @default 'lazy'
|
|
74
|
+
*/
|
|
75
|
+
connectionMode?: 'lazy' | 'eager' | 'manual';
|
|
76
|
+
/**
|
|
77
|
+
* Whether to use singleton pattern and reuse client instances
|
|
78
|
+
*
|
|
79
|
+
* - true (default): Reuses client with same configuration
|
|
80
|
+
* - false: Always creates a new instance
|
|
81
|
+
*
|
|
82
|
+
* @default true
|
|
83
|
+
*/
|
|
84
|
+
singleton?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Automatically cleanup (disconnect) on process exit
|
|
87
|
+
*
|
|
88
|
+
* @default true
|
|
89
|
+
*/
|
|
90
|
+
autoCleanup?: boolean;
|
|
66
91
|
}
|
|
67
92
|
/**
|
|
68
93
|
* Helper type to infer enabled tools from plugins
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,mBAAmB,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE;IACpE,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,mBAAmB,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE;IACpE,iCAAiC;IACjC,OAAO,EAAE,QAAQ,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAAgB,CAAC,EAAE,aAAa,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAE7C;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IACjE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpC;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,IAAI;KACnE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;CAC/C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Integrate SDK
|
|
3
3
|
* Type-safe TypeScript SDK for MCP Client
|
|
4
4
|
*/
|
|
5
|
-
export { MCPClient, createMCPClient } from "./client.js";
|
|
5
|
+
export { MCPClient, createMCPClient, clearClientCache } from "./client.js";
|
|
6
6
|
export type { ToolInvocationOptions } from "./client.js";
|
|
7
7
|
export type { MCPClientConfig, ReauthContext, ReauthHandler } from "./config/types.js";
|
|
8
8
|
export { IntegrateSDKError, AuthenticationError, AuthorizationError, TokenExpiredError, ConnectionError, ToolCallError, isAuthError, isTokenExpiredError, isAuthorizationError, parseServerError, } from "./errors.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG3F,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,YAAY,EACV,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,OAAO,EACP,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EACV,cAAc,EACd,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -363,6 +363,9 @@ function methodToToolName(methodName, pluginId) {
|
|
|
363
363
|
|
|
364
364
|
// src/client.ts
|
|
365
365
|
var MCP_SERVER_URL = "https://mcp.integrate.dev/api/v1/mcp";
|
|
366
|
+
var clientCache = new Map;
|
|
367
|
+
var cleanupClients = new Set;
|
|
368
|
+
var cleanupHandlersRegistered = false;
|
|
366
369
|
|
|
367
370
|
class MCPClient {
|
|
368
371
|
transport;
|
|
@@ -374,6 +377,8 @@ class MCPClient {
|
|
|
374
377
|
onReauthRequired;
|
|
375
378
|
maxReauthRetries;
|
|
376
379
|
authState = new Map;
|
|
380
|
+
connectionMode;
|
|
381
|
+
connecting = null;
|
|
377
382
|
github;
|
|
378
383
|
gmail;
|
|
379
384
|
server;
|
|
@@ -390,6 +395,7 @@ class MCPClient {
|
|
|
390
395
|
};
|
|
391
396
|
this.onReauthRequired = config.onReauthRequired;
|
|
392
397
|
this.maxReauthRetries = config.maxReauthRetries ?? 1;
|
|
398
|
+
this.connectionMode = config.connectionMode ?? "lazy";
|
|
393
399
|
for (const plugin of this.plugins) {
|
|
394
400
|
for (const toolName of plugin.tools) {
|
|
395
401
|
this.enabledToolNames.add(toolName);
|
|
@@ -403,10 +409,28 @@ class MCPClient {
|
|
|
403
409
|
this.server = this.createServerProxy();
|
|
404
410
|
this.initializePlugins();
|
|
405
411
|
}
|
|
412
|
+
async ensureConnected() {
|
|
413
|
+
if (this.initialized && this.transport.isConnected()) {
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
if (this.connecting) {
|
|
417
|
+
return this.connecting;
|
|
418
|
+
}
|
|
419
|
+
if (this.connectionMode === "manual" && !this.initialized) {
|
|
420
|
+
throw new Error("Client not connected. Call connect() first when using manual connection mode.");
|
|
421
|
+
}
|
|
422
|
+
this.connecting = this.connect();
|
|
423
|
+
try {
|
|
424
|
+
await this.connecting;
|
|
425
|
+
} finally {
|
|
426
|
+
this.connecting = null;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
406
429
|
createPluginProxy(pluginId) {
|
|
407
430
|
return new Proxy({}, {
|
|
408
431
|
get: (_target, methodName) => {
|
|
409
432
|
return async (args) => {
|
|
433
|
+
await this.ensureConnected();
|
|
410
434
|
const toolName = methodToToolName(methodName, pluginId);
|
|
411
435
|
return await this.callToolWithRetry(toolName, args, 0);
|
|
412
436
|
};
|
|
@@ -417,6 +441,7 @@ class MCPClient {
|
|
|
417
441
|
return new Proxy({}, {
|
|
418
442
|
get: (_target, methodName) => {
|
|
419
443
|
return async (args) => {
|
|
444
|
+
await this.ensureConnected();
|
|
420
445
|
const toolName = methodToToolName(methodName, "");
|
|
421
446
|
const finalToolName = toolName.startsWith("_") ? toolName.substring(1) : toolName;
|
|
422
447
|
return await this.callServerToolInternal(finalToolName, args);
|
|
@@ -625,8 +650,99 @@ class MCPClient {
|
|
|
625
650
|
return success;
|
|
626
651
|
}
|
|
627
652
|
}
|
|
653
|
+
function registerCleanupHandlers() {
|
|
654
|
+
if (cleanupHandlersRegistered)
|
|
655
|
+
return;
|
|
656
|
+
cleanupHandlersRegistered = true;
|
|
657
|
+
const cleanup = async () => {
|
|
658
|
+
const clients = Array.from(cleanupClients);
|
|
659
|
+
cleanupClients.clear();
|
|
660
|
+
await Promise.all(clients.map(async (client) => {
|
|
661
|
+
try {
|
|
662
|
+
if (client.isConnected()) {
|
|
663
|
+
await client.disconnect();
|
|
664
|
+
}
|
|
665
|
+
} catch (error) {
|
|
666
|
+
console.error("Error disconnecting client:", error);
|
|
667
|
+
}
|
|
668
|
+
}));
|
|
669
|
+
};
|
|
670
|
+
if (typeof process !== "undefined") {
|
|
671
|
+
process.on("SIGINT", async () => {
|
|
672
|
+
await cleanup();
|
|
673
|
+
process.exit(0);
|
|
674
|
+
});
|
|
675
|
+
process.on("SIGTERM", async () => {
|
|
676
|
+
await cleanup();
|
|
677
|
+
process.exit(0);
|
|
678
|
+
});
|
|
679
|
+
process.on("beforeExit", async () => {
|
|
680
|
+
await cleanup();
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
function generateCacheKey(config) {
|
|
685
|
+
const parts = [
|
|
686
|
+
config.clientInfo?.name || "integrate-sdk",
|
|
687
|
+
config.clientInfo?.version || "0.1.0",
|
|
688
|
+
JSON.stringify(config.plugins.map((p) => ({ id: p.id, tools: p.tools }))),
|
|
689
|
+
JSON.stringify(config.headers || {}),
|
|
690
|
+
config.timeout?.toString() || "30000"
|
|
691
|
+
];
|
|
692
|
+
return parts.join("|");
|
|
693
|
+
}
|
|
628
694
|
function createMCPClient(config) {
|
|
629
|
-
|
|
695
|
+
const useSingleton = config.singleton ?? true;
|
|
696
|
+
const connectionMode = config.connectionMode ?? "lazy";
|
|
697
|
+
const autoCleanup = config.autoCleanup ?? true;
|
|
698
|
+
if (useSingleton) {
|
|
699
|
+
const cacheKey = generateCacheKey(config);
|
|
700
|
+
const existing = clientCache.get(cacheKey);
|
|
701
|
+
if (existing && existing.isConnected()) {
|
|
702
|
+
return existing;
|
|
703
|
+
}
|
|
704
|
+
if (existing) {
|
|
705
|
+
clientCache.delete(cacheKey);
|
|
706
|
+
cleanupClients.delete(existing);
|
|
707
|
+
}
|
|
708
|
+
const client = new MCPClient(config);
|
|
709
|
+
clientCache.set(cacheKey, client);
|
|
710
|
+
if (autoCleanup) {
|
|
711
|
+
cleanupClients.add(client);
|
|
712
|
+
registerCleanupHandlers();
|
|
713
|
+
}
|
|
714
|
+
if (connectionMode === "eager") {
|
|
715
|
+
client.connect().catch((error) => {
|
|
716
|
+
console.error("Failed to connect client:", error);
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
return client;
|
|
720
|
+
} else {
|
|
721
|
+
const client = new MCPClient(config);
|
|
722
|
+
if (autoCleanup) {
|
|
723
|
+
cleanupClients.add(client);
|
|
724
|
+
registerCleanupHandlers();
|
|
725
|
+
}
|
|
726
|
+
if (connectionMode === "eager") {
|
|
727
|
+
client.connect().catch((error) => {
|
|
728
|
+
console.error("Failed to connect client:", error);
|
|
729
|
+
});
|
|
730
|
+
}
|
|
731
|
+
return client;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
async function clearClientCache() {
|
|
735
|
+
const clients = Array.from(clientCache.values());
|
|
736
|
+
clientCache.clear();
|
|
737
|
+
await Promise.all(clients.map(async (client) => {
|
|
738
|
+
try {
|
|
739
|
+
if (client.isConnected()) {
|
|
740
|
+
await client.disconnect();
|
|
741
|
+
}
|
|
742
|
+
} catch (error) {
|
|
743
|
+
console.error("Error disconnecting client during cache clear:", error);
|
|
744
|
+
}
|
|
745
|
+
}));
|
|
630
746
|
}
|
|
631
747
|
|
|
632
748
|
// src/index.ts
|
|
@@ -776,6 +892,7 @@ export {
|
|
|
776
892
|
createMCPClient,
|
|
777
893
|
convertMCPToolsToVercelAI,
|
|
778
894
|
convertMCPToolToVercelAI,
|
|
895
|
+
clearClientCache,
|
|
779
896
|
ToolCallError,
|
|
780
897
|
TokenExpiredError,
|
|
781
898
|
MCPMethod,
|
package/dist/plugins/github.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ import type { MCPPlugin } from "./types.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export interface GitHubPluginConfig {
|
|
10
10
|
/** GitHub OAuth client ID */
|
|
11
|
-
clientId: string;
|
|
11
|
+
clientId: string | undefined;
|
|
12
12
|
/** GitHub OAuth client secret */
|
|
13
|
-
clientSecret: string;
|
|
13
|
+
clientSecret: string | undefined;
|
|
14
14
|
/** Additional OAuth scopes (default: ['repo', 'user']) */
|
|
15
15
|
scopes?: string[];
|
|
16
16
|
/** OAuth redirect URI */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/plugins/github.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/plugins/github.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,iCAAiC;IACjC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,QAAA,MAAM,YAAY,kbAmBR,CAAC;AAEX;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CA0BlE;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAEtD;;GAEG;AACH,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/plugins/gmail.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ import type { MCPPlugin } from "./types.js";
|
|
|
8
8
|
*/
|
|
9
9
|
export interface GmailPluginConfig {
|
|
10
10
|
/** Google OAuth client ID */
|
|
11
|
-
clientId: string;
|
|
11
|
+
clientId: string | undefined;
|
|
12
12
|
/** Google OAuth client secret */
|
|
13
|
-
clientSecret: string;
|
|
13
|
+
clientSecret: string | undefined;
|
|
14
14
|
/** Additional OAuth scopes (default: Gmail API scopes) */
|
|
15
15
|
scopes?: string[];
|
|
16
16
|
/** OAuth redirect URI */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/plugins/gmail.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/plugins/gmail.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,iCAAiC;IACjC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,QAAA,MAAM,WAAW,sGAKP,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CA4BhE;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAEpD;;GAEG;AACH,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/plugins/types.d.ts
CHANGED
|
@@ -10,9 +10,9 @@ export interface OAuthConfig {
|
|
|
10
10
|
/** OAuth provider identifier (e.g., 'github', 'google') */
|
|
11
11
|
provider: string;
|
|
12
12
|
/** OAuth client ID */
|
|
13
|
-
clientId: string;
|
|
13
|
+
clientId: string | undefined;
|
|
14
14
|
/** OAuth client secret */
|
|
15
|
-
clientSecret: string;
|
|
15
|
+
clientSecret: string | undefined;
|
|
16
16
|
/** Required OAuth scopes */
|
|
17
17
|
scopes: string[];
|
|
18
18
|
/** Redirect URI for OAuth flow */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,0BAA0B;IAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,4BAA4B;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC;IAEX,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE1D,sDAAsD;IACtD,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEnE,oDAAoD;IACpD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAElE,yCAAyC;IACzC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,SAAS,SAAS,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5F;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,GAChB,MAAM,IAAI,SAAS,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAE9C"}
|