diff options
| author | N. Taylor Mullen <[email protected]> | 2025-06-03 00:40:51 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-03 07:40:51 +0000 |
| commit | c71d6ddc3b6dd68bde40cc2b208825ba173f3ba1 (patch) | |
| tree | a789821be849e9a2b7debe3870a7caeb736f89a8 /packages/core/src/tools/mcp-client.ts | |
| parent | 5f6f6a95a2de30373665aae5472e2a5bb2bc25fb (diff) | |
Fix: Ensure MCP tools are discovered from slow-starting servers (#717)
Diffstat (limited to 'packages/core/src/tools/mcp-client.ts')
| -rw-r--r-- | packages/core/src/tools/mcp-client.ts | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/packages/core/src/tools/mcp-client.ts b/packages/core/src/tools/mcp-client.ts index 87835219..1b7823c7 100644 --- a/packages/core/src/tools/mcp-client.ts +++ b/packages/core/src/tools/mcp-client.ts @@ -8,15 +8,18 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; import { parse } from 'shell-quote'; -import { Config, MCPServerConfig } from '../config/config.js'; +import { MCPServerConfig } from '../config/config.js'; import { DiscoveredMCPTool } from './mcp-tool.js'; import { CallableTool, FunctionDeclaration, mcpToTool } from '@google/genai'; +import { ToolRegistry } from './tool-registry.js'; -export async function discoverMcpTools(config: Config): Promise<void> { - const mcpServers = config.getMcpServers() || {}; - - if (config.getMcpServerCommand()) { - const cmd = config.getMcpServerCommand()!; +export async function discoverMcpTools( + mcpServers: Record<string, MCPServerConfig>, + mcpServerCommand: string | undefined, + toolRegistry: ToolRegistry, +): Promise<void> { + if (mcpServerCommand) { + const cmd = mcpServerCommand; const args = parse(cmd, process.env) as string[]; if (args.some((arg) => typeof arg !== 'string')) { throw new Error('failed to parse mcpServerCommand: ' + cmd); @@ -30,7 +33,7 @@ export async function discoverMcpTools(config: Config): Promise<void> { const discoveryPromises = Object.entries(mcpServers).map( ([mcpServerName, mcpServerConfig]) => - connectAndDiscover(mcpServerName, mcpServerConfig, config), + connectAndDiscover(mcpServerName, mcpServerConfig, toolRegistry), ); await Promise.all(discoveryPromises); } @@ -38,7 +41,7 @@ export async function discoverMcpTools(config: Config): Promise<void> { async function connectAndDiscover( mcpServerName: string, mcpServerConfig: MCPServerConfig, - config: Config, + toolRegistry: ToolRegistry, ): Promise<void> { let transport; if (mcpServerConfig.url) { @@ -90,7 +93,6 @@ async function connectAndDiscover( }); } - const toolRegistry = await config.getToolRegistry(); try { const mcpCallableTool: CallableTool = mcpToTool(mcpClient); const discoveredToolFunctions = await mcpCallableTool.tool(); |
