@1mcp/agent 0.29.2 → 0.30.0-beta1
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/build/commands/serve/index.d.ts +58 -0
- package/build/commands/serve/index.d.ts.map +1 -1
- package/build/commands/serve/index.js +70 -0
- package/build/commands/serve/index.js.map +1 -1
- package/build/commands/serve/serve.d.ts +11 -0
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +73 -1
- package/build/commands/serve/serve.js.map +1 -1
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.d.ts.map +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/constants/mcp.js.map +1 -1
- package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -1
- package/build/core/capabilities/capabilityAggregator.js +42 -18
- package/build/core/capabilities/capabilityAggregator.js.map +1 -1
- package/build/core/capabilities/capabilityManager.d.ts +3 -2
- package/build/core/capabilities/capabilityManager.d.ts.map +1 -1
- package/build/core/capabilities/capabilityManager.js +3 -3
- package/build/core/capabilities/capabilityManager.js.map +1 -1
- package/build/core/capabilities/internal/installationTools.d.ts.map +1 -1
- package/build/core/capabilities/internal/installationTools.js +4 -0
- package/build/core/capabilities/internal/installationTools.js.map +1 -1
- package/build/core/capabilities/internal/lazyTools.d.ts +11 -0
- package/build/core/capabilities/internal/lazyTools.d.ts.map +1 -0
- package/build/core/capabilities/internal/lazyTools.js +48 -0
- package/build/core/capabilities/internal/lazyTools.js.map +1 -0
- package/build/core/capabilities/internal/managementTools.d.ts.map +1 -1
- package/build/core/capabilities/internal/managementTools.js +9 -0
- package/build/core/capabilities/internal/managementTools.js.map +1 -1
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts +7 -1
- package/build/core/capabilities/internalCapabilitiesProvider.d.ts.map +1 -1
- package/build/core/capabilities/internalCapabilitiesProvider.js +31 -2
- package/build/core/capabilities/internalCapabilitiesProvider.js.map +1 -1
- package/build/core/capabilities/lazyLoadingOrchestrator.d.ts +175 -0
- package/build/core/capabilities/lazyLoadingOrchestrator.d.ts.map +1 -0
- package/build/core/capabilities/lazyLoadingOrchestrator.js +515 -0
- package/build/core/capabilities/lazyLoadingOrchestrator.js.map +1 -0
- package/build/core/capabilities/metaToolProvider.d.ts +118 -0
- package/build/core/capabilities/metaToolProvider.d.ts.map +1 -0
- package/build/core/capabilities/metaToolProvider.js +374 -0
- package/build/core/capabilities/metaToolProvider.js.map +1 -0
- package/build/core/capabilities/schemaCache.d.ts +124 -0
- package/build/core/capabilities/schemaCache.d.ts.map +1 -0
- package/build/core/capabilities/schemaCache.js +248 -0
- package/build/core/capabilities/schemaCache.js.map +1 -0
- package/build/core/capabilities/schemas/metaToolSchemas.d.ts +92 -0
- package/build/core/capabilities/schemas/metaToolSchemas.d.ts.map +1 -0
- package/build/core/capabilities/schemas/metaToolSchemas.js +68 -0
- package/build/core/capabilities/schemas/metaToolSchemas.js.map +1 -0
- package/build/core/capabilities/toolRegistry.d.ts +140 -0
- package/build/core/capabilities/toolRegistry.d.ts.map +1 -0
- package/build/core/capabilities/toolRegistry.js +284 -0
- package/build/core/capabilities/toolRegistry.js.map +1 -0
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +11 -5
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/flags/flagManager.d.ts.map +1 -1
- package/build/core/flags/flagManager.js +14 -1
- package/build/core/flags/flagManager.js.map +1 -1
- package/build/core/instructions/instructionAggregator.d.ts +21 -0
- package/build/core/instructions/instructionAggregator.d.ts.map +1 -1
- package/build/core/instructions/instructionAggregator.js +78 -3
- package/build/core/instructions/instructionAggregator.js.map +1 -1
- package/build/core/instructions/templateTypes.d.ts +40 -1
- package/build/core/instructions/templateTypes.d.ts.map +1 -1
- package/build/core/instructions/templateTypes.js +70 -0
- package/build/core/instructions/templateTypes.js.map +1 -1
- package/build/core/protocol/requestHandlers.d.ts +2 -1
- package/build/core/protocol/requestHandlers.d.ts.map +1 -1
- package/build/core/protocol/requestHandlers.js +112 -84
- package/build/core/protocol/requestHandlers.js.map +1 -1
- package/build/core/server/adapters/ExternalServerAdapter.d.ts +38 -0
- package/build/core/server/adapters/ExternalServerAdapter.d.ts.map +1 -0
- package/build/core/server/adapters/ExternalServerAdapter.js +50 -0
- package/build/core/server/adapters/ExternalServerAdapter.js.map +1 -0
- package/build/core/server/adapters/ServerRegistry.d.ts +63 -0
- package/build/core/server/adapters/ServerRegistry.d.ts.map +1 -0
- package/build/core/server/adapters/ServerRegistry.js +92 -0
- package/build/core/server/adapters/ServerRegistry.js.map +1 -0
- package/build/core/server/adapters/TemplateServerAdapter.d.ts +47 -0
- package/build/core/server/adapters/TemplateServerAdapter.d.ts.map +1 -0
- package/build/core/server/adapters/TemplateServerAdapter.js +99 -0
- package/build/core/server/adapters/TemplateServerAdapter.js.map +1 -0
- package/build/core/server/adapters/index.d.ts +5 -0
- package/build/core/server/adapters/index.d.ts.map +1 -0
- package/build/core/server/adapters/index.js +6 -0
- package/build/core/server/adapters/index.js.map +1 -0
- package/build/core/server/adapters/types.d.ts +122 -0
- package/build/core/server/adapters/types.d.ts.map +1 -0
- package/build/core/server/adapters/types.js +48 -0
- package/build/core/server/adapters/types.js.map +1 -0
- package/build/core/server/agentConfig.d.ts +19 -0
- package/build/core/server/agentConfig.d.ts.map +1 -1
- package/build/core/server/agentConfig.js +19 -0
- package/build/core/server/agentConfig.js.map +1 -1
- package/build/core/server/connectionManager.d.ts +17 -1
- package/build/core/server/connectionManager.d.ts.map +1 -1
- package/build/core/server/connectionManager.js +65 -5
- package/build/core/server/connectionManager.js.map +1 -1
- package/build/core/server/connectionResolver.d.ts +81 -0
- package/build/core/server/connectionResolver.d.ts.map +1 -0
- package/build/core/server/connectionResolver.js +140 -0
- package/build/core/server/connectionResolver.js.map +1 -0
- package/build/core/server/serverManager.d.ts +13 -0
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +49 -2
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/server/templateServerManager.d.ts +16 -0
- package/build/core/server/templateServerManager.d.ts.map +1 -1
- package/build/core/server/templateServerManager.js +45 -0
- package/build/core/server/templateServerManager.js.map +1 -1
- package/build/domains/preset/manager/presetManager.d.ts +5 -0
- package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
- package/build/domains/preset/manager/presetManager.js +7 -0
- package/build/domains/preset/manager/presetManager.js.map +1 -1
- package/build/logger/logger.d.ts +13 -0
- package/build/logger/logger.d.ts.map +1 -1
- package/build/logger/logger.js +41 -0
- package/build/logger/logger.js.map +1 -1
- package/build/server.d.ts +3 -0
- package/build/server.d.ts.map +1 -1
- package/build/server.js +32 -0
- package/build/server.js.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js +71 -1
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { MCP_URI_SEPARATOR } from '../../constants.js';
|
|
3
|
+
import { ConnectionResolver } from '../../core/server/connectionResolver.js';
|
|
4
|
+
import { ClientStatus } from '../../core/types/index.js';
|
|
5
|
+
import logger, { debugIf, errorIf } from '../../logger/logger.js';
|
|
6
|
+
import { CapabilityAggregator } from './capabilityAggregator.js';
|
|
7
|
+
import { MetaToolProvider } from './metaToolProvider.js';
|
|
8
|
+
import { SchemaCache } from './schemaCache.js';
|
|
9
|
+
import { ToolRegistry } from './toolRegistry.js';
|
|
10
|
+
/**
|
|
11
|
+
* LazyLoadingOrchestrator coordinates lazy loading of tool schemas.
|
|
12
|
+
*
|
|
13
|
+
* Uses composition pattern to combine:
|
|
14
|
+
* - ToolRegistry for lightweight tool metadata
|
|
15
|
+
* - SchemaCache for on-demand schema loading
|
|
16
|
+
* - MetaToolProvider for meta-tool exposure
|
|
17
|
+
* - CapabilityAggregator for full capabilities
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const orchestrator = new LazyLoadingOrchestrator(
|
|
22
|
+
* outboundConnections,
|
|
23
|
+
* agentConfig
|
|
24
|
+
* );
|
|
25
|
+
* await orchestrator.initialize();
|
|
26
|
+
* const capabilities = await orchestrator.getCapabilities();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export class LazyLoadingOrchestrator extends EventEmitter {
|
|
30
|
+
outboundConnections;
|
|
31
|
+
config;
|
|
32
|
+
toolRegistry;
|
|
33
|
+
schemaCache;
|
|
34
|
+
metaToolProvider;
|
|
35
|
+
capabilityAggregator;
|
|
36
|
+
isInitialized = false;
|
|
37
|
+
asyncOrchestrator;
|
|
38
|
+
// Session-specific filters for allowed servers (keyed by sessionId)
|
|
39
|
+
sessionAllowedServers = new Map();
|
|
40
|
+
connectionResolver;
|
|
41
|
+
constructor(outboundConnections, config, asyncOrchestrator, templateHashProvider) {
|
|
42
|
+
super();
|
|
43
|
+
this.outboundConnections = outboundConnections;
|
|
44
|
+
this.config = config;
|
|
45
|
+
this.asyncOrchestrator = asyncOrchestrator;
|
|
46
|
+
this.connectionResolver = new ConnectionResolver(outboundConnections, templateHashProvider);
|
|
47
|
+
// Get lazy loading config
|
|
48
|
+
const lazyConfig = config.get('lazyLoading');
|
|
49
|
+
// Initialize schema cache
|
|
50
|
+
const cacheConfig = {
|
|
51
|
+
maxEntries: lazyConfig.cache.maxEntries,
|
|
52
|
+
ttlMs: lazyConfig.cache.ttlMs,
|
|
53
|
+
};
|
|
54
|
+
this.schemaCache = new SchemaCache(cacheConfig);
|
|
55
|
+
// Initialize tool registry (empty initially)
|
|
56
|
+
this.toolRegistry = ToolRegistry.empty();
|
|
57
|
+
// Initialize capability aggregator (for resources/prompts and full mode)
|
|
58
|
+
this.capabilityAggregator = new CapabilityAggregator(outboundConnections);
|
|
59
|
+
// Initialize meta-tool provider if lazy loading is enabled
|
|
60
|
+
if (lazyConfig.enabled) {
|
|
61
|
+
this.metaToolProvider = new MetaToolProvider(() => this.toolRegistry, this.schemaCache, outboundConnections, this.loadSchemaFromServer.bind(this), undefined, // allowedServers - set later per session
|
|
62
|
+
templateHashProvider);
|
|
63
|
+
}
|
|
64
|
+
// Listen to server-capabilities-updated events from async orchestrator
|
|
65
|
+
if (asyncOrchestrator) {
|
|
66
|
+
asyncOrchestrator.on('server-capabilities-updated', async (serverName) => {
|
|
67
|
+
try {
|
|
68
|
+
debugIf(() => ({ message: `Server ${serverName} capabilities updated, refreshing tool registry` }));
|
|
69
|
+
await this.refreshCapabilities();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
73
|
+
errorIf(() => ({
|
|
74
|
+
message: 'Failed to refresh capabilities after server update',
|
|
75
|
+
meta: { serverName, error: errorMessage },
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
this.setMaxListeners(50);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Initialize the orchestrator
|
|
84
|
+
*/
|
|
85
|
+
async initialize() {
|
|
86
|
+
if (this.isInitialized) {
|
|
87
|
+
debugIf('LazyLoadingOrchestrator already initialized');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
91
|
+
// Update capabilities first
|
|
92
|
+
await this.capabilityAggregator.updateCapabilities();
|
|
93
|
+
if (lazyConfig.enabled) {
|
|
94
|
+
// Build tool registry from aggregated capabilities
|
|
95
|
+
await this.buildToolRegistry();
|
|
96
|
+
// Preload tools based on configuration
|
|
97
|
+
if (lazyConfig.preload.patterns.length > 0 || lazyConfig.preload.keywords.length > 0) {
|
|
98
|
+
await this.preloadTools();
|
|
99
|
+
}
|
|
100
|
+
logger.info(`LazyLoadingOrchestrator initialized with ${this.toolRegistry.size()} tools`);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
logger.info('LazyLoadingOrchestrator initialized in full mode (disabled)');
|
|
104
|
+
}
|
|
105
|
+
this.isInitialized = true;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Build tool registry from aggregated capabilities
|
|
109
|
+
*/
|
|
110
|
+
async buildToolRegistry() {
|
|
111
|
+
// Build tools map for registry by fetching tools directly from each connection
|
|
112
|
+
const toolsMap = new Map();
|
|
113
|
+
const serverTags = new Map();
|
|
114
|
+
const failedServers = [];
|
|
115
|
+
for (const [serverName, connection] of this.outboundConnections.entries()) {
|
|
116
|
+
if (!connection.client || connection.status !== ClientStatus.Connected) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
// Get tools directly from this server's client
|
|
121
|
+
const toolsResult = await connection.client.listTools();
|
|
122
|
+
const serverTools = toolsResult.tools || [];
|
|
123
|
+
if (serverTools.length > 0) {
|
|
124
|
+
// CRITICAL: Use connection.name instead of map key for server identification
|
|
125
|
+
// Map keys for template servers include hash suffix (e.g., "template-server:abc123")
|
|
126
|
+
// but connection.name is the clean name (e.g., "template-server")
|
|
127
|
+
// This ensures tool registry uses consistent server names
|
|
128
|
+
const effectiveServerName = connection.name || serverName;
|
|
129
|
+
toolsMap.set(effectiveServerName, serverTools);
|
|
130
|
+
// Get tags from transport
|
|
131
|
+
const tags = connection.transport.tags || [];
|
|
132
|
+
serverTags.set(effectiveServerName, tags);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
137
|
+
errorIf(() => ({
|
|
138
|
+
message: 'Failed to list tools from server during registry build',
|
|
139
|
+
meta: { serverName, error: errorMessage },
|
|
140
|
+
}));
|
|
141
|
+
failedServers.push({ server: serverName, error: errorMessage });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Warn if significant failures
|
|
145
|
+
if (failedServers.length > 0) {
|
|
146
|
+
const failureRate = failedServers.length / this.outboundConnections.size;
|
|
147
|
+
if (failureRate > 0.5) {
|
|
148
|
+
errorIf(() => ({
|
|
149
|
+
message: `Tool registry built with ${failedServers.length}/${this.outboundConnections.size} server failures`,
|
|
150
|
+
meta: { failedServers },
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
this.toolRegistry = ToolRegistry.fromToolsMap(toolsMap, serverTags);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Preload tools based on configuration patterns
|
|
158
|
+
*/
|
|
159
|
+
async preloadTools() {
|
|
160
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
161
|
+
const preload = lazyConfig.preload;
|
|
162
|
+
if (preload.patterns.length === 0 && preload.keywords.length === 0) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// Find tools to preload
|
|
166
|
+
const toolsToPreload = [];
|
|
167
|
+
const allTools = this.toolRegistry.listTools({}).tools;
|
|
168
|
+
for (const tool of allTools) {
|
|
169
|
+
// Check server pattern match
|
|
170
|
+
const serverMatch = preload.patterns.some((pattern) => {
|
|
171
|
+
try {
|
|
172
|
+
// Escape special regex chars and convert glob patterns: * -> .*, ? -> .
|
|
173
|
+
const escaped = pattern
|
|
174
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
175
|
+
.replace(/\*/g, '.*')
|
|
176
|
+
.replace(/\?/g, '.');
|
|
177
|
+
const regex = new RegExp(`^${escaped}$`);
|
|
178
|
+
return regex.test(tool.server);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
errorIf(() => ({
|
|
182
|
+
message: 'Invalid pattern in preload configuration',
|
|
183
|
+
meta: { pattern, error },
|
|
184
|
+
}));
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
// Check keyword match
|
|
189
|
+
const keywordMatch = preload.keywords.some((keyword) => tool.name.toLowerCase().includes(keyword.toLowerCase()));
|
|
190
|
+
if (serverMatch || keywordMatch) {
|
|
191
|
+
toolsToPreload.push({
|
|
192
|
+
server: tool.server,
|
|
193
|
+
toolName: tool.name,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (toolsToPreload.length === 0) {
|
|
198
|
+
debugIf('No tools matched preload patterns');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
debugIf(() => ({ message: `Preloading ${toolsToPreload.length} tools` }));
|
|
202
|
+
// Preload schemas
|
|
203
|
+
await this.schemaCache.preload(toolsToPreload, async (server, toolName) => {
|
|
204
|
+
return this.loadSchemaFromServer(server, toolName);
|
|
205
|
+
});
|
|
206
|
+
logger.info(`Preloaded ${toolsToPreload.length} tool schemas`);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Load tool schema from upstream server
|
|
210
|
+
*/
|
|
211
|
+
async loadSchemaFromServer(server, toolName) {
|
|
212
|
+
// Use ConnectionResolver to find the connection (handles template servers with hash-suffixed keys)
|
|
213
|
+
const result = this.connectionResolver.findByServerName(server);
|
|
214
|
+
if (!result || !result.connection.client) {
|
|
215
|
+
throw new Error(`Server not connected: ${server}`);
|
|
216
|
+
}
|
|
217
|
+
// Get the tool from server's listTools
|
|
218
|
+
const toolsResult = await result.connection.client.listTools();
|
|
219
|
+
const tool = toolsResult.tools.find((t) => t.name === toolName);
|
|
220
|
+
if (!tool) {
|
|
221
|
+
throw new Error(`Tool not found: ${server}:${toolName}`);
|
|
222
|
+
}
|
|
223
|
+
return tool;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Preload a specific list of tools (for internal management tool)
|
|
227
|
+
*/
|
|
228
|
+
async preloadToolsList(tools) {
|
|
229
|
+
if (tools.length === 0) {
|
|
230
|
+
debugIf('No tools to preload');
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
debugIf(() => ({ message: `Preloading ${tools.length} specific tools` }));
|
|
234
|
+
// Preload schemas
|
|
235
|
+
await this.schemaCache.preload(tools, async (server, toolName) => {
|
|
236
|
+
return this.loadSchemaFromServer(server, toolName);
|
|
237
|
+
});
|
|
238
|
+
logger.info(`Preloaded ${tools.length} tool schemas`);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get aggregated capabilities based on lazy loading configuration
|
|
242
|
+
*/
|
|
243
|
+
async getCapabilities() {
|
|
244
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
245
|
+
const baseCapabilities = this.capabilityAggregator.getCurrentCapabilities();
|
|
246
|
+
if (!lazyConfig.enabled) {
|
|
247
|
+
// Disabled: return all capabilities normally
|
|
248
|
+
return baseCapabilities;
|
|
249
|
+
}
|
|
250
|
+
// Meta-tool mode: only 3 meta-tools + all resources/prompts
|
|
251
|
+
const metaTools = this.metaToolProvider?.getMetaTools() || [];
|
|
252
|
+
return {
|
|
253
|
+
tools: metaTools,
|
|
254
|
+
resources: baseCapabilities.resources,
|
|
255
|
+
prompts: baseCapabilities.prompts,
|
|
256
|
+
readyServers: baseCapabilities.readyServers,
|
|
257
|
+
timestamp: new Date(),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get aggregated capabilities for a filtered set of servers
|
|
262
|
+
*
|
|
263
|
+
* This method stores session-specific server filters that will be used by:
|
|
264
|
+
* - callMetaTool() to filter tool listings via MetaToolProvider
|
|
265
|
+
*
|
|
266
|
+
* The filter persists for the session and can be cleared by calling clearSessionFilter().
|
|
267
|
+
*
|
|
268
|
+
* @param filteredServerNames - Set of server names to include in capabilities
|
|
269
|
+
* @param sessionId - Optional session ID to associate the filter with
|
|
270
|
+
* @returns Aggregated capabilities filtered to only include specified servers
|
|
271
|
+
*/
|
|
272
|
+
async getCapabilitiesForFilteredServers(filteredServerNames, sessionId) {
|
|
273
|
+
// Store the session-specific filter
|
|
274
|
+
this.sessionAllowedServers.set(sessionId, filteredServerNames);
|
|
275
|
+
// Get the base capabilities
|
|
276
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
277
|
+
const baseCapabilities = this.capabilityAggregator.getCurrentCapabilities();
|
|
278
|
+
if (!lazyConfig.enabled) {
|
|
279
|
+
// Disabled: return all capabilities normally (filtering not applied)
|
|
280
|
+
return baseCapabilities;
|
|
281
|
+
}
|
|
282
|
+
// Meta-tools are always included (they're gateway tools)
|
|
283
|
+
// The filter will be applied when tools are listed via meta-tools
|
|
284
|
+
const metaTools = this.metaToolProvider?.getMetaTools() || [];
|
|
285
|
+
// Filter resources to only include those from filtered servers
|
|
286
|
+
const filteredResources = baseCapabilities.resources.filter((resource) => {
|
|
287
|
+
const resourceName = resource.name;
|
|
288
|
+
// Resources are namespaced with server prefix (e.g., "server_1mcp_resource")
|
|
289
|
+
// Extract server name from resource URI
|
|
290
|
+
const parts = resourceName.split(MCP_URI_SEPARATOR);
|
|
291
|
+
const serverName = parts[0];
|
|
292
|
+
return filteredServerNames.has(serverName);
|
|
293
|
+
});
|
|
294
|
+
// Filter prompts to only include those from filtered servers
|
|
295
|
+
const filteredPrompts = baseCapabilities.prompts.filter((prompt) => {
|
|
296
|
+
const promptName = prompt.name;
|
|
297
|
+
// Prompts are namespaced with server prefix (e.g., "server_1mcp_prompt")
|
|
298
|
+
const parts = promptName.split(MCP_URI_SEPARATOR);
|
|
299
|
+
const serverName = parts[0];
|
|
300
|
+
return filteredServerNames.has(serverName);
|
|
301
|
+
});
|
|
302
|
+
// Filter ready servers
|
|
303
|
+
const filteredReadyServers = baseCapabilities.readyServers.filter((serverName) => filteredServerNames.has(serverName));
|
|
304
|
+
return {
|
|
305
|
+
tools: metaTools,
|
|
306
|
+
resources: filteredResources,
|
|
307
|
+
prompts: filteredPrompts,
|
|
308
|
+
readyServers: filteredReadyServers,
|
|
309
|
+
timestamp: new Date(),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Clear the session-specific filter
|
|
314
|
+
* @param sessionId - Optional session ID whose filter should be cleared
|
|
315
|
+
*/
|
|
316
|
+
clearSessionFilter(sessionId) {
|
|
317
|
+
this.sessionAllowedServers.delete(sessionId);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Get the allowed servers for a specific session
|
|
321
|
+
* @param sessionId - Optional session ID
|
|
322
|
+
* @returns Set of allowed server names, or undefined if no filter is set
|
|
323
|
+
*/
|
|
324
|
+
getSessionAllowedServers(sessionId) {
|
|
325
|
+
return this.sessionAllowedServers.get(sessionId);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Handle listChanged notifications based on lazy loading state
|
|
329
|
+
*/
|
|
330
|
+
shouldNotifyListChanged() {
|
|
331
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
332
|
+
if (lazyConfig.enabled) {
|
|
333
|
+
// No listChanged in meta-tool mode (static tool list)
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
// Standard MCP behavior when disabled
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Refresh capabilities from all servers
|
|
341
|
+
*/
|
|
342
|
+
async refreshCapabilities() {
|
|
343
|
+
await this.capabilityAggregator.updateCapabilities();
|
|
344
|
+
if (this.config.get('lazyLoading').enabled) {
|
|
345
|
+
await this.buildToolRegistry();
|
|
346
|
+
}
|
|
347
|
+
return this.getCapabilities();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Get lazy loading statistics
|
|
351
|
+
*/
|
|
352
|
+
getStatistics() {
|
|
353
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
354
|
+
const cacheStats = this.schemaCache.getStats();
|
|
355
|
+
const registeredCount = this.toolRegistry.size();
|
|
356
|
+
// Calculate token savings
|
|
357
|
+
const currentTokens = this.calculateCurrentTokens();
|
|
358
|
+
const fullLoadTokens = this.calculateFullLoadTokens();
|
|
359
|
+
const savedTokens = fullLoadTokens - currentTokens;
|
|
360
|
+
const savingsPercentage = fullLoadTokens > 0 ? (savedTokens / fullLoadTokens) * 100 : 0;
|
|
361
|
+
return {
|
|
362
|
+
enabled: lazyConfig.enabled,
|
|
363
|
+
registeredToolCount: registeredCount,
|
|
364
|
+
loadedToolCount: this.schemaCache.size(),
|
|
365
|
+
cachedToolCount: this.schemaCache.size(),
|
|
366
|
+
cacheHitRate: cacheStats.hitRate,
|
|
367
|
+
tokenSavings: {
|
|
368
|
+
currentTokens,
|
|
369
|
+
fullLoadTokens,
|
|
370
|
+
savedTokens,
|
|
371
|
+
savingsPercentage,
|
|
372
|
+
},
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Calculate current token usage
|
|
377
|
+
*/
|
|
378
|
+
calculateCurrentTokens() {
|
|
379
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
380
|
+
if (!lazyConfig.enabled) {
|
|
381
|
+
return this.calculateFullLoadTokens();
|
|
382
|
+
}
|
|
383
|
+
// Meta-tools: ~300 tokens
|
|
384
|
+
const metaToolTokens = 300;
|
|
385
|
+
// Tools in registry: names + descriptions only (~10 tokens per tool)
|
|
386
|
+
const registryTokens = this.toolRegistry.size() * 10;
|
|
387
|
+
// Resources and prompts: loaded fully
|
|
388
|
+
const capabilities = this.capabilityAggregator.getCurrentCapabilities();
|
|
389
|
+
const resourcesTokens = capabilities.resources.length * 50; // ~50 tokens per resource
|
|
390
|
+
const promptsTokens = capabilities.prompts.length * 50; // ~50 tokens per prompt
|
|
391
|
+
return metaToolTokens + registryTokens + resourcesTokens + promptsTokens;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Calculate full load token usage
|
|
395
|
+
*/
|
|
396
|
+
calculateFullLoadTokens() {
|
|
397
|
+
const capabilities = this.capabilityAggregator.getCurrentCapabilities();
|
|
398
|
+
// Tools with schemas: ~300 tokens per tool (complex schemas)
|
|
399
|
+
const toolTokens = capabilities.tools.length * 300;
|
|
400
|
+
// Resources: ~50 tokens per resource
|
|
401
|
+
const resourcesTokens = capabilities.resources.length * 50;
|
|
402
|
+
// Prompts: ~50 tokens per prompt
|
|
403
|
+
const promptsTokens = capabilities.prompts.length * 50;
|
|
404
|
+
return toolTokens + resourcesTokens + promptsTokens;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Call a meta-tool if in meta-tool mode
|
|
408
|
+
* @param name - Meta-tool name
|
|
409
|
+
* @param args - Meta-tool arguments
|
|
410
|
+
* @param sessionId - Optional session ID to retrieve filter for
|
|
411
|
+
*/
|
|
412
|
+
async callMetaTool(name, args, sessionId) {
|
|
413
|
+
if (!this.metaToolProvider) {
|
|
414
|
+
throw new Error('Meta-tool provider not initialized');
|
|
415
|
+
}
|
|
416
|
+
// Get the session-specific filter and apply it to the meta-tool provider
|
|
417
|
+
const allowedServers = this.sessionAllowedServers.get(sessionId);
|
|
418
|
+
if (allowedServers) {
|
|
419
|
+
this.metaToolProvider.setAllowedServers(allowedServers);
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
this.metaToolProvider.setAllowedServers(undefined);
|
|
423
|
+
}
|
|
424
|
+
return this.metaToolProvider.callMetaTool(name, args);
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Check if a tool call is a meta-tool
|
|
428
|
+
*/
|
|
429
|
+
isMetaTool(name) {
|
|
430
|
+
return name === 'tool_list' || name === 'tool_schema' || name === 'tool_invoke';
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Get the tool registry
|
|
434
|
+
*/
|
|
435
|
+
getToolRegistry() {
|
|
436
|
+
return this.toolRegistry;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Get the schema cache
|
|
440
|
+
*/
|
|
441
|
+
getSchemaCache() {
|
|
442
|
+
return this.schemaCache;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Check if lazy loading is enabled
|
|
446
|
+
*/
|
|
447
|
+
isEnabled() {
|
|
448
|
+
return this.config.get('lazyLoading').enabled;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Health check for lazy loading subsystem
|
|
452
|
+
* @returns Health status with details
|
|
453
|
+
*/
|
|
454
|
+
getHealthStatus() {
|
|
455
|
+
const lazyConfig = this.config.get('lazyLoading');
|
|
456
|
+
const cacheStats = this.schemaCache.getStats();
|
|
457
|
+
const cacheSize = this.schemaCache.size();
|
|
458
|
+
const issues = [];
|
|
459
|
+
// Check cache utilization (guard against division by zero)
|
|
460
|
+
const maxEntries = lazyConfig.cache.maxEntries;
|
|
461
|
+
const utilizationRate = maxEntries > 0 ? (cacheSize / maxEntries) * 100 : 0;
|
|
462
|
+
if (utilizationRate > 90) {
|
|
463
|
+
issues.push(`Cache utilization high: ${utilizationRate.toFixed(1)}%`);
|
|
464
|
+
}
|
|
465
|
+
// Check hit rate
|
|
466
|
+
const totalRequests = cacheStats.hits + cacheStats.misses;
|
|
467
|
+
const hitRate = totalRequests > 0 ? cacheStats.hitRate : 0;
|
|
468
|
+
// Only warn about low hit rate if we've had enough requests
|
|
469
|
+
if (totalRequests > 100 && hitRate < 50) {
|
|
470
|
+
issues.push(`Low cache hit rate: ${hitRate.toFixed(1)}%`);
|
|
471
|
+
}
|
|
472
|
+
// Check eviction rate
|
|
473
|
+
if (cacheStats.evictions > 100) {
|
|
474
|
+
issues.push(`High eviction count: ${cacheStats.evictions}`);
|
|
475
|
+
}
|
|
476
|
+
return {
|
|
477
|
+
healthy: issues.length === 0,
|
|
478
|
+
enabled: lazyConfig.enabled,
|
|
479
|
+
cache: {
|
|
480
|
+
size: cacheSize,
|
|
481
|
+
maxEntries: lazyConfig.cache.maxEntries,
|
|
482
|
+
utilizationRate,
|
|
483
|
+
},
|
|
484
|
+
stats: {
|
|
485
|
+
hitRate,
|
|
486
|
+
coalescedRequests: cacheStats.coalesced,
|
|
487
|
+
evictions: cacheStats.evictions,
|
|
488
|
+
},
|
|
489
|
+
issues,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Log periodic lazy loading statistics (for monitoring and observability)
|
|
494
|
+
* @param forceLog - Force logging even if debug mode is off
|
|
495
|
+
*/
|
|
496
|
+
logStatistics(forceLog = false) {
|
|
497
|
+
const stats = this.getStatistics();
|
|
498
|
+
const health = this.getHealthStatus();
|
|
499
|
+
const message = `LazyLoading stats: ` +
|
|
500
|
+
`enabled=${stats.enabled}, ` +
|
|
501
|
+
`tools=${stats.registeredToolCount}, cached=${stats.cachedToolCount}, ` +
|
|
502
|
+
`tokenSavings=${stats.tokenSavings.savingsPercentage.toFixed(1)}%, ` +
|
|
503
|
+
`cacheHitRate=${stats.cacheHitRate.toFixed(1)}%, ` +
|
|
504
|
+
`coalesced=${health.stats.coalescedRequests}, ` +
|
|
505
|
+
`health=${health.healthy ? 'OK' : 'WARN'}` +
|
|
506
|
+
(health.issues.length > 0 ? ` [${health.issues.join(', ')}]` : '');
|
|
507
|
+
if (forceLog) {
|
|
508
|
+
logger.info(message);
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
debugIf(message);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
//# sourceMappingURL=lazyLoadingOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazyLoadingOrchestrator.js","sourceRoot":"","sources":["../../../src/core/capabilities/lazyLoadingOrchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,wCAAwC,CAAC;AAClG,OAAO,EAAE,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,EAA0B,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAmBjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IAC/C,mBAAmB,CAAsB;IACzC,MAAM,CAAqB;IAC3B,YAAY,CAAe;IAC3B,WAAW,CAAc;IACzB,gBAAgB,CAAoB;IACpC,oBAAoB,CAAuB;IAC3C,aAAa,GAAY,KAAK,CAAC;IAC/B,iBAAiB,CAA4B;IACrD,oEAAoE;IAC5D,qBAAqB,GAAyC,IAAI,GAAG,EAAE,CAAC;IACxE,kBAAkB,CAAqB;IAE/C,YACE,mBAAwC,EACxC,MAA0B,EAC1B,iBAA4C,EAC5C,oBAA2C;QAE3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;QAE5F,0BAA0B;QAC1B,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7C,0BAA0B;QAC1B,MAAM,WAAW,GAAsB;YACrC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU;YACvC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK;SAC9B,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;QAEhD,6CAA6C;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAEzC,yEAAyE;QACzE,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;QAE1E,2DAA2D;QAC3D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAC1C,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,EACvB,IAAI,CAAC,WAAW,EAChB,mBAAmB,EACnB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,SAAS,EAAE,yCAAyC;YACpD,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,IAAI,iBAAiB,EAAE,CAAC;YACtB,iBAAiB,CAAC,EAAE,CAAC,6BAA6B,EAAE,KAAK,EAAE,UAAkB,EAAE,EAAE;gBAC/E,IAAI,CAAC;oBACH,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,UAAU,iDAAiD,EAAE,CAAC,CAAC,CAAC;oBACpG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACnC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC5E,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;wBACb,OAAO,EAAE,oDAAoD;wBAC7D,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;qBAC1C,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU;QACrB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,6CAA6C,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAElD,4BAA4B;QAC5B,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;QAErD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,mDAAmD;YACnD,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,uCAAuC;YACvC,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrF,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5B,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB;QAC7B,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC/C,MAAM,aAAa,GAA6C,EAAE,CAAC;QAEnE,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1E,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;gBACvE,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,+CAA+C;gBAC/C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACxD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC;gBAE5C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,6EAA6E;oBAC7E,qFAAqF;oBACrF,kEAAkE;oBAClE,0DAA0D;oBAC1D,MAAM,mBAAmB,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC;oBAC1D,QAAQ,CAAC,GAAG,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;oBAE/C,0BAA0B;oBAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC7C,UAAU,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACb,OAAO,EAAE,wDAAwD;oBACjE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE;iBAC1C,CAAC,CAAC,CAAC;gBACJ,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;YACzE,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;oBACb,OAAO,EAAE,4BAA4B,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,kBAAkB;oBAC5G,IAAI,EAAE,EAAE,aAAa,EAAE;iBACxB,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAEnC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,MAAM,cAAc,GAAgD,EAAE,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;QAEvD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,6BAA6B;YAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACpD,IAAI,CAAC;oBACH,wEAAwE;oBACxE,MAAM,OAAO,GAAG,OAAO;yBACpB,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC;yBACpC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;yBACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;oBACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;wBACb,OAAO,EAAE,0CAA0C;wBACnD,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;qBACzB,CAAC,CAAC,CAAC;oBACJ,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,sBAAsB;YACtB,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAEjH,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;gBAChC,cAAc,CAAC,IAAI,CAAC;oBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,cAAc,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1E,kBAAkB;QAClB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;YACxE,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,aAAa,cAAc,CAAC,MAAM,eAAe,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,MAAc,EAAE,QAAgB;QACjE,mGAAmG;QACnG,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,uCAAuC;QACvC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAEhE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gBAAgB,CAAC,KAAkD;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,KAAK,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAE1E,kBAAkB;QAClB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;YAC/D,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,MAAM,eAAe,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,eAAe;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;QAE5E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,6CAA6C;YAC7C,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,4DAA4D;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAE9D,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,gBAAgB,CAAC,SAAS;YACrC,OAAO,EAAE,gBAAgB,CAAC,OAAO;YACjC,YAAY,EAAE,gBAAgB,CAAC,YAAY;YAC3C,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,iCAAiC,CAC5C,mBAAgC,EAChC,SAAkB;QAElB,oCAAoC;QACpC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAE/D,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;QAE5E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,qEAAqE;YACrE,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QAED,yDAAyD;QACzD,kEAAkE;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAE9D,+DAA+D;QAC/D,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;YACvE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;YACnC,6EAA6E;YAC7E,wCAAwC;YACxC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,6DAA6D;QAC7D,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACjE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YAC/B,yEAAyE;YACzE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/E,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CACpC,CAAC;QAEF,OAAO;YACL,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,iBAAiB;YAC5B,OAAO,EAAE,eAAe;YACxB,YAAY,EAAE,oBAAoB;YAClC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,SAAkB;QAC1C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAAC,SAAkB;QAChD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACI,uBAAuB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAElD,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,sDAAsD;YACtD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sCAAsC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,mBAAmB;QAC9B,MAAM,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,CAAC;QAErD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,aAAa;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAEjD,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACtD,MAAM,WAAW,GAAG,cAAc,GAAG,aAAa,CAAC;QACnD,MAAM,iBAAiB,GAAG,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAExF,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,mBAAmB,EAAE,eAAe;YACpC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACxC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;YACxC,YAAY,EAAE,UAAU,CAAC,OAAO;YAChC,YAAY,EAAE;gBACZ,aAAa;gBACb,cAAc;gBACd,WAAW;gBACX,iBAAiB;aAClB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAElD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACxC,CAAC;QAED,0BAA0B;QAC1B,MAAM,cAAc,GAAG,GAAG,CAAC;QAE3B,qEAAqE;QACrE,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QAErD,sCAAsC;QACtC,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;QACxE,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,0BAA0B;QACtF,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,wBAAwB;QAEhF,OAAO,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;IAC3E,CAAC;IAED;;OAEG;IACK,uBAAuB;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;QAExE,6DAA6D;QAC7D,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAEnD,qCAAqC;QACrC,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;QAE3D,iCAAiC;QACjC,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;QAEvD,OAAO,UAAU,GAAG,eAAe,GAAG,aAAa,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,IAAa,EAAE,SAAkB;QACvE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,yEAAyE;QACzE,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEjE,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,IAAY;QAC5B,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;IAChD,CAAC;IAED;;;OAGG;IACI,eAAe;QAepB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,2DAA2D;QAC3D,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;QAC/C,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,2BAA2B,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxE,CAAC;QAED,iBAAiB;QACjB,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;QAC1D,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,4DAA4D;QAC5D,IAAI,aAAa,GAAG,GAAG,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QAED,sBAAsB;QACtB,IAAI,UAAU,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU;gBACvC,eAAe;aAChB;YACD,KAAK,EAAE;gBACL,OAAO;gBACP,iBAAiB,EAAE,UAAU,CAAC,SAAS;gBACvC,SAAS,EAAE,UAAU,CAAC,SAAS;aAChC;YACD,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,QAAQ,GAAG,KAAK;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEtC,MAAM,OAAO,GACX,qBAAqB;YACrB,WAAW,KAAK,CAAC,OAAO,IAAI;YAC5B,SAAS,KAAK,CAAC,mBAAmB,YAAY,KAAK,CAAC,eAAe,IAAI;YACvE,gBAAgB,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YACpE,gBAAgB,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAClD,aAAa,MAAM,CAAC,KAAK,CAAC,iBAAiB,IAAI;YAC/C,UAAU,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YAC1C,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAErE,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { TemplateHashProvider } from '../../core/server/connectionResolver.js';
|
|
3
|
+
import { OutboundConnections } from '../../core/types/index.js';
|
|
4
|
+
import { SchemaCache } from './schemaCache.js';
|
|
5
|
+
import { ToolInvokeOutput, ToolListOutput, ToolSchemaOutput } from './schemas/metaToolSchemas.js';
|
|
6
|
+
import { ToolRegistry } from './toolRegistry.js';
|
|
7
|
+
/**
|
|
8
|
+
* Result types for meta-tools
|
|
9
|
+
*/
|
|
10
|
+
export type ListToolsResult = ToolListOutput;
|
|
11
|
+
export type DescribeToolResult = ToolSchemaOutput;
|
|
12
|
+
export type CallToolResult = ToolInvokeOutput;
|
|
13
|
+
/**
|
|
14
|
+
* Function to load tool schema from upstream server
|
|
15
|
+
*/
|
|
16
|
+
export type SchemaLoader = (server: string, toolName: string) => Promise<Tool>;
|
|
17
|
+
/**
|
|
18
|
+
* Arguments for tool_list
|
|
19
|
+
*/
|
|
20
|
+
export interface ListAvailableToolsArgs {
|
|
21
|
+
server?: string;
|
|
22
|
+
pattern?: string;
|
|
23
|
+
tag?: string;
|
|
24
|
+
limit?: number;
|
|
25
|
+
cursor?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Arguments for tool_schema
|
|
29
|
+
*/
|
|
30
|
+
export interface DescribeToolArgs {
|
|
31
|
+
server: string;
|
|
32
|
+
toolName: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Arguments for tool_invoke
|
|
36
|
+
*/
|
|
37
|
+
export interface CallToolArgs {
|
|
38
|
+
server: string;
|
|
39
|
+
toolName: string;
|
|
40
|
+
args: unknown;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Function to get the current tool registry
|
|
44
|
+
* This allows the provider to always have access to the latest registry
|
|
45
|
+
*/
|
|
46
|
+
export type ToolRegistryProvider = () => ToolRegistry;
|
|
47
|
+
/**
|
|
48
|
+
* MetaToolProvider provides meta-tools for lazy loading:
|
|
49
|
+
* 1. tool_list - List all tools (names + descriptions only)
|
|
50
|
+
* 2. tool_schema - Get full tool schema on-demand
|
|
51
|
+
* 3. tool_invoke - Invoke any tool by server and name
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const provider = new MetaToolProvider(() => toolRegistry, schemaCache, outboundConnections, loadSchemaFn);
|
|
56
|
+
* const tools = provider.getMetaTools();
|
|
57
|
+
* const result = await provider.callMetaTool('tool_list', { server: 'filesystem' });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare class MetaToolProvider {
|
|
61
|
+
private getToolRegistry;
|
|
62
|
+
private schemaCache;
|
|
63
|
+
private outboundConnections;
|
|
64
|
+
private loadSchema?;
|
|
65
|
+
private allowedServers?;
|
|
66
|
+
private connectionResolver;
|
|
67
|
+
constructor(getToolRegistry: ToolRegistryProvider, schemaCache: SchemaCache, outboundConnections: OutboundConnections, loadSchema?: SchemaLoader, allowedServers?: Set<string>, templateHashProvider?: TemplateHashProvider);
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a clean server name to the actual connection key.
|
|
70
|
+
* Delegates to ConnectionResolver.findByServerName for unified resolution logic.
|
|
71
|
+
*
|
|
72
|
+
* @param cleanServerName - The clean server name (without hash suffix)
|
|
73
|
+
* @returns The actual connection key, or the original name if not found
|
|
74
|
+
*/
|
|
75
|
+
private resolveConnectionKey;
|
|
76
|
+
/**
|
|
77
|
+
* Set the allowed servers filter
|
|
78
|
+
* @param serverNames - Set of server names to allow, or undefined to allow all
|
|
79
|
+
*/
|
|
80
|
+
setAllowedServers(serverNames?: Set<string>): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get the current tool registry, optionally filtered by allowed servers
|
|
83
|
+
*/
|
|
84
|
+
private toolRegistry;
|
|
85
|
+
/**
|
|
86
|
+
* Get all available meta-tools (3 discovery tools)
|
|
87
|
+
*/
|
|
88
|
+
getMetaTools(): Tool[];
|
|
89
|
+
/**
|
|
90
|
+
* Call a meta-tool by name
|
|
91
|
+
*/
|
|
92
|
+
callMetaTool(name: string, args: unknown): Promise<ListToolsResult | DescribeToolResult | CallToolResult>;
|
|
93
|
+
/**
|
|
94
|
+
* Create the tool_list meta-tool
|
|
95
|
+
*/
|
|
96
|
+
private createListToolsMetaTool;
|
|
97
|
+
/**
|
|
98
|
+
* Implement tool_list
|
|
99
|
+
*/
|
|
100
|
+
private listAvailableTools;
|
|
101
|
+
/**
|
|
102
|
+
* Create the tool_schema meta-tool
|
|
103
|
+
*/
|
|
104
|
+
private createDescribeToolMetaTool;
|
|
105
|
+
/**
|
|
106
|
+
* Implement tool_schema
|
|
107
|
+
*/
|
|
108
|
+
private describeTool;
|
|
109
|
+
/**
|
|
110
|
+
* Create the tool_invoke meta-tool
|
|
111
|
+
*/
|
|
112
|
+
private createCallToolMetaTool;
|
|
113
|
+
/**
|
|
114
|
+
* Implement tool_invoke
|
|
115
|
+
*/
|
|
116
|
+
private callTool;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=metaToolProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metaToolProvider.d.ts","sourceRoot":"","sources":["../../../src/core/capabilities/metaToolProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAsB,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAEL,gBAAgB,EAGhB,cAAc,EAGd,gBAAgB,EAEjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAgB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;AAC7C,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAClD,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,UAAU,CAAC,CAAe;IAClC,OAAO,CAAC,cAAc,CAAC,CAAc;IACrC,OAAO,CAAC,kBAAkB,CAAqB;gBAG7C,eAAe,EAAE,oBAAoB,EACrC,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,CAAC,EAAE,YAAY,EACzB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,oBAAoB,CAAC,EAAE,oBAAoB;IAU7C;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;;OAGG;IACI,iBAAiB,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI;IAIzD;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACI,YAAY,IAAI,IAAI,EAAE;IAI7B;;OAEG;IACU,YAAY,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,eAAe,GAAG,kBAAkB,GAAG,cAAc,CAAC;IA4DjE;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAS/B;;OAEG;YACW,kBAAkB;IA8ChC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IASlC;;OAEG;YACW,YAAY;IA4F1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;YACW,QAAQ;CAkFvB"}
|