@mcp-ts/sdk 2.0.0 → 2.2.0

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 (53) hide show
  1. package/dist/adapters/agui-adapter.d.mts +2 -2
  2. package/dist/adapters/agui-adapter.d.ts +2 -2
  3. package/dist/adapters/agui-adapter.js +1 -0
  4. package/dist/adapters/agui-adapter.js.map +1 -1
  5. package/dist/adapters/agui-adapter.mjs +1 -0
  6. package/dist/adapters/agui-adapter.mjs.map +1 -1
  7. package/dist/adapters/agui-middleware.d.mts +2 -2
  8. package/dist/adapters/agui-middleware.d.ts +2 -2
  9. package/dist/adapters/ai-adapter.d.mts +2 -2
  10. package/dist/adapters/ai-adapter.d.ts +2 -2
  11. package/dist/adapters/ai-adapter.js +1 -0
  12. package/dist/adapters/ai-adapter.js.map +1 -1
  13. package/dist/adapters/ai-adapter.mjs +1 -0
  14. package/dist/adapters/ai-adapter.mjs.map +1 -1
  15. package/dist/adapters/langchain-adapter.d.mts +2 -2
  16. package/dist/adapters/langchain-adapter.d.ts +2 -2
  17. package/dist/adapters/langchain-adapter.js +1 -0
  18. package/dist/adapters/langchain-adapter.js.map +1 -1
  19. package/dist/adapters/langchain-adapter.mjs +1 -0
  20. package/dist/adapters/langchain-adapter.mjs.map +1 -1
  21. package/dist/client/index.d.mts +2 -2
  22. package/dist/client/index.d.ts +2 -2
  23. package/dist/client/react.d.mts +4 -4
  24. package/dist/client/react.d.ts +4 -4
  25. package/dist/client/react.js.map +1 -1
  26. package/dist/client/react.mjs.map +1 -1
  27. package/dist/client/vue.d.mts +4 -4
  28. package/dist/client/vue.d.ts +4 -4
  29. package/dist/{index-eaH14_5u.d.mts → index-Cfjsme-a.d.mts} +1 -1
  30. package/dist/{index-C9gvpxy5.d.ts → index-CmjMd2ac.d.ts} +1 -1
  31. package/dist/index.d.mts +3 -3
  32. package/dist/index.d.ts +3 -3
  33. package/dist/index.js +47 -7
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.mjs +47 -7
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/server/index.d.mts +2 -2
  38. package/dist/server/index.d.ts +2 -2
  39. package/dist/shared/index.d.mts +6 -6
  40. package/dist/shared/index.d.ts +6 -6
  41. package/dist/shared/index.js +47 -7
  42. package/dist/shared/index.js.map +1 -1
  43. package/dist/shared/index.mjs +47 -7
  44. package/dist/shared/index.mjs.map +1 -1
  45. package/dist/{tool-router-Dnd6IOKC.d.mts → tool-router-C8hIA-tg.d.mts} +26 -1
  46. package/dist/{tool-router-Ddtybmr0.d.ts → tool-router-CdX8e9bk.d.ts} +26 -1
  47. package/dist/{types-BCAG20P6.d.mts → types-CxFaaZrM.d.mts} +2 -1
  48. package/dist/{types-BCAG20P6.d.ts → types-CxFaaZrM.d.ts} +2 -1
  49. package/package.json +1 -1
  50. package/src/shared/meta-tools.ts +5 -4
  51. package/src/shared/tool-index.ts +1 -0
  52. package/src/shared/tool-router.ts +69 -6
  53. package/src/shared/types.ts +2 -1
@@ -1,9 +1,9 @@
1
- import { c as SSEClient } from '../index-eaH14_5u.mjs';
2
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-eaH14_5u.mjs';
1
+ import { c as SSEClient } from '../index-Cfjsme-a.mjs';
2
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-Cfjsme-a.mjs';
3
3
  import { c as McpConnectionState, M as McpConnectionEvent } from '../events-CK3N--3g.mjs';
4
4
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-CK3N--3g.mjs';
5
- import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-BCAG20P6.mjs';
6
- export { q as McpRpcRequest, r as McpRpcResponse } from '../types-BCAG20P6.mjs';
5
+ import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-CxFaaZrM.mjs';
6
+ export { q as McpRpcRequest, r as McpRpcResponse } from '../types-CxFaaZrM.mjs';
7
7
  import '@modelcontextprotocol/ext-apps/app-bridge';
8
8
  import '@modelcontextprotocol/sdk/types.js';
9
9
 
@@ -1,9 +1,9 @@
1
- import { c as SSEClient } from '../index-C9gvpxy5.js';
2
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-C9gvpxy5.js';
1
+ import { c as SSEClient } from '../index-CmjMd2ac.js';
2
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-CmjMd2ac.js';
3
3
  import { c as McpConnectionState, M as McpConnectionEvent } from '../events-CK3N--3g.js';
4
4
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-CK3N--3g.js';
5
- import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-BCAG20P6.js';
6
- export { q as McpRpcRequest, r as McpRpcResponse } from '../types-BCAG20P6.js';
5
+ import { v as ToolInfo, k as FinishAuthResult, o as ListToolsRpcResult, L as ListPromptsResult, m as ListResourcesResult } from '../types-CxFaaZrM.js';
6
+ export { q as McpRpcRequest, r as McpRpcResponse } from '../types-CxFaaZrM.js';
7
7
  import '@modelcontextprotocol/ext-apps/app-bridge';
8
8
  import '@modelcontextprotocol/sdk/types.js';
9
9
 
@@ -1,5 +1,5 @@
1
1
  import { M as McpConnectionEvent, d as McpObservabilityEvent, e as McpAppsUIEvent } from './events-CK3N--3g.mjs';
2
- import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, o as ListToolsRpcResult, l as GetSessionResult, k as FinishAuthResult, L as ListPromptsResult, m as ListResourcesResult } from './types-BCAG20P6.mjs';
2
+ import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, o as ListToolsRpcResult, l as GetSessionResult, k as FinishAuthResult, L as ListPromptsResult, m as ListResourcesResult } from './types-CxFaaZrM.mjs';
3
3
  import { AppBridge } from '@modelcontextprotocol/ext-apps/app-bridge';
4
4
  import { LoggingMessageNotification } from '@modelcontextprotocol/sdk/types.js';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import { M as McpConnectionEvent, d as McpObservabilityEvent, e as McpAppsUIEvent } from './events-CK3N--3g.js';
2
- import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, o as ListToolsRpcResult, l as GetSessionResult, k as FinishAuthResult, L as ListPromptsResult, m as ListResourcesResult } from './types-BCAG20P6.js';
2
+ import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, o as ListToolsRpcResult, l as GetSessionResult, k as FinishAuthResult, L as ListPromptsResult, m as ListResourcesResult } from './types-CxFaaZrM.js';
3
3
  import { AppBridge } from '@modelcontextprotocol/ext-apps/app-bridge';
4
4
  import { LoggingMessageNotification } from '@modelcontextprotocol/sdk/types.js';
5
5
 
package/dist/index.d.mts CHANGED
@@ -2,11 +2,11 @@ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvide
2
2
  export { A as AuthenticationError, C as ConfigurationError, a as ConnectionError, I as InvalidStateError, M as McpError, N as NotConnectedError, R as RpcErrorCode, b as RpcErrorCodes, S as SessionNotFoundError, c as SessionValidationError, T as ToolExecutionError, U as UnauthorizedError, s as sanitizeServerLabel } from './utils-DELRKQPU.mjs';
3
3
  export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, SessionStore, createNextMcpHandler, createSSEHandler, sessions } from './server/index.mjs';
4
4
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from './events-CK3N--3g.mjs';
5
- export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, l as GetSessionResult, L as ListPromptsResult, m as ListResourcesResult, n as ListToolsResponse, o as ListToolsRpcResult, M as McpRpcMethod, p as McpRpcParams, q as McpRpcRequest, r as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-BCAG20P6.mjs';
5
+ export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, l as GetSessionResult, L as ListPromptsResult, m as ListResourcesResult, n as ListToolsResponse, o as ListToolsRpcResult, M as McpRpcMethod, p as McpRpcParams, q as McpRpcRequest, r as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-CxFaaZrM.mjs';
6
6
  export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
7
7
  export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
8
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-eaH14_5u.mjs';
8
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-Cfjsme-a.mjs';
9
9
  export { CallToolFn, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_POLICY_URI, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, REDIS_KEY_PREFIX, SESSION_TTL_SECONDS, SOFTWARE_ID, SOFTWARE_VERSION, STATE_EXPIRATION_MS, TOKEN_EXPIRY_BUFFER_MS, ToolUiConfig, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createRegexSearchToolDefinition, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isMetaTool, resolveMetaToolProxy } from './shared/index.mjs';
10
- export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-Dnd6IOKC.mjs';
10
+ export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-C8hIA-tg.mjs';
11
11
  import '@modelcontextprotocol/sdk/client/auth.js';
12
12
  import '@modelcontextprotocol/ext-apps/app-bridge';
package/dist/index.d.ts CHANGED
@@ -2,11 +2,11 @@ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvide
2
2
  export { A as AuthenticationError, C as ConfigurationError, a as ConnectionError, I as InvalidStateError, M as McpError, N as NotConnectedError, R as RpcErrorCode, b as RpcErrorCodes, S as SessionNotFoundError, c as SessionValidationError, T as ToolExecutionError, U as UnauthorizedError, s as sanitizeServerLabel } from './utils-DELRKQPU.js';
3
3
  export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, SessionStore, createNextMcpHandler, createSSEHandler, sessions } from './server/index.js';
4
4
  export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from './events-CK3N--3g.js';
5
- export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, l as GetSessionResult, L as ListPromptsResult, m as ListResourcesResult, n as ListToolsResponse, o as ListToolsRpcResult, M as McpRpcMethod, p as McpRpcParams, q as McpRpcRequest, r as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-BCAG20P6.js';
5
+ export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, l as GetSessionResult, L as ListPromptsResult, m as ListResourcesResult, n as ListToolsResponse, o as ListToolsRpcResult, M as McpRpcMethod, p as McpRpcParams, q as McpRpcRequest, r as McpRpcResponse, R as ReadResourceParams, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-CxFaaZrM.js';
6
6
  export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
7
7
  export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
8
- export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-C9gvpxy5.js';
8
+ export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-CmjMd2ac.js';
9
9
  export { CallToolFn, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_POLICY_URI, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, REDIS_KEY_PREFIX, SESSION_TTL_SECONDS, SOFTWARE_ID, SOFTWARE_VERSION, STATE_EXPIRATION_MS, TOKEN_EXPIRY_BUFFER_MS, ToolUiConfig, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createRegexSearchToolDefinition, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isMetaTool, resolveMetaToolProxy } from './shared/index.js';
10
- export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-Ddtybmr0.js';
10
+ export { C as CompactTool, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, a as ToolIndex, b as ToolIndexOptions, c as ToolListResult, d as ToolRouter, e as ToolRouterClientInput, f as ToolRouterOptions, g as ToolRouterStrategy, h as ToolSearchOptions, i as ToolServerSummary, j as ToolSummary } from './tool-router-CdX8e9bk.js';
11
11
  import '@modelcontextprotocol/sdk/client/auth.js';
12
12
  import '@modelcontextprotocol/ext-apps/app-bridge';
package/dist/index.js CHANGED
@@ -4747,7 +4747,7 @@ function createRegexSearchToolDefinition() {
4747
4747
  function createGetSchemaToolDefinition() {
4748
4748
  return {
4749
4749
  name: "mcp_get_tool_schema",
4750
- description: "Get the full input schema (parameters) for a specific tool. Call this after mcp_search_tools to get the parameter details needed to call a tool correctly. Do NOT call the discovered tool directly; after reading the schema, call mcp_execute_tool.",
4750
+ description: "Get the full input schema (parameters) and output schema (result shape) for a specific tool. Call this after mcp_search_tools to get the parameter details needed to call a tool correctly and understand what it returns. Do NOT call the discovered tool directly; after reading the schema, call mcp_execute_tool.",
4751
4751
  inputSchema: {
4752
4752
  type: "object",
4753
4753
  properties: {
@@ -4932,6 +4932,7 @@ async function executeMetaTool(toolName, args, router, callToolFn) {
4932
4932
  name: tool.name,
4933
4933
  description: tool.description,
4934
4934
  inputSchema: tool.inputSchema,
4935
+ outputSchema: tool.outputSchema,
4935
4936
  executionInstructions: {
4936
4937
  nextTool: "mcp_execute_tool",
4937
4938
  toolName: tool.name,
@@ -5027,18 +5028,29 @@ var ToolRouter = class {
5027
5028
  this.options = options;
5028
5029
  __publicField(this, "index");
5029
5030
  __publicField(this, "allTools", []);
5031
+ __publicField(this, "pinnedTools", []);
5032
+ __publicField(this, "deferredTools", []);
5033
+ __publicField(this, "discoverableTools", []);
5030
5034
  __publicField(this, "groupsMap", /* @__PURE__ */ new Map());
5031
5035
  __publicField(this, "strategy");
5032
5036
  __publicField(this, "maxTools");
5033
5037
  __publicField(this, "compactSchemas");
5034
5038
  __publicField(this, "activeGroups");
5035
5039
  __publicField(this, "customGroups");
5040
+ __publicField(this, "pinnedToolNames");
5041
+ __publicField(this, "deferredToolNames");
5042
+ __publicField(this, "excludeToolMatchers");
5036
5043
  __publicField(this, "initialized", false);
5037
5044
  this.strategy = options.strategy ?? "all";
5038
5045
  this.maxTools = options.maxTools ?? 40;
5039
5046
  this.compactSchemas = options.compactSchemas ?? false;
5040
5047
  this.activeGroups = new Set(options.activeGroups ?? []);
5041
5048
  this.customGroups = options.groups;
5049
+ this.pinnedToolNames = new Set(options.pinnedTools ?? []);
5050
+ this.deferredToolNames = new Set(options.deferredTools ?? []);
5051
+ this.excludeToolMatchers = (options.excludeTools ?? []).map(
5052
+ (pattern) => globToRegExp(pattern)
5053
+ );
5042
5054
  this.index = new ToolIndex({
5043
5055
  embedFn: options.embedFn,
5044
5056
  keywordWeight: options.keywordWeight
@@ -5059,13 +5071,14 @@ var ToolRouter = class {
5059
5071
  await this.ensureInitialized();
5060
5072
  switch (this.strategy) {
5061
5073
  case "search":
5062
- return this.getMetaToolDefinitions();
5074
+ return [...this.getMetaToolDefinitions(), ...this.pinnedTools];
5063
5075
  case "groups":
5064
5076
  return this.getGroupFilteredTools();
5065
5077
  case "all":
5066
5078
  default:
5079
+ const directlyVisibleTools = this.getDirectlyVisibleTools();
5067
5080
  if (this.compactSchemas) {
5068
- return this.allTools.map((t) => {
5081
+ return directlyVisibleTools.map((t) => {
5069
5082
  const compact = SchemaCompressor.toCompact(t);
5070
5083
  return {
5071
5084
  name: compact.name,
@@ -5074,7 +5087,7 @@ var ToolRouter = class {
5074
5087
  };
5075
5088
  });
5076
5089
  }
5077
- return [...this.allTools];
5090
+ return [...directlyVisibleTools];
5078
5091
  }
5079
5092
  }
5080
5093
  /**
@@ -5186,8 +5199,14 @@ var ToolRouter = class {
5186
5199
  /** Lazy initialization — fetches tools from all connected clients. */
5187
5200
  async ensureInitialized() {
5188
5201
  if (this.initialized) return;
5189
- this.allTools = await this.fetchAllTools();
5190
- await this.index.buildIndex(this.allTools);
5202
+ const fetchedTools = await this.fetchAllTools();
5203
+ this.allTools = fetchedTools.filter((tool) => !this.matchesExcludedTool(tool.name));
5204
+ this.pinnedTools = this.allTools.filter((tool) => this.matchesPinnedTool(tool.name));
5205
+ this.deferredTools = this.allTools.filter(
5206
+ (tool) => !this.matchesPinnedTool(tool.name) && this.matchesDeferredTool(tool)
5207
+ );
5208
+ this.discoverableTools = this.allTools.filter((tool) => !this.matchesPinnedTool(tool.name));
5209
+ await this.index.buildIndex(this.discoverableTools);
5191
5210
  this.buildGroups();
5192
5211
  this.initialized = true;
5193
5212
  }
@@ -5263,7 +5282,7 @@ var ToolRouter = class {
5263
5282
  }
5264
5283
  }
5265
5284
  }
5266
- const filtered = this.allTools.filter((t) => activeToolNames.has(t.name));
5285
+ const filtered = this.getDirectlyVisibleTools().filter((t) => activeToolNames.has(t.name));
5267
5286
  if (this.compactSchemas) {
5268
5287
  return filtered.slice(0, this.maxTools).map((t) => {
5269
5288
  const compact = SchemaCompressor.toCompact(t);
@@ -5286,7 +5305,28 @@ var ToolRouter = class {
5286
5305
  createExecuteToolDefinition()
5287
5306
  ];
5288
5307
  }
5308
+ matchesPinnedTool(toolName) {
5309
+ return this.pinnedToolNames.has(toolName);
5310
+ }
5311
+ matchesDeferredTool(tool) {
5312
+ if (this.deferredToolNames.has(tool.name)) {
5313
+ return true;
5314
+ }
5315
+ const meta = tool._meta;
5316
+ return meta?.toolRouter?.deferred === true;
5317
+ }
5318
+ matchesExcludedTool(toolName) {
5319
+ return this.excludeToolMatchers.some((matcher) => matcher.test(toolName));
5320
+ }
5321
+ getDirectlyVisibleTools() {
5322
+ return this.allTools.filter((tool) => !this.matchesDeferredTool(tool) || this.matchesPinnedTool(tool.name));
5323
+ }
5289
5324
  };
5325
+ function globToRegExp(pattern) {
5326
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
5327
+ const regexPattern = `^${escaped.replace(/\*/g, ".*")}$`;
5328
+ return new RegExp(regexPattern);
5329
+ }
5290
5330
 
5291
5331
  exports.APP_HOST_DEFAULTS = APP_HOST_DEFAULTS;
5292
5332
  exports.AppHost = AppHost;