mcp-use 1.10.1-canary.1 → 1.11.0-canary.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 +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/{chunk-BXYYBPWE.js → chunk-BONN23WU.js} +2 -2
- package/dist/{chunk-K6EZ46MT.js → chunk-DKLRVWPJ.js} +1 -1
- package/dist/{chunk-BO2DLS2U.js → chunk-FDWI2WVM.js} +21 -287
- package/dist/{chunk-34R6SIER.js → chunk-FRUZDWXH.js} +1 -1
- package/dist/{chunk-CPG2WZUL.js → chunk-JRGQRPTN.js} +1 -1
- package/dist/{chunk-3WQPXSMB.js → chunk-KZL3RCT6.js} +4 -4
- package/dist/{chunk-ES5N2BQY.js → chunk-TZ7SHSRY.js} +2 -2
- package/dist/{chunk-IVXE5QZD.js → chunk-WFPXUU4A.js} +1 -1
- package/dist/{chunk-NS7PNUAI.js → chunk-YIZWQ5PM.js} +16 -2
- package/dist/index.cjs +34 -296
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -18
- package/dist/{langfuse-N5Y5BSXK.js → langfuse-74RGPTAH.js} +2 -2
- package/dist/src/agents/index.cjs +2 -2
- package/dist/src/agents/index.js +6 -6
- package/dist/src/browser.cjs +34 -289
- package/dist/src/browser.d.ts +0 -1
- package/dist/src/browser.d.ts.map +1 -1
- package/dist/src/browser.js +7 -9
- package/dist/src/client/browser.d.ts +2 -2
- package/dist/src/client/browser.d.ts.map +1 -1
- package/dist/src/client/prompts.cjs +1 -1
- package/dist/src/client/prompts.js +4 -4
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/connectors/base.d.ts +8 -0
- package/dist/src/connectors/base.d.ts.map +1 -1
- package/dist/src/connectors/index.d.ts +0 -1
- package/dist/src/connectors/index.d.ts.map +1 -1
- package/dist/src/react/index.cjs +34 -284
- package/dist/src/react/index.js +5 -5
- package/dist/src/react/types.d.ts +1 -3
- package/dist/src/react/types.d.ts.map +1 -1
- package/dist/src/server/endpoints/mount-mcp.d.ts.map +1 -1
- package/dist/src/server/index.cjs +24 -4
- package/dist/src/server/index.js +28 -8
- package/dist/src/server/sessions/session-manager.d.ts +6 -3
- package/dist/src/server/sessions/session-manager.d.ts.map +1 -1
- package/dist/src/session.d.ts +14 -0
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/task_managers/index.d.ts +0 -1
- package/dist/src/task_managers/index.d.ts.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/{tool-execution-helpers-G74FG2CI.js → tool-execution-helpers-HNASWGXY.js} +3 -3
- package/package.json +17 -10
- package/dist/src/connectors/websocket.d.ts +0 -38
- package/dist/src/connectors/websocket.d.ts.map +0 -1
- package/dist/src/task_managers/websocket.d.ts +0 -18
- package/dist/src/task_managers/websocket.d.ts.map +0 -1
package/dist/src/react/index.cjs
CHANGED
|
@@ -246,7 +246,7 @@ var Logger = class {
|
|
|
246
246
|
timestamp({ format: "HH:mm:ss" }),
|
|
247
247
|
this.getFormatter()
|
|
248
248
|
),
|
|
249
|
-
transports: []
|
|
249
|
+
transports: [new winston.transports.Console()]
|
|
250
250
|
});
|
|
251
251
|
}
|
|
252
252
|
return this.instances[name];
|
|
@@ -876,7 +876,7 @@ function generateUUID() {
|
|
|
876
876
|
__name(generateUUID, "generateUUID");
|
|
877
877
|
|
|
878
878
|
// src/version.ts
|
|
879
|
-
var VERSION = "1.
|
|
879
|
+
var VERSION = "1.11.0-canary.3";
|
|
880
880
|
function getPackageVersion() {
|
|
881
881
|
return VERSION;
|
|
882
882
|
}
|
|
@@ -1806,6 +1806,20 @@ var BaseConnector = class {
|
|
|
1806
1806
|
logger.debug(`Tool '${name}' returned`, res);
|
|
1807
1807
|
return res;
|
|
1808
1808
|
}
|
|
1809
|
+
/**
|
|
1810
|
+
* List all available tools from the MCP server.
|
|
1811
|
+
* This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
|
|
1812
|
+
*
|
|
1813
|
+
* @param options - Optional request options
|
|
1814
|
+
* @returns Array of available tools
|
|
1815
|
+
*/
|
|
1816
|
+
async listTools(options) {
|
|
1817
|
+
if (!this.client) {
|
|
1818
|
+
throw new Error("MCP client is not connected");
|
|
1819
|
+
}
|
|
1820
|
+
const result = await this.client.listTools(void 0, options);
|
|
1821
|
+
return result.tools ?? [];
|
|
1822
|
+
}
|
|
1809
1823
|
/**
|
|
1810
1824
|
* List resources from the server with optional pagination
|
|
1811
1825
|
*
|
|
@@ -2249,279 +2263,6 @@ var HttpConnector = class extends BaseConnector {
|
|
|
2249
2263
|
}
|
|
2250
2264
|
};
|
|
2251
2265
|
|
|
2252
|
-
// src/task_managers/websocket.ts
|
|
2253
|
-
var import_ws = __toESM(require("ws"), 1);
|
|
2254
|
-
var WebSocketConnectionManager = class extends ConnectionManager {
|
|
2255
|
-
static {
|
|
2256
|
-
__name(this, "WebSocketConnectionManager");
|
|
2257
|
-
}
|
|
2258
|
-
url;
|
|
2259
|
-
headers;
|
|
2260
|
-
_ws = null;
|
|
2261
|
-
/**
|
|
2262
|
-
* @param url The WebSocket URL to connect to.
|
|
2263
|
-
* @param headers Optional headers to include in the connection handshake.
|
|
2264
|
-
*/
|
|
2265
|
-
constructor(url, headers = {}) {
|
|
2266
|
-
super();
|
|
2267
|
-
this.url = url;
|
|
2268
|
-
this.headers = headers;
|
|
2269
|
-
}
|
|
2270
|
-
/** Establish a WebSocket connection and wait until it is open. */
|
|
2271
|
-
async establishConnection() {
|
|
2272
|
-
logger.debug(`Connecting to WebSocket: ${this.url}`);
|
|
2273
|
-
return new Promise((resolve, reject) => {
|
|
2274
|
-
const ws = new import_ws.default(this.url, {
|
|
2275
|
-
headers: this.headers
|
|
2276
|
-
});
|
|
2277
|
-
this._ws = ws;
|
|
2278
|
-
const onOpen = /* @__PURE__ */ __name(() => {
|
|
2279
|
-
cleanup();
|
|
2280
|
-
logger.debug("WebSocket connected successfully");
|
|
2281
|
-
resolve(ws);
|
|
2282
|
-
}, "onOpen");
|
|
2283
|
-
const onError = /* @__PURE__ */ __name((err) => {
|
|
2284
|
-
cleanup();
|
|
2285
|
-
logger.error(`Failed to connect to WebSocket: ${err}`);
|
|
2286
|
-
reject(err);
|
|
2287
|
-
}, "onError");
|
|
2288
|
-
const cleanup = /* @__PURE__ */ __name(() => {
|
|
2289
|
-
ws.off("open", onOpen);
|
|
2290
|
-
ws.off("error", onError);
|
|
2291
|
-
}, "cleanup");
|
|
2292
|
-
ws.on("open", onOpen);
|
|
2293
|
-
ws.on("error", onError);
|
|
2294
|
-
});
|
|
2295
|
-
}
|
|
2296
|
-
/** Cleanly close the WebSocket connection. */
|
|
2297
|
-
async closeConnection(connection) {
|
|
2298
|
-
logger.debug("Closing WebSocket connection");
|
|
2299
|
-
return new Promise((resolve) => {
|
|
2300
|
-
const onClose = /* @__PURE__ */ __name(() => {
|
|
2301
|
-
connection.off("close", onClose);
|
|
2302
|
-
this._ws = null;
|
|
2303
|
-
resolve();
|
|
2304
|
-
}, "onClose");
|
|
2305
|
-
if (connection.readyState === import_ws.default.CLOSED) {
|
|
2306
|
-
onClose();
|
|
2307
|
-
return;
|
|
2308
|
-
}
|
|
2309
|
-
connection.on("close", onClose);
|
|
2310
|
-
try {
|
|
2311
|
-
connection.close();
|
|
2312
|
-
} catch (e) {
|
|
2313
|
-
logger.warn(`Error closing WebSocket connection: ${e}`);
|
|
2314
|
-
onClose();
|
|
2315
|
-
}
|
|
2316
|
-
});
|
|
2317
|
-
}
|
|
2318
|
-
};
|
|
2319
|
-
|
|
2320
|
-
// src/connectors/websocket.ts
|
|
2321
|
-
var WebSocketConnector = class extends BaseConnector {
|
|
2322
|
-
static {
|
|
2323
|
-
__name(this, "WebSocketConnector");
|
|
2324
|
-
}
|
|
2325
|
-
url;
|
|
2326
|
-
headers;
|
|
2327
|
-
connectionManager = null;
|
|
2328
|
-
ws = null;
|
|
2329
|
-
receiverTask = null;
|
|
2330
|
-
pending = /* @__PURE__ */ new Map();
|
|
2331
|
-
toolsCache = null;
|
|
2332
|
-
constructor(url, opts = {}) {
|
|
2333
|
-
super();
|
|
2334
|
-
this.url = url;
|
|
2335
|
-
this.headers = { ...opts.headers ?? {} };
|
|
2336
|
-
if (opts.authToken) this.headers.Authorization = `Bearer ${opts.authToken}`;
|
|
2337
|
-
}
|
|
2338
|
-
async connect() {
|
|
2339
|
-
if (this.connected) {
|
|
2340
|
-
logger.debug("Already connected to MCP implementation");
|
|
2341
|
-
return;
|
|
2342
|
-
}
|
|
2343
|
-
logger.debug(`Connecting via WebSocket: ${this.url}`);
|
|
2344
|
-
try {
|
|
2345
|
-
this.connectionManager = new WebSocketConnectionManager(
|
|
2346
|
-
this.url,
|
|
2347
|
-
this.headers
|
|
2348
|
-
);
|
|
2349
|
-
this.ws = await this.connectionManager.start();
|
|
2350
|
-
this.receiverTask = this.receiveLoop();
|
|
2351
|
-
this.connected = true;
|
|
2352
|
-
logger.debug("WebSocket connected successfully");
|
|
2353
|
-
} catch (e) {
|
|
2354
|
-
logger.error(`Failed to connect: ${e}`);
|
|
2355
|
-
await this.cleanupResources();
|
|
2356
|
-
throw e;
|
|
2357
|
-
}
|
|
2358
|
-
}
|
|
2359
|
-
async disconnect() {
|
|
2360
|
-
if (!this.connected) {
|
|
2361
|
-
logger.debug("Not connected to MCP implementation");
|
|
2362
|
-
return;
|
|
2363
|
-
}
|
|
2364
|
-
logger.debug("Disconnecting \u2026");
|
|
2365
|
-
await this.cleanupResources();
|
|
2366
|
-
this.connected = false;
|
|
2367
|
-
}
|
|
2368
|
-
sendRequest(method, params = null) {
|
|
2369
|
-
if (!this.ws) throw new Error("WebSocket is not connected");
|
|
2370
|
-
const id = generateUUID();
|
|
2371
|
-
const payload = JSON.stringify({ id, method, params: params ?? {} });
|
|
2372
|
-
return new Promise((resolve, reject) => {
|
|
2373
|
-
this.pending.set(id, { resolve, reject });
|
|
2374
|
-
this.ws.send(payload, (err) => {
|
|
2375
|
-
if (err) {
|
|
2376
|
-
this.pending.delete(id);
|
|
2377
|
-
reject(err);
|
|
2378
|
-
}
|
|
2379
|
-
});
|
|
2380
|
-
});
|
|
2381
|
-
}
|
|
2382
|
-
async receiveLoop() {
|
|
2383
|
-
if (!this.ws) return;
|
|
2384
|
-
const socket = this.ws;
|
|
2385
|
-
const onMessage = /* @__PURE__ */ __name((msg) => {
|
|
2386
|
-
let data;
|
|
2387
|
-
try {
|
|
2388
|
-
data = JSON.parse(msg.data ?? msg);
|
|
2389
|
-
} catch (e) {
|
|
2390
|
-
logger.warn("Received non\u2011JSON frame", e);
|
|
2391
|
-
return;
|
|
2392
|
-
}
|
|
2393
|
-
const id = data.id;
|
|
2394
|
-
if (id && this.pending.has(id)) {
|
|
2395
|
-
const { resolve, reject } = this.pending.get(id);
|
|
2396
|
-
this.pending.delete(id);
|
|
2397
|
-
if ("result" in data) resolve(data.result);
|
|
2398
|
-
else if ("error" in data) reject(data.error);
|
|
2399
|
-
} else if (data.method && !data.id) {
|
|
2400
|
-
logger.debug("Received notification", data.method, data.params);
|
|
2401
|
-
this.handleNotification(data);
|
|
2402
|
-
} else {
|
|
2403
|
-
logger.debug("Received unsolicited message", data);
|
|
2404
|
-
}
|
|
2405
|
-
}, "onMessage");
|
|
2406
|
-
if (socket.addEventListener) {
|
|
2407
|
-
socket.addEventListener("message", onMessage);
|
|
2408
|
-
} else {
|
|
2409
|
-
socket.on("message", onMessage);
|
|
2410
|
-
}
|
|
2411
|
-
return new Promise((resolve) => {
|
|
2412
|
-
const onClose = /* @__PURE__ */ __name(() => {
|
|
2413
|
-
if (socket.removeEventListener) {
|
|
2414
|
-
socket.removeEventListener("message", onMessage);
|
|
2415
|
-
} else {
|
|
2416
|
-
socket.off("message", onMessage);
|
|
2417
|
-
}
|
|
2418
|
-
this.rejectAll(new Error("WebSocket closed"));
|
|
2419
|
-
resolve();
|
|
2420
|
-
}, "onClose");
|
|
2421
|
-
if (socket.addEventListener) {
|
|
2422
|
-
socket.addEventListener("close", onClose);
|
|
2423
|
-
} else {
|
|
2424
|
-
socket.on("close", onClose);
|
|
2425
|
-
}
|
|
2426
|
-
});
|
|
2427
|
-
}
|
|
2428
|
-
rejectAll(err) {
|
|
2429
|
-
for (const { reject } of this.pending.values()) reject(err);
|
|
2430
|
-
this.pending.clear();
|
|
2431
|
-
}
|
|
2432
|
-
async handleNotification(data) {
|
|
2433
|
-
switch (data.method) {
|
|
2434
|
-
case "notifications/tools/list_changed":
|
|
2435
|
-
await this.refreshToolsCache();
|
|
2436
|
-
break;
|
|
2437
|
-
case "notifications/resources/list_changed":
|
|
2438
|
-
await this.onResourcesListChanged();
|
|
2439
|
-
break;
|
|
2440
|
-
case "notifications/prompts/list_changed":
|
|
2441
|
-
await this.onPromptsListChanged();
|
|
2442
|
-
break;
|
|
2443
|
-
default:
|
|
2444
|
-
break;
|
|
2445
|
-
}
|
|
2446
|
-
for (const handler of this.notificationHandlers) {
|
|
2447
|
-
try {
|
|
2448
|
-
await handler({
|
|
2449
|
-
method: data.method,
|
|
2450
|
-
params: data.params
|
|
2451
|
-
});
|
|
2452
|
-
} catch (err) {
|
|
2453
|
-
logger.error("Error in notification handler:", err);
|
|
2454
|
-
}
|
|
2455
|
-
}
|
|
2456
|
-
}
|
|
2457
|
-
/**
|
|
2458
|
-
* Auto-refresh tools cache when server sends tools/list_changed notification
|
|
2459
|
-
* Override to use WebSocket-specific listTools method
|
|
2460
|
-
*/
|
|
2461
|
-
async refreshToolsCache() {
|
|
2462
|
-
try {
|
|
2463
|
-
logger.debug(
|
|
2464
|
-
"[Auto] Refreshing tools cache due to list_changed notification"
|
|
2465
|
-
);
|
|
2466
|
-
const tools = await this.listTools();
|
|
2467
|
-
this.toolsCache = tools.map((t) => t);
|
|
2468
|
-
logger.debug(
|
|
2469
|
-
`[Auto] Refreshed tools cache: ${this.toolsCache.length} tools`
|
|
2470
|
-
);
|
|
2471
|
-
} catch (err) {
|
|
2472
|
-
logger.warn("[Auto] Failed to refresh tools cache:", err);
|
|
2473
|
-
}
|
|
2474
|
-
}
|
|
2475
|
-
async initialize() {
|
|
2476
|
-
logger.debug("Initializing MCP session over WebSocket");
|
|
2477
|
-
const result = await this.sendRequest("initialize");
|
|
2478
|
-
const toolsList = await this.listTools();
|
|
2479
|
-
this.toolsCache = toolsList.map((t) => t);
|
|
2480
|
-
logger.debug(`Initialized with ${this.toolsCache.length} tools`);
|
|
2481
|
-
return result;
|
|
2482
|
-
}
|
|
2483
|
-
async listTools() {
|
|
2484
|
-
const res = await this.sendRequest("tools/list");
|
|
2485
|
-
return res.tools ?? [];
|
|
2486
|
-
}
|
|
2487
|
-
async callTool(name, args) {
|
|
2488
|
-
return await this.sendRequest("tools/call", { name, arguments: args });
|
|
2489
|
-
}
|
|
2490
|
-
async listResources() {
|
|
2491
|
-
const resources = await this.sendRequest("resources/list");
|
|
2492
|
-
return { resources: Array.isArray(resources) ? resources : [] };
|
|
2493
|
-
}
|
|
2494
|
-
async readResource(uri) {
|
|
2495
|
-
const res = await this.sendRequest("resources/read", { uri });
|
|
2496
|
-
return res;
|
|
2497
|
-
}
|
|
2498
|
-
async request(method, params = null) {
|
|
2499
|
-
return await this.sendRequest(method, params);
|
|
2500
|
-
}
|
|
2501
|
-
get tools() {
|
|
2502
|
-
if (!this.toolsCache) throw new Error("MCP client is not initialized");
|
|
2503
|
-
return this.toolsCache;
|
|
2504
|
-
}
|
|
2505
|
-
async cleanupResources() {
|
|
2506
|
-
if (this.receiverTask) await this.receiverTask.catch(() => {
|
|
2507
|
-
});
|
|
2508
|
-
this.receiverTask = null;
|
|
2509
|
-
this.rejectAll(new Error("WebSocket disconnected"));
|
|
2510
|
-
if (this.connectionManager) {
|
|
2511
|
-
await this.connectionManager.stop();
|
|
2512
|
-
this.connectionManager = null;
|
|
2513
|
-
this.ws = null;
|
|
2514
|
-
}
|
|
2515
|
-
this.toolsCache = null;
|
|
2516
|
-
}
|
|
2517
|
-
get publicIdentifier() {
|
|
2518
|
-
return {
|
|
2519
|
-
type: "websocket",
|
|
2520
|
-
url: this.url
|
|
2521
|
-
};
|
|
2522
|
-
}
|
|
2523
|
-
};
|
|
2524
|
-
|
|
2525
2266
|
// src/session.ts
|
|
2526
2267
|
var MCPSession = class {
|
|
2527
2268
|
static {
|
|
@@ -2607,6 +2348,22 @@ var MCPSession = class {
|
|
|
2607
2348
|
get tools() {
|
|
2608
2349
|
return this.connector.tools;
|
|
2609
2350
|
}
|
|
2351
|
+
/**
|
|
2352
|
+
* List all available tools from the MCP server.
|
|
2353
|
+
* This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
|
|
2354
|
+
*
|
|
2355
|
+
* @param options - Optional request options
|
|
2356
|
+
* @returns Array of available tools
|
|
2357
|
+
*
|
|
2358
|
+
* @example
|
|
2359
|
+
* ```typescript
|
|
2360
|
+
* const tools = await session.listTools();
|
|
2361
|
+
* console.log(`Available tools: ${tools.map(t => t.name).join(", ")}`);
|
|
2362
|
+
* ```
|
|
2363
|
+
*/
|
|
2364
|
+
async listTools(options) {
|
|
2365
|
+
return this.connector.listTools(options);
|
|
2366
|
+
}
|
|
2610
2367
|
/**
|
|
2611
2368
|
* Get the server capabilities advertised during initialization.
|
|
2612
2369
|
*
|
|
@@ -2937,12 +2694,11 @@ var BrowserMCPClient = class _BrowserMCPClient extends BaseMCPClient {
|
|
|
2937
2694
|
}
|
|
2938
2695
|
/**
|
|
2939
2696
|
* Create a connector from server configuration (Browser version)
|
|
2940
|
-
* Supports HTTP
|
|
2697
|
+
* Supports HTTP connector only
|
|
2941
2698
|
*/
|
|
2942
2699
|
createConnectorFromConfig(serverConfig) {
|
|
2943
2700
|
const {
|
|
2944
2701
|
url,
|
|
2945
|
-
transport,
|
|
2946
2702
|
headers,
|
|
2947
2703
|
authToken,
|
|
2948
2704
|
authProvider,
|
|
@@ -2978,13 +2734,7 @@ var BrowserMCPClient = class _BrowserMCPClient extends BaseMCPClient {
|
|
|
2978
2734
|
"[BrowserMCPClient] No clientOptions provided to connector!"
|
|
2979
2735
|
);
|
|
2980
2736
|
}
|
|
2981
|
-
|
|
2982
|
-
return new WebSocketConnector(url, connectorOptions);
|
|
2983
|
-
} else if (transport === "http" || url.startsWith("http://") || url.startsWith("https://")) {
|
|
2984
|
-
return new HttpConnector(url, connectorOptions);
|
|
2985
|
-
} else {
|
|
2986
|
-
return new HttpConnector(url, connectorOptions);
|
|
2987
|
-
}
|
|
2737
|
+
return new HttpConnector(url, connectorOptions);
|
|
2988
2738
|
}
|
|
2989
2739
|
};
|
|
2990
2740
|
|
package/dist/src/react/index.js
CHANGED
|
@@ -9,18 +9,18 @@ import {
|
|
|
9
9
|
useWidgetProps,
|
|
10
10
|
useWidgetState,
|
|
11
11
|
useWidgetTheme
|
|
12
|
-
} from "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
12
|
+
} from "../../chunk-BONN23WU.js";
|
|
13
|
+
import "../../chunk-FDWI2WVM.js";
|
|
14
14
|
import {
|
|
15
15
|
onMcpAuthorization
|
|
16
16
|
} from "../../chunk-J75I2C26.js";
|
|
17
|
-
import "../../chunk-
|
|
17
|
+
import "../../chunk-YIZWQ5PM.js";
|
|
18
18
|
import {
|
|
19
19
|
Tel,
|
|
20
20
|
Telemetry,
|
|
21
21
|
setTelemetrySource
|
|
22
|
-
} from "../../chunk-
|
|
23
|
-
import "../../chunk-
|
|
22
|
+
} from "../../chunk-TZ7SHSRY.js";
|
|
23
|
+
import "../../chunk-FRUZDWXH.js";
|
|
24
24
|
import "../../chunk-3GQAWCBQ.js";
|
|
25
25
|
export {
|
|
26
26
|
Tel as BrowserTelemetry,
|
|
@@ -95,12 +95,10 @@ export type UseMcpResult = {
|
|
|
95
95
|
* - 'discovering': Checking server existence and capabilities (including auth requirements).
|
|
96
96
|
* - 'pending_auth': Authentication is required but auto-popup was prevented. User action needed.
|
|
97
97
|
* - 'authenticating': Authentication is required and the process (e.g., popup) has been initiated.
|
|
98
|
-
* - 'connecting': Establishing the SSE connection to the server.
|
|
99
|
-
* - 'loading': Connected; loading resources like the tool list.
|
|
100
98
|
* - 'ready': Connected and ready for tool calls.
|
|
101
99
|
* - 'failed': Connection or authentication failed. Check the `error` property.
|
|
102
100
|
*/
|
|
103
|
-
state: "discovering" | "pending_auth" | "authenticating" | "
|
|
101
|
+
state: "discovering" | "pending_auth" | "authenticating" | "ready" | "failed";
|
|
104
102
|
/** If the state is 'failed', this provides the error message */
|
|
105
103
|
error?: string;
|
|
106
104
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,IAAI,EACL,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,MAAM,aAAa,GAAG;IAC1B,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6HAA6H;IAC7H,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,YAAY,CAAC,EAAE;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IACxC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,CAAC,MAAM,GAAG,IAAI,KAC7B,IAAI,CAAC;IACV,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sGAAsG;IACtG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sJAAsJ;IACtJ,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;IAC1D,4FAA4F;IAC5F,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CACjB,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KACnC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClC;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,uBAAuB,GAAG,sBAAsB,KACrD,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,4DAA4D;IAC5D,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,gEAAgE;IAChE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,yEAAyE;IACzE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,8DAA8D;IAC9D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,sDAAsD;IACtD,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount-mcp.d.ts","sourceRoot":"","sources":["../../../../src/server/endpoints/mount-mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,QAAQ,EACb,iBAAiB,EAAE;IACjB,mBAAmB,EAAE,MAAM,OAAO,iDAAiD,EAAE,SAAS,CAAC;IAC/F,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,EAAE,2DAA2D;AAC9D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"mount-mcp.d.ts","sourceRoot":"","sources":["../../../../src/server/endpoints/mount-mcp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,QAAQ,EACb,iBAAiB,EAAE;IACjB,mBAAmB,EAAE,MAAM,OAAO,iDAAiD,EAAE,SAAS,CAAC;IAC/F,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,EAAE,2DAA2D;AAC9D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,MAAM,EAAE,YAAY,EACpB,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;CAAE,CAAC,CAyHxE"}
|
|
@@ -643,7 +643,7 @@ var init_logging = __esm({
|
|
|
643
643
|
timestamp({ format: "HH:mm:ss" }),
|
|
644
644
|
this.getFormatter()
|
|
645
645
|
),
|
|
646
|
-
transports: []
|
|
646
|
+
transports: [new winston.transports.Console()]
|
|
647
647
|
});
|
|
648
648
|
}
|
|
649
649
|
return this.instances[name];
|
|
@@ -761,7 +761,7 @@ var VERSION;
|
|
|
761
761
|
var init_version = __esm({
|
|
762
762
|
"src/version.ts"() {
|
|
763
763
|
"use strict";
|
|
764
|
-
VERSION = "1.
|
|
764
|
+
VERSION = "1.11.0-canary.3";
|
|
765
765
|
__name(getPackageVersion, "getPackageVersion");
|
|
766
766
|
}
|
|
767
767
|
});
|
|
@@ -4632,7 +4632,7 @@ init_tool_execution_helpers();
|
|
|
4632
4632
|
init_context_storage();
|
|
4633
4633
|
|
|
4634
4634
|
// src/server/sessions/session-manager.ts
|
|
4635
|
-
function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
|
|
4635
|
+
function startIdleCleanup(sessions, idleTimeoutMs, transports, mcpServerInstance) {
|
|
4636
4636
|
if (idleTimeoutMs <= 0) {
|
|
4637
4637
|
return void 0;
|
|
4638
4638
|
}
|
|
@@ -4649,8 +4649,21 @@ function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
|
|
|
4649
4649
|
`[MCP] Cleaning up ${expiredSessions.length} idle session(s)`
|
|
4650
4650
|
);
|
|
4651
4651
|
for (const sessionId of expiredSessions) {
|
|
4652
|
+
const transport = transports?.get(sessionId);
|
|
4653
|
+
if (transport?.close) {
|
|
4654
|
+
Promise.resolve(transport.close()).catch((e) => {
|
|
4655
|
+
console.warn(
|
|
4656
|
+
`[MCP] Error closing transport for session ${sessionId}:`,
|
|
4657
|
+
e
|
|
4658
|
+
);
|
|
4659
|
+
});
|
|
4660
|
+
}
|
|
4661
|
+
transports?.delete(sessionId);
|
|
4652
4662
|
sessions.delete(sessionId);
|
|
4653
4663
|
mcpServerInstance?.cleanupSessionSubscriptions?.(sessionId);
|
|
4664
|
+
console.log(
|
|
4665
|
+
`[MCP] Cleaned up resource subscriptions for session ${sessionId}`
|
|
4666
|
+
);
|
|
4654
4667
|
}
|
|
4655
4668
|
}
|
|
4656
4669
|
}, 6e4);
|
|
@@ -4669,11 +4682,18 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
|
|
|
4669
4682
|
idleCleanupInterval = startIdleCleanup(
|
|
4670
4683
|
sessions,
|
|
4671
4684
|
idleTimeoutMs,
|
|
4685
|
+
transports,
|
|
4672
4686
|
mcpServerInstance
|
|
4673
4687
|
);
|
|
4674
4688
|
}
|
|
4675
4689
|
const handleRequest = /* @__PURE__ */ __name(async (c) => {
|
|
4676
4690
|
const sessionId = c.req.header("mcp-session-id");
|
|
4691
|
+
if (c.req.method === "HEAD") {
|
|
4692
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
4693
|
+
sessions.get(sessionId).lastAccessedAt = Date.now();
|
|
4694
|
+
}
|
|
4695
|
+
return new Response(null, { status: 200 });
|
|
4696
|
+
}
|
|
4677
4697
|
if (sessionId && transports.has(sessionId)) {
|
|
4678
4698
|
const transport2 = transports.get(sessionId);
|
|
4679
4699
|
if (sessions.has(sessionId)) {
|
|
@@ -4730,7 +4750,7 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
|
|
|
4730
4750
|
return transport.handleRequest(c.req.raw);
|
|
4731
4751
|
}, "handleRequest");
|
|
4732
4752
|
for (const endpoint of ["/mcp", "/sse"]) {
|
|
4733
|
-
app.on(["GET", "POST", "DELETE"], endpoint, handleRequest);
|
|
4753
|
+
app.on(["GET", "POST", "DELETE", "HEAD"], endpoint, handleRequest);
|
|
4734
4754
|
}
|
|
4735
4755
|
console.log(
|
|
4736
4756
|
`[MCP] Server mounted at /mcp and /sse (using FetchStreamableHTTPServerTransport - Web Standard APIs)`
|
package/dist/src/server/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
createEnhancedContext,
|
|
8
8
|
findSessionContext,
|
|
9
9
|
isValidLogLevel
|
|
10
|
-
} from "../../chunk-
|
|
10
|
+
} from "../../chunk-WFPXUU4A.js";
|
|
11
11
|
import {
|
|
12
12
|
convertToolResultToResourceResult
|
|
13
13
|
} from "../../chunk-362PI25Z.js";
|
|
@@ -25,8 +25,8 @@ import {
|
|
|
25
25
|
getPackageVersion,
|
|
26
26
|
isDeno,
|
|
27
27
|
pathHelpers
|
|
28
|
-
} from "../../chunk-
|
|
29
|
-
import "../../chunk-
|
|
28
|
+
} from "../../chunk-TZ7SHSRY.js";
|
|
29
|
+
import "../../chunk-FRUZDWXH.js";
|
|
30
30
|
import {
|
|
31
31
|
__name
|
|
32
32
|
} from "../../chunk-3GQAWCBQ.js";
|
|
@@ -2091,7 +2091,7 @@ function registerResource(resourceDefinition, callback) {
|
|
|
2091
2091
|
const explicitMimeType = resourceDefinition.mimeType;
|
|
2092
2092
|
const wrappedCallback = /* @__PURE__ */ __name(async () => {
|
|
2093
2093
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2094
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2094
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-HNASWGXY.js");
|
|
2095
2095
|
const initialRequestContext = getRequestContext2();
|
|
2096
2096
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2097
2097
|
const { requestContext } = findSessionContext2(
|
|
@@ -2169,7 +2169,7 @@ function registerResourceTemplate(resourceTemplateDefinition, callback) {
|
|
|
2169
2169
|
async (uri) => {
|
|
2170
2170
|
const params = this.parseTemplateUri(uriTemplate, uri.toString());
|
|
2171
2171
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2172
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2172
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-HNASWGXY.js");
|
|
2173
2173
|
const initialRequestContext = getRequestContext2();
|
|
2174
2174
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2175
2175
|
const { requestContext } = findSessionContext2(
|
|
@@ -2224,7 +2224,7 @@ function registerPrompt(promptDefinition, callback) {
|
|
|
2224
2224
|
}
|
|
2225
2225
|
const wrappedCallback = /* @__PURE__ */ __name(async (params, extra) => {
|
|
2226
2226
|
const { getRequestContext: getRequestContext2, runWithContext: runWithContext2 } = await import("../../context-storage-NA4MHWOZ.js");
|
|
2227
|
-
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-
|
|
2227
|
+
const { findSessionContext: findSessionContext2 } = await import("../../tool-execution-helpers-HNASWGXY.js");
|
|
2228
2228
|
const initialRequestContext = getRequestContext2();
|
|
2229
2229
|
const sessions = this.sessions || /* @__PURE__ */ new Map();
|
|
2230
2230
|
const { requestContext } = findSessionContext2(
|
|
@@ -2495,7 +2495,7 @@ async function sendNotificationToSession2(sessionId, method, params) {
|
|
|
2495
2495
|
__name(sendNotificationToSession2, "sendNotificationToSession");
|
|
2496
2496
|
|
|
2497
2497
|
// src/server/sessions/session-manager.ts
|
|
2498
|
-
function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
|
|
2498
|
+
function startIdleCleanup(sessions, idleTimeoutMs, transports, mcpServerInstance) {
|
|
2499
2499
|
if (idleTimeoutMs <= 0) {
|
|
2500
2500
|
return void 0;
|
|
2501
2501
|
}
|
|
@@ -2512,8 +2512,21 @@ function startIdleCleanup(sessions, idleTimeoutMs, mcpServerInstance) {
|
|
|
2512
2512
|
`[MCP] Cleaning up ${expiredSessions.length} idle session(s)`
|
|
2513
2513
|
);
|
|
2514
2514
|
for (const sessionId of expiredSessions) {
|
|
2515
|
+
const transport = transports?.get(sessionId);
|
|
2516
|
+
if (transport?.close) {
|
|
2517
|
+
Promise.resolve(transport.close()).catch((e) => {
|
|
2518
|
+
console.warn(
|
|
2519
|
+
`[MCP] Error closing transport for session ${sessionId}:`,
|
|
2520
|
+
e
|
|
2521
|
+
);
|
|
2522
|
+
});
|
|
2523
|
+
}
|
|
2524
|
+
transports?.delete(sessionId);
|
|
2515
2525
|
sessions.delete(sessionId);
|
|
2516
2526
|
mcpServerInstance?.cleanupSessionSubscriptions?.(sessionId);
|
|
2527
|
+
console.log(
|
|
2528
|
+
`[MCP] Cleaned up resource subscriptions for session ${sessionId}`
|
|
2529
|
+
);
|
|
2517
2530
|
}
|
|
2518
2531
|
}
|
|
2519
2532
|
}, 6e4);
|
|
@@ -2530,11 +2543,18 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
|
|
|
2530
2543
|
idleCleanupInterval = startIdleCleanup(
|
|
2531
2544
|
sessions,
|
|
2532
2545
|
idleTimeoutMs,
|
|
2546
|
+
transports,
|
|
2533
2547
|
mcpServerInstance
|
|
2534
2548
|
);
|
|
2535
2549
|
}
|
|
2536
2550
|
const handleRequest = /* @__PURE__ */ __name(async (c) => {
|
|
2537
2551
|
const sessionId = c.req.header("mcp-session-id");
|
|
2552
|
+
if (c.req.method === "HEAD") {
|
|
2553
|
+
if (sessionId && sessions.has(sessionId)) {
|
|
2554
|
+
sessions.get(sessionId).lastAccessedAt = Date.now();
|
|
2555
|
+
}
|
|
2556
|
+
return new Response(null, { status: 200 });
|
|
2557
|
+
}
|
|
2538
2558
|
if (sessionId && transports.has(sessionId)) {
|
|
2539
2559
|
const transport2 = transports.get(sessionId);
|
|
2540
2560
|
if (sessions.has(sessionId)) {
|
|
@@ -2591,7 +2611,7 @@ async function mountMcp(app, mcpServerInstance, sessions, config, isProductionMo
|
|
|
2591
2611
|
return transport.handleRequest(c.req.raw);
|
|
2592
2612
|
}, "handleRequest");
|
|
2593
2613
|
for (const endpoint of ["/mcp", "/sse"]) {
|
|
2594
|
-
app.on(["GET", "POST", "DELETE"], endpoint, handleRequest);
|
|
2614
|
+
app.on(["GET", "POST", "DELETE", "HEAD"], endpoint, handleRequest);
|
|
2595
2615
|
}
|
|
2596
2616
|
console.log(
|
|
2597
2617
|
`[MCP] Server mounted at /mcp and /sse (using FetchStreamableHTTPServerTransport - Web Standard APIs)`
|
|
@@ -40,14 +40,17 @@ export interface SessionData {
|
|
|
40
40
|
* Start idle session cleanup interval
|
|
41
41
|
*
|
|
42
42
|
* Monitors sessions and removes them if they've been inactive for too long.
|
|
43
|
-
*
|
|
44
|
-
*
|
|
43
|
+
* Also cleans up the associated transports to prevent "Server not initialized" errors
|
|
44
|
+
* when clients try to reconnect with expired session IDs.
|
|
45
45
|
*
|
|
46
46
|
* @param sessions - Map of active sessions
|
|
47
47
|
* @param idleTimeoutMs - Idle timeout in milliseconds
|
|
48
|
+
* @param transports - Optional map of transports by session ID (to close on cleanup)
|
|
48
49
|
* @param mcpServerInstance - Optional MCP server instance for cleanup callbacks
|
|
49
50
|
*/
|
|
50
|
-
export declare function startIdleCleanup(sessions: Map<string, SessionData>, idleTimeoutMs: number,
|
|
51
|
+
export declare function startIdleCleanup(sessions: Map<string, SessionData>, idleTimeoutMs: number, transports?: Map<string, {
|
|
52
|
+
close?: () => Promise<void> | void;
|
|
53
|
+
}>, mcpServerInstance?: {
|
|
51
54
|
cleanupSessionSubscriptions?: (sessionId: string) => void;
|
|
52
55
|
}): NodeJS.Timeout | undefined;
|
|
53
56
|
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../../src/server/sessions/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../../src/server/sessions/session-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAEjF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClC,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAAE,CAAC,EAChE,iBAAiB,CAAC,EAAE;IAClB,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,GACA,MAAM,CAAC,OAAO,GAAG,SAAS,CAyC5B"}
|
package/dist/src/session.d.ts
CHANGED
|
@@ -58,6 +58,20 @@ export declare class MCPSession {
|
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
60
|
get tools(): Tool[];
|
|
61
|
+
/**
|
|
62
|
+
* List all available tools from the MCP server.
|
|
63
|
+
* This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
|
|
64
|
+
*
|
|
65
|
+
* @param options - Optional request options
|
|
66
|
+
* @returns Array of available tools
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const tools = await session.listTools();
|
|
71
|
+
* console.log(`Available tools: ${tools.map(t => t.name).join(", ")}`);
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
listTools(options?: RequestOptions): Promise<Tool[]>;
|
|
61
75
|
/**
|
|
62
76
|
* Get the server capabilities advertised during initialization.
|
|
63
77
|
*
|