mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-07-18 22:10:52 -07:00
fix(core): ensure subagents use qualified MCP tool names (#20801)
This commit is contained in:
@@ -380,20 +380,36 @@ describe('ToolRegistry', () => {
|
||||
});
|
||||
|
||||
describe('getAllToolNames', () => {
|
||||
it('should return all registered tool names', () => {
|
||||
it('should return all registered tool names with qualified names for MCP tools', () => {
|
||||
// Register tools with displayNames in non-alphabetical order
|
||||
const toolC = new MockTool({ name: 'c-tool', displayName: 'Tool C' });
|
||||
const toolA = new MockTool({ name: 'a-tool', displayName: 'Tool A' });
|
||||
const toolB = new MockTool({ name: 'b-tool', displayName: 'Tool B' });
|
||||
const mcpTool = createMCPTool('my-server', 'my-tool', 'desc');
|
||||
|
||||
toolRegistry.registerTool(toolC);
|
||||
toolRegistry.registerTool(toolA);
|
||||
toolRegistry.registerTool(toolB);
|
||||
toolRegistry.registerTool(mcpTool);
|
||||
|
||||
const toolNames = toolRegistry.getAllToolNames();
|
||||
|
||||
// Assert that the returned array contains all tool names
|
||||
expect(toolNames).toEqual(['c-tool', 'a-tool', 'b-tool']);
|
||||
// Assert that the returned array contains all tool names, with MCP qualified
|
||||
expect(toolNames).toContain('c-tool');
|
||||
expect(toolNames).toContain('a-tool');
|
||||
expect(toolNames).toContain('my-server__my-tool');
|
||||
expect(toolNames).toHaveLength(3);
|
||||
});
|
||||
|
||||
it('should deduplicate tool names', () => {
|
||||
const serverName = 'my-server';
|
||||
const toolName = 'my-tool';
|
||||
const mcpTool = createMCPTool(serverName, toolName, 'desc');
|
||||
|
||||
// Register same MCP tool twice (one as alias, one as qualified)
|
||||
toolRegistry.registerTool(mcpTool);
|
||||
toolRegistry.registerTool(mcpTool.asFullyQualifiedTool());
|
||||
|
||||
const toolNames = toolRegistry.getAllToolNames();
|
||||
expect(toolNames).toEqual([`${serverName}__${toolName}`]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -465,8 +481,8 @@ describe('ToolRegistry', () => {
|
||||
'builtin-1',
|
||||
'builtin-2',
|
||||
DISCOVERED_TOOL_PREFIX + 'discovered-1',
|
||||
'mcp-apple',
|
||||
'mcp-zebra',
|
||||
'apple-server__mcp-apple',
|
||||
'zebra-server__mcp-zebra',
|
||||
]);
|
||||
});
|
||||
});
|
||||
@@ -659,6 +675,34 @@ describe('ToolRegistry', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('getFunctionDeclarations', () => {
|
||||
it('should use fully qualified names for MCP tools in declarations', () => {
|
||||
const serverName = 'my-server';
|
||||
const toolName = 'my-tool';
|
||||
const mcpTool = createMCPTool(serverName, toolName, 'description');
|
||||
|
||||
toolRegistry.registerTool(mcpTool);
|
||||
|
||||
const declarations = toolRegistry.getFunctionDeclarations();
|
||||
expect(declarations).toHaveLength(1);
|
||||
expect(declarations[0].name).toBe(`${serverName}__${toolName}`);
|
||||
});
|
||||
|
||||
it('should deduplicate MCP tools in declarations', () => {
|
||||
const serverName = 'my-server';
|
||||
const toolName = 'my-tool';
|
||||
const mcpTool = createMCPTool(serverName, toolName, 'description');
|
||||
|
||||
// Register both alias and qualified
|
||||
toolRegistry.registerTool(mcpTool);
|
||||
toolRegistry.registerTool(mcpTool.asFullyQualifiedTool());
|
||||
|
||||
const declarations = toolRegistry.getFunctionDeclarations();
|
||||
expect(declarations).toHaveLength(1);
|
||||
expect(declarations[0].name).toBe(`${serverName}__${toolName}`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('plan mode', () => {
|
||||
it('should only return policy-allowed tools in plan mode', () => {
|
||||
// Register several tools
|
||||
|
||||
Reference in New Issue
Block a user