diff options
| author | Gal Zahavi <[email protected]> | 2025-07-30 17:16:21 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-31 00:16:21 +0000 |
| commit | d06e17fbd9d08ac5efccf0c2b4d5fd4f703b15c7 (patch) | |
| tree | a087617c4937491d689625d2ee631f384aad34e4 /packages/core/src/tools/mcp-client.test.ts | |
| parent | 0c6f7884060bd30996b212ffa135d95b1c779798 (diff) | |
Improve error message for discoverTools function (#4157)
Diffstat (limited to 'packages/core/src/tools/mcp-client.test.ts')
| -rw-r--r-- | packages/core/src/tools/mcp-client.test.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/packages/core/src/tools/mcp-client.test.ts b/packages/core/src/tools/mcp-client.test.ts index 4560982c..a8289d3b 100644 --- a/packages/core/src/tools/mcp-client.test.ts +++ b/packages/core/src/tools/mcp-client.test.ts @@ -21,11 +21,14 @@ import { GoogleCredentialProvider } from '../mcp/google-auth-provider.js'; import { AuthProviderType } from '../config/config.js'; import { PromptRegistry } from '../prompts/prompt-registry.js'; +import { DiscoveredMCPTool } from './mcp-tool.js'; + vi.mock('@modelcontextprotocol/sdk/client/stdio.js'); vi.mock('@modelcontextprotocol/sdk/client/index.js'); vi.mock('@google/genai'); vi.mock('../mcp/oauth-provider.js'); vi.mock('../mcp/oauth-token-storage.js'); +vi.mock('./mcp-tool.js'); describe('mcp-client', () => { afterEach(() => { @@ -50,6 +53,52 @@ describe('mcp-client', () => { expect(tools.length).toBe(1); expect(mockedMcpToTool).toHaveBeenCalledOnce(); }); + + it('should log an error if there is an error discovering a tool', async () => { + const mockedClient = {} as unknown as ClientLib.Client; + const consoleErrorSpy = vi + .spyOn(console, 'error') + .mockImplementation(() => { + // no-op + }); + + const testError = new Error('Invalid tool name'); + vi.mocked(DiscoveredMCPTool).mockImplementation( + ( + _mcpCallableTool: GenAiLib.CallableTool, + _serverName: string, + name: string, + ) => { + if (name === 'invalid tool name') { + throw testError; + } + return { name: 'validTool' } as DiscoveredMCPTool; + }, + ); + + vi.mocked(GenAiLib.mcpToTool).mockReturnValue({ + tool: () => + Promise.resolve({ + functionDeclarations: [ + { + name: 'validTool', + }, + { + name: 'invalid tool name', // this will fail validation + }, + ], + }), + } as unknown as GenAiLib.CallableTool); + + const tools = await discoverTools('test-server', {}, mockedClient); + + expect(tools.length).toBe(1); + expect(tools[0].name).toBe('validTool'); + expect(consoleErrorSpy).toHaveBeenCalledOnce(); + expect(consoleErrorSpy).toHaveBeenCalledWith( + `Error discovering tool: 'invalid tool name' from MCP server 'test-server': ${testError.message}`, + ); + }); }); describe('discoverPrompts', () => { |
