@mcp-ts/sdk 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/adapters/agui-adapter.d.mts +1 -1
  2. package/dist/adapters/agui-adapter.d.ts +1 -1
  3. package/dist/adapters/agui-adapter.js +9 -5
  4. package/dist/adapters/agui-adapter.js.map +1 -1
  5. package/dist/adapters/agui-adapter.mjs +9 -5
  6. package/dist/adapters/agui-adapter.mjs.map +1 -1
  7. package/dist/adapters/agui-middleware.d.mts +1 -1
  8. package/dist/adapters/agui-middleware.d.ts +1 -1
  9. package/dist/adapters/ai-adapter.d.mts +1 -1
  10. package/dist/adapters/ai-adapter.d.ts +1 -1
  11. package/dist/adapters/ai-adapter.js +9 -5
  12. package/dist/adapters/ai-adapter.js.map +1 -1
  13. package/dist/adapters/ai-adapter.mjs +9 -5
  14. package/dist/adapters/ai-adapter.mjs.map +1 -1
  15. package/dist/adapters/langchain-adapter.d.mts +1 -1
  16. package/dist/adapters/langchain-adapter.d.ts +1 -1
  17. package/dist/adapters/langchain-adapter.js +9 -5
  18. package/dist/adapters/langchain-adapter.js.map +1 -1
  19. package/dist/adapters/langchain-adapter.mjs +9 -5
  20. package/dist/adapters/langchain-adapter.mjs.map +1 -1
  21. package/dist/client/react.js.map +1 -1
  22. package/dist/client/react.mjs.map +1 -1
  23. package/dist/index.d.mts +2 -2
  24. package/dist/index.d.ts +2 -2
  25. package/dist/index.js +83 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +83 -7
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/server/index.d.mts +13 -1
  30. package/dist/server/index.d.ts +13 -1
  31. package/dist/server/index.js +66 -1
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/server/index.mjs +66 -2
  34. package/dist/server/index.mjs.map +1 -1
  35. package/dist/shared/index.d.mts +2 -2
  36. package/dist/shared/index.d.ts +2 -2
  37. package/dist/shared/index.js +17 -5
  38. package/dist/shared/index.js.map +1 -1
  39. package/dist/shared/index.mjs +17 -5
  40. package/dist/shared/index.mjs.map +1 -1
  41. package/dist/{tool-router-C8hIA-tg.d.mts → tool-router-BfE_9tay.d.mts} +5 -0
  42. package/dist/{tool-router-CdX8e9bk.d.ts → tool-router-CP7qLk1J.d.ts} +5 -0
  43. package/package.json +1 -1
  44. package/src/server/index.ts +8 -1
  45. package/src/server/storage/index.ts +77 -2
  46. package/src/server/storage/types.ts +14 -0
  47. package/src/shared/meta-tools.ts +16 -7
  48. package/src/shared/tool-router.ts +13 -0
package/dist/index.mjs CHANGED
@@ -1174,6 +1174,59 @@ function warnIfNeonConnectionStringIsInsecure(connectionString) {
1174
1174
  }
1175
1175
  var storageInstance = null;
1176
1176
  var storagePromise = null;
1177
+ var sessionMutationListeners = /* @__PURE__ */ new Set();
1178
+ function emitSessionMutation(event) {
1179
+ for (const listener of sessionMutationListeners) {
1180
+ try {
1181
+ const result = listener(event);
1182
+ if (result && typeof result.catch === "function") {
1183
+ void result.catch((error) => {
1184
+ console.error("[mcp-ts][Storage] Session mutation listener failed:", error);
1185
+ });
1186
+ }
1187
+ } catch (error) {
1188
+ console.error("[mcp-ts][Storage] Session mutation listener failed:", error);
1189
+ }
1190
+ }
1191
+ }
1192
+ function createSessionMutationEvent(prop, args) {
1193
+ const timestamp = Date.now();
1194
+ if (prop === "create") {
1195
+ const [session, ttl] = args;
1196
+ if (!session?.userId || !session?.sessionId) return null;
1197
+ return {
1198
+ type: "create",
1199
+ userId: session.userId,
1200
+ sessionId: session.sessionId,
1201
+ session,
1202
+ ttl,
1203
+ timestamp
1204
+ };
1205
+ }
1206
+ if (prop === "update") {
1207
+ const [userId, sessionId, patch, ttl] = args;
1208
+ if (!userId || !sessionId) return null;
1209
+ return {
1210
+ type: "update",
1211
+ userId,
1212
+ sessionId,
1213
+ patch,
1214
+ ttl,
1215
+ timestamp
1216
+ };
1217
+ }
1218
+ if (prop === "delete") {
1219
+ const [userId, sessionId] = args;
1220
+ if (!userId || !sessionId) return null;
1221
+ return {
1222
+ type: "delete",
1223
+ userId,
1224
+ sessionId,
1225
+ timestamp
1226
+ };
1227
+ }
1228
+ return null;
1229
+ }
1177
1230
  async function initializeStorage(store) {
1178
1231
  if (typeof store.init === "function") {
1179
1232
  await store.init();
@@ -1311,13 +1364,24 @@ async function getStorage() {
1311
1364
  storageInstance = await storagePromise;
1312
1365
  return storageInstance;
1313
1366
  }
1367
+ function onSessionMutation(listener) {
1368
+ sessionMutationListeners.add(listener);
1369
+ return () => {
1370
+ sessionMutationListeners.delete(listener);
1371
+ };
1372
+ }
1314
1373
  var sessions = new Proxy({}, {
1315
1374
  get(_target, prop) {
1316
1375
  return async (...args) => {
1317
1376
  const instance = await getStorage();
1318
1377
  const value = instance[prop];
1319
1378
  if (typeof value === "function") {
1320
- return value.apply(instance, args);
1379
+ const result = await value.apply(instance, args);
1380
+ const event = createSessionMutationEvent(prop, args);
1381
+ if (event) {
1382
+ emitSessionMutation(event);
1383
+ }
1384
+ return result;
1321
1385
  }
1322
1386
  return value;
1323
1387
  };
@@ -4690,8 +4754,13 @@ function createExecuteToolDefinition() {
4690
4754
  };
4691
4755
  }
4692
4756
  async function executeMetaTool(toolName, args, router, callToolFn) {
4693
- const resolveToolSchema = (name, namespace, options) => {
4757
+ const resolveToolSchema = async (name, namespace, options) => {
4694
4758
  try {
4759
+ if (typeof router.resolveToolSchema === "function") {
4760
+ return {
4761
+ tool: await router.resolveToolSchema(name, namespace, options)
4762
+ };
4763
+ }
4695
4764
  return { tool: router.getToolSchema(name, namespace, options) };
4696
4765
  } catch (err) {
4697
4766
  const errorMessage = err instanceof Error ? err.message : String(err);
@@ -4743,13 +4812,12 @@ async function executeMetaTool(toolName, args, router, callToolFn) {
4743
4812
  const searchOptions = { serverId, serverName };
4744
4813
  const selectMatch = query.match(/^select:(.+)$/i);
4745
4814
  if (selectMatch) {
4746
- await router.listTools({ serverId, serverName, limit: 1 });
4747
4815
  const requested = selectMatch[1].split(",").map((s) => s.trim()).filter(Boolean);
4748
4816
  const found = [];
4749
4817
  const errors = [];
4750
4818
  const namespace = serverId ?? serverName;
4751
4819
  for (const requestedToolName of requested) {
4752
- const { tool, error } = resolveToolSchema(requestedToolName, namespace, {
4820
+ const { tool, error } = await resolveToolSchema(requestedToolName, namespace, {
4753
4821
  allowServerNameFragment: Boolean(serverName && !serverId)
4754
4822
  });
4755
4823
  if (error) {
@@ -4813,7 +4881,7 @@ async function executeMetaTool(toolName, args, router, callToolFn) {
4813
4881
  case "mcp_get_tool_schema": {
4814
4882
  const name = String(args.toolName ?? "");
4815
4883
  const namespace = String(args.serverId ?? "") || void 0;
4816
- const { tool, error } = resolveToolSchema(name, namespace);
4884
+ const { tool, error } = await resolveToolSchema(name, namespace);
4817
4885
  if (error) {
4818
4886
  return error;
4819
4887
  }
@@ -4855,7 +4923,7 @@ async function executeMetaTool(toolName, args, router, callToolFn) {
4855
4923
  isError: true
4856
4924
  };
4857
4925
  }
4858
- const { tool, error } = resolveToolSchema(targetToolName, namespace);
4926
+ const { tool, error } = await resolveToolSchema(targetToolName, namespace);
4859
4927
  if (error) {
4860
4928
  return error;
4861
4929
  }
@@ -5032,6 +5100,14 @@ var ToolRouter = class {
5032
5100
  }
5033
5101
  return matches[0];
5034
5102
  }
5103
+ /**
5104
+ * Resolve the full tool definition by name, ensuring the router index has
5105
+ * been initialized first.
5106
+ */
5107
+ async resolveToolSchema(toolName, namespace, options = {}) {
5108
+ await this.ensureInitialized();
5109
+ return this.getToolSchema(toolName, namespace, options);
5110
+ }
5035
5111
  /**
5036
5112
  * Get compact (schema-less) summaries for all tools.
5037
5113
  */
@@ -5228,6 +5304,6 @@ function globToRegExp(pattern) {
5228
5304
  return new RegExp(regexPattern);
5229
5305
  }
5230
5306
 
5231
- export { APP_HOST_DEFAULTS, AppHost, AuthenticationError, ConfigurationError, ConnectionError, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_MCP_APP_CSP, DEFAULT_POLICY_URI, DisposableStore, Emitter, InvalidStateError, MCPClient, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, McpError, MultiSessionClient, NotConnectedError, REDIS_KEY_PREFIX, RpcErrorCodes, SANDBOX_PROXY_READY_METHOD, SANDBOX_RESOURCE_READY_METHOD, SESSION_TTL_SECONDS, SOFTWARE_ID, SOFTWARE_VERSION, SSEClient, SSEConnectionManager, STATE_EXPIRATION_MS, SchemaCompressor, SessionNotFoundError, SessionValidationError, StorageOAuthClientProvider, TOKEN_EXPIRY_BUFFER_MS, ToolExecutionError, ToolIndex, ToolRouter, UnauthorizedError, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createNextMcpHandler, createRegexSearchToolDefinition, createSSEHandler, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isCallToolSuccess, isConnectAuthRequired, isConnectError, isConnectSuccess, isListToolsSuccess, isMetaTool, resolveMetaToolProxy, sanitizeServerLabel, sessions };
5307
+ export { APP_HOST_DEFAULTS, AppHost, AuthenticationError, ConfigurationError, ConnectionError, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_MCP_APP_CSP, DEFAULT_POLICY_URI, DisposableStore, Emitter, InvalidStateError, MCPClient, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, McpError, MultiSessionClient, NotConnectedError, REDIS_KEY_PREFIX, RpcErrorCodes, SANDBOX_PROXY_READY_METHOD, SANDBOX_RESOURCE_READY_METHOD, SESSION_TTL_SECONDS, SOFTWARE_ID, SOFTWARE_VERSION, SSEClient, SSEConnectionManager, STATE_EXPIRATION_MS, SchemaCompressor, SessionNotFoundError, SessionValidationError, StorageOAuthClientProvider, TOKEN_EXPIRY_BUFFER_MS, ToolExecutionError, ToolIndex, ToolRouter, UnauthorizedError, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createNextMcpHandler, createRegexSearchToolDefinition, createSSEHandler, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isCallToolSuccess, isConnectAuthRequired, isConnectError, isConnectSuccess, isListToolsSuccess, isMetaTool, onSessionMutation, resolveMetaToolProxy, sanitizeServerLabel, sessions };
5232
5308
  //# sourceMappingURL=index.mjs.map
5233
5309
  //# sourceMappingURL=index.mjs.map